python - Python 和 Selenium - 根据名称和文本选择特定的单选按钮
问题描述
我正在尝试使用 python 和 selenium 从网页中的几个单选按钮中选择一个特定的单选按钮。幸运的是,我要选择的单选按钮确实关联了特定的文本,这应该让我更容易选择。不幸的是,我错过了一些东西,因为所有尝试都出错了。下面是 HTML 代码,我尝试过的,以及我想要实现的。
HTML
<div data-a-input-name="slotsRadioGroup" class="a-radio a-radio-fancy slotButtonRadio"><label><input type="radio" name="slotsRadioGroup" value="" autocomplete="off"><i class="a-icon a-icon-radio"></i><span class="a-label a-radio-label">
<span class="slotRadioLabel">
5PM - 7PM
</span>
<div class="a-row">
<span class="a-size-small slot-button-micro-copy preselected-visible">
Soonest available time with all items.
</span>
</div>
</span></label></div>
</div></div>
我需要选择的单选按钮将始终显示文本“Soonest available...”。
我试过的
我尝试了不同的 xpath 代码变体来尝试根据文本选择它。我的最后一次尝试是:
driver.find_element_by_xpath("//input[@type='radio']and following-sibling::span[contains(., 'Soonest available')").click()
这会导致以下错误:
SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//input[@type='radio']and following-sibling::span[contains(., 'Soonest available')' is not a valid XPath expression.
预期结果 我想要的是能够根据上面存在的文本选择特定的单选按钮。
解决方案
根据文本选择单选按钮 InduceWebDriverWait
并等待element_to_be_clickable
() 和以下xpath
选项。
XPATH 1:
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//label[.//span[contains(.,'Soonest available time with all items')]]/input[@name='slotsRadioGroup']"))).click()
XPATH 2:
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//span[contains(.,'Soonest available time with all items')]/preceding-sibling::input[1]"))).click()
如果 Web 驱动程序单击不起作用,那么您可以尝试javascripts
执行程序单击相同的。
radiobtn=WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,"//label[.//span[contains(.,'Soonest available time with all items')]]/input[@name='slotsRadioGroup']")))
driver.execute_script("arguments[0].click();", radiobtn)
注意:- 您需要导入以下库。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
推荐阅读
- uitableview - iOS 12 - Xcode 10 - SWIFT 4.2 - UITableView 左右两侧缺少额外空间
- c++ - 从右值引用到基的构造函数 - 可行(gcc)或不可行(clang) - 谁是对的
- postgresql - 基于列值的 D+14 天或 D-14 天
- html - 在Angular 6中显示逗号分隔的字符串
- wpf - WPF - 如何更改 ContentControl 单击 TreeViewItem 的内容?
- angular - 如何从 MatSort 获取所有可排序的列
- java - 使用 listView/recyclerView 对不同行进行不同布局(显示图像或文本)
- laravel - 码头工人。拉拉维尔。在“关闭”容器后清除缓存
- html - 试图让一个 flexbox 开始排成一排,响应时上下移动不同的 div
- excel - 将 Haskell 库导出为 DLL