我无法通过使用Python Selenium执行复选框

2024-06-01 02:00:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用Python Selenium执行复选框,但是 我犯了以下错误

selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable

元素是错误的,但我不确定它在哪里。 这就是HTML的含义

<div _ngcontent-yfw-c1="" class="col-md-12 text-center form-group mt-4 p-2" id="iAcceptCheckboxLabel">
 <input _ngcontent-yfw-c1="" class="checkbox ng-valid ng-dirty ng-touched" id="iAcceptCheckbox" name="checkbox"      type="checkbox">
 <label _ngcontent-yfw-c1="" class="font-weight-normal" for="iAcceptCheckbox"> I accept the 
  <a _ngcontent-yfw-c1="" class="ng-tns-c1-0" href="/terms" id="terms-link" target="_blank">terms and conditions</a>          
 </label>
</div>

我是这样做的

# I accept the terms and conditions
check = driver.find_element_by_class_name("checkbox")
check.click()
time.sleep(1)

enter image description here

增加

最后,这段代码成功了

check = driver.find_element_by_id("iAcceptCheckbox")
driver.execute_script("arguments[0].click();",check)

Tags: namedividcheckdriver错误elementng
3条回答

试试这个

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

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

更新:

试试这种方法

from selenium import webdriver
from selenium.webdriver.common.by import By

def scroll_element_into_view(driver, element):
    y = element.location['y']
    driver.execute_script('window.scrollTo(0, {0})'.format(y))
    
element = driver.find_element(By.XPATH, "//div[@id='iAcceptCheckboxLabel']")
scroll_element_into_view(driver, element)
element.click()

元素可能在一个框架内,因此必须首先切换到该框架才能处理元素driver.switch_to.frame

请单击input标记

请尝试以下选择器并使用ActionChains

check = driver.find_element_by_css_selector('div#iAcceptCheckboxLabel input#iAcceptCheckbox')
#edited here
driver.execute("arguments[0].scrollIntoView();", check)
action = ActionChains(driver)
action.move_to_element(check).click(check).perform()

以下内容:

from selenium.webdriver import ActionChains

单击输入标记的标签

WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.XPATH, "//label[@for='iAcceptCheckbox']"))).click() 

进口

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC

相关问题 更多 >