我正试图使用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