Javascript 从“onclick”部分值中查找并单击项目

Javascript 从“onclick”部分值中查找并单击项目,javascript,python,selenium,selenium-webdriver,beautifulsoup,Javascript,Python,Selenium,Selenium Webdriver,Beautifulsoup,是否可以通过onclick元素的部分值单击selenium中的元素 一个页面上有多个输入项,我只需要选择一个带有特定字符串的输入项 例如: <input name="booksubmit" type="button" class="searchAvailBtnSelect" value="Select" onclick="setTimeout('disableSelect()',1);bookNowSubmit('0165','1BD','000000452014022703S000016

是否可以通过onclick元素的部分值单击selenium中的元素

一个页面上有多个输入项,我只需要选择一个带有特定字符串的输入项

例如:

<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')">
什么事?我目前正在使用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")]')

你在正确的轨道上

buttons = driver.find_elements_by_name('booksubmit')
for button in buttons:
是的,就是这个。您希望遍历name=booksubmit元素并检查每个元素的onclick属性。以下是其余部分的情况:

buttons = driver.find_elements_by_name('booksubmit')
for button in buttons:
    onclick_text = button.get_attribute('onclick')
    if onclick_text and re.search('Bedroom Deluxe', onclick_text):
        print "found it!"
        button.click()

在这种情况下,BeautifulSoup没有多大帮助,因为您仍然需要使用selenium的方法来获取要单击的元素。

XPath或CssSelector都可以。不需要任何循环,但是直接的定位器

driver.find_element_by_xpath(".//input[contains(@onclick, '1 Bedroom Deluxe')]")

driver.find_element_by_css_selector("input[onclick*='1 Bedroom Deluxe']")

解决这类问题的一般答案是使用Selenium IDE。从这里,您可以手动单击网站上的按钮,并让Selenium IDE a Firefox插件记录您的操作。从那里你可以文件>导出测试用例为。。。并选择您想要的任何编码语言

Selenium下载页面:

Selenium IDE Firefox插件版本2.9.0

编辑:有时您可能确实找到了正确的元素,但webdriver会在它出现之前尝试找到它。创建webdriver后,请尝试添加此行: 在Python中: driver.implicitly_wait10
这告诉您的webdriver给自己更多的时间来尝试查找对象。它没有增加10秒的等待时间,而是说继续寻找10秒。如果它在10秒前找到元素,它将继续正常运行。

太棒了!我甚至没有想到使用get_属性方法然后搜索它。肯定会对其他项目有所帮助。谢谢
driver.find_element_by_xpath(".//input[contains(@onclick, '1 Bedroom Deluxe')]")

driver.find_element_by_css_selector("input[onclick*='1 Bedroom Deluxe']")