Привет, ребята, я пытался установить этот флажок:

<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()

Частично потому, что у этого флажка есть мышь, но она не щелкает, можете ли вы мне помочь?

1
Marià 13 Сен 2018 в 23:09

2 ответа

Лучший ответ

Объединение в цепочку ваших действий может помочь решить эту проблему. Объедините действие move_to_element с click перед вызовом метода perform().

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()
0
GPT14 14 Сен 2018 в 05:46

В соответствии с 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()
    

Обновить

Поскольку вы видите ошибку Другой элемент получит щелчок , вы можете принять одно из следующих решений:

  • Вызвать 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' и @ ID = ' order_terms '] " ))) . нажмите ( )  
  • Использование WebDriverWait и ActionChains :

      < Литий> < р > CSS_SELECTOR :
        myElement = WebDriverWait (driver, 20) .until (EC.element_to_be_clickable ((By.CSS_SELECTOR, "label.has-checkbox.terms input.checkbox # order_terms"))) ActionChains (драйвер ) .move_to_element ( MyElement ) .click ( MyElement ) .Произвести ( )  
      < Литий> < р > XPATH :
        myElement = WebDriverWait (driver, 20) .until (EC.element_to_be_clickable ((By.XPATH, "// label [@ class = 'has-checkbox terms'] // input [@ class = 'checkbox 'и @ id =' order_terms '] "))) ActionChains (драйвер ) .move_to_element ( MyElement ) .click ( MyElement ) .Произвести ( )  
0
DebanjanB 14 Сен 2018 в 09:03