Python和Selenium-根据其中的名称和文本选择特定的单选按钮

Python和Selenium-根据其中的名称和文本选择特定的单选按钮,python,python-3.x,selenium,xpath,selenium-chromedriver,Python,Python 3.x,Selenium,Xpath,Selenium Chromedriver,我试图使用python和selenium从网页中的几个单选按钮中选择一个特定的单选按钮。幸运的是,我想要选择的单选按钮确实有特定的文本关联,这应该让我更容易选择。不幸的是,我错过了一些东西,因为所有的尝试都失败了。下面是HTML代码,我已经尝试过了,我正在努力实现 HTML <div data-a-input-name="slotsRadioGroup" class="a-radio a-radio-fancy slotButtonRadio"><label>&l

我试图使用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>
这将导致以下错误:

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.
预期结果 我想要的是能够选择特定的单选按钮的基础上,上述文本存在

试试这个:

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

要根据文本选择单选按钮,请导入
WebDriverWait
,并等待
元素可单击
()并遵循
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()
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//span[contains(.,'Soonest available time with all items')]/preceding-sibling::input[1]"))).click()

XPATH 2:

WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//label[.//span[contains(.,'Soonest available time with all items')]]/input[@name='slotsRadioGroup']"))).click()
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
executor单击相同的操作

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

你能分享链接吗?因为没有链接不能测试它。看看这是否有帮助:所以,提供准确的URL有点困难。上述内容旨在查找一个元素,该元素仅在Amazon Fresh上找到可用的装运槽时才存在。考虑到目前的情况,这是很少的。但是,当该文本可用时,URL应指向以下位置: