为了账号安全,请及时绑定邮箱和手机立即绑定

根据名称和文本选择特定的单选按钮

根据名称和文本选择特定的单选按钮

MYYA 2022-10-11 21:06:17
我正在尝试使用 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.预期结果 我想要的是能够根据上面存在的文本选择特定的单选按钮。
查看完整描述

2 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

根据文本选择单选按钮 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


查看完整回答
反对 回复 2022-10-11
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

尝试这个:


for i in driver.find_elements_by_tag_name("span"):

    if "Soonest available" in i.text:

        result = i

        break


查看完整回答
反对 回复 2022-10-11
  • 2 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号