【问题标题】:How to click within the checkbox as per the HTML through Selenium Python如何通过 Selenium Python 根据 HTML 在复选框内单击
【发布时间】:2019-02-18 15:01:39
【问题描述】:

大家好,我试图点击这个复选框:

<label class="has-checkbox terms"><input name="order[terms]" type="hidden" value="0" /><input class="checkbox" type="checkbox" value="1" name="order[terms]" id="order_terms" />I have read and agree to the <a href="http://www.supremenewyork.com/shop/terms">terms & conditions</a>, and accept the return policy<span class="terms-error">please agree to the terms</span></label></p><div class="g-recaptcha" data-callback="checkoutAfterCaptcha" data-sitekey="AAAA3423" data-size="invisible"></div><input id="number_v" name="hpcvv" /></fieldset></div></div><div id="cart-footer"><div id="pay"><p style="">Surgelati</p><input type="submit" name="commit" value="process payment" class="button checkout" disable_with="processing, please wait..." /><a class="button cancel" href="http://www.altervista.com/shop">cancel</a></div></div></form></div><div id="surchage_info_tooltip">Vendita 

我试过了:

from selenium.webdriver.common.action_chains import ActionChains

element = driver.find_element_by_id("order_terms")

actions = ActionChains(driver)
actions.move_to_element(element).perform()
driver.execute_script("arguments[0].click();", element)
element = driver.find_element_by_id('order_terms').click()

driver.find_element_by_class_name("has-checkbox terms").click()
driver.find_element_by_xpath(".//*[contains(text(), 'I have read and agree to the')]").click()

所有这些代码,但没有一个有效....

这行得通

actions.move_to_element(element).perform()

部分是因为复选框似乎有鼠标,但它没有点击,你能帮帮我吗?

【问题讨论】:

  • 你能分享页面网址吗?

标签: javascript python selenium xpath css-selectors


【解决方案1】:

根据您共享的 HTML,在 复选框 上调用 click(),您可以使用以下任一解决方案:

  • CSS_SELECTOR:

    driver.find_element_by_css_selector("label.has-checkbox.terms input.checkbox#order_terms").click()
    
  • XPATH:

    driver.find_element_by_xpath("//label[@class='has-checkbox terms']//input[@class='checkbox' and @id='order_terms']").click()
    

更新

当您看到错误Other element would receive the click时,您可以采用以下任一解决方案:

  • 诱导WebDriverWait

    • CSS_SELECTOR:

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "label.has-checkbox.terms input.checkbox#order_terms"))).click()
      
    • XPATH

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@class='has-checkbox terms']//input[@class='checkbox' and @id='order_terms']"))).click()
      
  • 使用 WebDriverWaitActionChains

    • CSS_SELECTOR:

      myElement = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "label.has-checkbox.terms input.checkbox#order_terms")))
      ActionChains(driver).move_to_element(myElement).click(myElement).perform()
      
    • XPATH:

      myElement = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@class='has-checkbox terms']//input[@class='checkbox' and @id='order_terms']")))
      ActionChains(driver).move_to_element(myElement).click(myElement).perform()
      

【讨论】:

  • 它说:消息:未知错误:元素 在点 (532, 511) 不可点击。其他元素会收到点击:
  • @Marià 查看我更新的答案并告诉我状态
【解决方案2】:

将您的操作链接在一起可能有助于解决此问题。在调用perform() 方法之前,将move_to_element 操作与click 结合起来。

from selenium.webdriver.common.action_chains import ActionChains
element = driver.find_element_by_id("order_terms")
actions = ActionChains(driver)
action.move_to_element(element).click(element).perform()

或者干脆

action.move_to_element(element).click().perform()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2023-04-02
    • 2017-09-24
    • 2021-12-11
    • 2017-03-31
    相关资源
    最近更新 更多