是否可以通过selenium通过onclick
元素的部分值单击元素?
一个页面上有多个输入项,我只需要选择一个具有特定字符串的项。
例如:
<input name="booksubmit" type="button" class="searchAvailBtnSelect" value="Select" onclick="setTimeout('disableSelect()',1);bookNowSubmit('0165','1BD','000000452014022703S000016500010708F ','101400','156000','3','02/27/2014','false','false','false','false','true','false','false','EXPRESS','63','1 Bedroom Deluxe','false','AC')">
<input name="booksubmit" type="button" class="searchAvailBtnSelect" value="Select" onclick="setTimeout('disableSelect()',1);bookNowSubmit('0165','2BD','000000452014022703S000016500010708F ','101400','156000','3','02/27/2014','false','false','false','false','true','false','false','EXPRESS','63','2 Bedroom Deluxe','false','AC')">
<input name="booksubmit" type="button" class="searchAvailBtnSelect" value="Select" onclick="setTimeout('disableSelect()',1);bookNowSubmit('0165','1BD','000000452014022703S000016500010708F ','101400','156000','3','02/27/2014','false','false','false','false','true','false','false','EXPRESS','63','1 Bedroom Presidential','false','AC')">
如果你注意到最后,有一个“1卧室豪华”,“2卧室豪华”,和“1卧室总统”。因为它是一个输入项,所以没有任何文本可供我筛选,但我只需要选择一个特定的项,例如2卧室豪华型。
我能做点什么吗
buttons = driver.find_elements_by_name('booksubmit')
for button in buttons:
if button ........
有什么事吗?我目前正在使用beautifulsoup4来解析页面上的html并检索与该项相关联的文本,所以我根本不知道这是否可以合并。从视觉上看,页面是一个HTML表,格式如下:
+--------------------------------------------------------------------+
| 1 Bedroom Deluxe | $25 | [button i don't care about] |
|------------------------+---------+---------------------------------|
| 2 Bedroom Deluxe | $50 | [button i'm trying to click] |
|------------------------+---------+---------------------------------|
| 1 Bedroom Presidential | $50 | [button i don't care about] |
+--------------------------------------------------------------------+
编辑:
我想发布这个太早了。紧接着,一位同事过来建议用Xpath查找元素:
driver.find_element_by_xpath('//input[contains(@onclick,"1 Bedroom Deluxe")]')
XPath或CssSelector都可以。不需要任何循环,但直接定位。
你走对了路!
是的,就是这个。您需要遍历
name = booksubmit
元素并检查每个元素的“onclick”属性。剩下的是什么样子的:在这种情况下,BeautifulSoup没有多大帮助,因为您仍然需要使用selenium的方法来获取要单击的元素的一个列表。
解决这些问题的一个普遍答案是使用硒IDE。从这里,您可以手动单击网站上的按钮,并让Selenium IDE(一个Firefox插件)记录您的操作。从那里您可以将>;测试用例导出为。。。选择你想要的编码语言。
Selenium下载页面: http://docs.seleniumhq.org/download/
Selenium IDE Firefox插件2.9.0版 http://release.seleniumhq.org/selenium-ide/2.9.0/selenium-ide-2.9.0.xpi
编辑:有时您可能实际上找到了正确的元素,但webdriver会在元素出现之前尝试找到它。创建网络驱动程序后,尝试添加此行:
在Python中:
driver.implicitly_wait(10)
这告诉你的webdriver给自己更多的时间去寻找对象。它并没有增加10秒的等待时间,而是说继续寻找10秒。如果在10秒前找到元素,它将继续正常运行。
相关问题 更多 >
编程相关推荐