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>

我需要选择的单选按钮将始终显示文本"最早可用…"。

我尝试过的

我尝试了不同的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

试试这个:

for i in driver.find_elements_by_tag_name("span"):
if "Soonest available" in i.text:
result = i
break

相关内容

  • 没有找到相关文章

最新更新