javascript - 从 'onclick' 部分值中查找并单击一个项目

标签 javascript python selenium selenium-webdriver beautifulsoup

是否可以通过 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')">

如果您注意到最后,有“1 居室豪华房”、“2 居室豪华房”和“1 居室总统房”。由于它是一个输入项,因此没有任何文本可供我过滤,但我只需要选择一个特定的项,例如 2 Bedroom Deluxe。

有什么我可以做的:

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 都可以。无需任何循环,但直接定位器。

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

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

关于javascript - 从 'onclick' 部分值中查找并单击一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21691126/

相关文章:

javascript - 如何修复 Safari 上 moment.js 的解析错误?

javascript - 添加id到动态创建的DIV

python - 如何使用 python boto 获取亚马逊 S3 中唯一文件夹的列表?

python - Python 中的 MemoryView 和垃圾收集

python - 使用 CSS/HTML/Python/SASS(但没有 JS)根据值更改表格单元格的背景颜色?不需要动态

java - 如何使用xpath定位元素

javascript - 无法将 video.js 组件包装在 react-loadable 中

javascript - Node js 和 eBay API 实现

java - 我无法导航到我的 Selenium 代码的其他部分,总是失败

python - 如何在 selenium python 中通过 CSS 选择器找到确切的类?