【问题标题】:Selenium Checkbox Selection硒复选框选择
【发布时间】:2021-01-30 18:48:57
【问题描述】:

我正在尝试使用 selenium 单击复选框,如图的 HTML 所示。想法是,所有四个选项的复选框输入标记都是相同的,它们仅通过 id="country_england" ... 来区分。我不确定如何编写代码来选择英格兰框并单击它。任何帮助表示赞赏。

HTML 代码:

【问题讨论】:

    标签: python selenium selenium-webdriver xpath webdriverwait


    【解决方案1】:

    使用 xpath:

     //b[@id="country_england"]/../input
    

    这会找到具有该 ID 的 p 标签,然后转到父元素并导航回输入元素

    您也可以使用:

          //b[@id="country_england"]/preceding-sibling::input
    

    这会找到p标签的前面有标签输入的元素

    代码是:

    webD.get("https://icem.data-archive.ac.uk/#step1")
    
    WebDriverWait(webD, 20).until(EC.element_to_be_clickable(
        (By.XPATH, '//*[@value="1861"]'))).click()
    
    
    WebDriverWait(webD, 20).until(EC.element_to_be_clickable(
        (By.XPATH, '//b[@id = "country_england"]/preceding-sibling::input'))).click()
    

    【讨论】:

    • boxEng = webD.find_element_by_xpath('//p[@id="country_england"]::preceding-sibling/input') boxEng.click() 代码仍然不成功.. 你能看到一个问题?谢谢你的帮助!!
    • webD.find_element_by_xpath('//p[@id="country_england"]/preceding-sibling::input').click()
    • @RyeRye 也用代码更新了答案
    • 非常感谢您的帮助!!但仍然没有成功.. 有什么我可以给你的额外信息对你有帮助吗?无论如何,我确实看到这是正确的方向,感觉如此接近......
    • 你能提供网站的网址吗?元素在 iframe 内吗?
    【解决方案2】:

    所需的元素是Angular 元素。所以点击你需要为element_to_be_clickable()诱导WebDriverWait的元素,你可以使用以下Locator Strategies之一:

    • 使用XPATH前面的

      driver.get("https://icem.data-archive.ac.uk/#step1")
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@value='1851']"))).click()
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//b[@class='ng-binding' and @id='country_england']//preceding::input[1]"))).click()
      
    • 使用XPATHpreceding-sibling

      driver.get("https://icem.data-archive.ac.uk/#step1")
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@value='1851']"))).click()
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//b[@class='ng-binding' and @id='country_england']//preceding-sibling::input[1]"))).click()
      
    • 注意:您必须添加以下导入:

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      
    • 浏览器快照:


    更新

    【讨论】:

    • 哇,非常感谢您的广泛回复。可惜还是没有成功。如果你想仔细看看,网站如下:icem.data-archive.ac.uk/#step1谢谢你的帮助!!
    • 你能详细说明一下这个建议吗?不知道如何实现它。但我不认为我可以......我会睡在上面,明天用新的眼睛看看。再次感谢您,如果您有任何其他想法,我很想尝试一下:)
    • @RyeRye 查看更新的答案并告诉我状态。
    • 确实眼睛累了...是的,我能够做到,因为输入代码具有唯一值来识别多年来的每个复选框。我使用经典的 xpath 并单击组合。谢谢!现在将尝试:)
    • PDHide 建议使用以下代码: WebDriverWait(webD, 20).until(EC.element_to_be_clickable( (By.XPATH, '//b[@id = "country_england"]/preceding-sibling::输入'))).click() 并成功。非常感谢您的帮助 :) 我终于可以说...晚安!
    猜你喜欢
    • 2021-05-03
    • 2020-07-16
    • 1970-01-01
    • 2011-08-14
    • 2020-05-11
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多