使用Python的Selenium无法点击元素问题求助
问题解决:Selenium元素交互错误及ActionChains使用修正
首先修正AttributeError错误
你当前的代码有两个明显错误:
move_to_element不属于WebDriver对象,它是ActionChains类的方法,必须先导入该类并通过实例调用driver.atbb.click()完全错误,atbb是你定义的元素变量,直接调用atbb.click()即可
正确的ActionChains使用示例
先导入ActionChains:
from selenium.webdriver.common.action_chains import ActionChains
替换错误的三行代码:
atbb = driver.find_element(By.CSS_SELECTOR, "[data-test-id='product_add_to_bag']") # 移动到元素并执行动作(必须调用perform()才会生效) ActionChains(driver).move_to_element(atbb).perform() # 点击元素 atbb.click()
也可以把动作链式调用简化:
ActionChains(driver).move_to_element(atbb).click(atbb).perform()
解决最初的ElementNotInteractableException错误
这个错误本质是元素未完全加载、被遮挡或不在可视区域,仅靠滚动不一定可靠,更推荐用显式等待确保元素可交互:
显式等待实现代码
先导入相关模块:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC
替换查找元素的代码,等待元素可交互后再点击:
# 最多等待10秒,直到元素可点击 atbb = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "[data-test-id='product_add_to_bag']")) ) atbb.click()
极端情况:JS强制点击
如果元素仍无法交互,可使用JavaScript强制点击绕过页面限制:
driver.execute_script("arguments[0].click();", atbb)
完整修正后的代码
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time driver.get("SITE") driver.execute_script("document.getElementById('attentive_overlay').remove();") # 执行搜索 driver.find_element(By.ID, "search_bar_input").send_keys("preservation kit") driver.find_element(By.ID, "search_bar_input").send_keys(Keys.ENTER) # 等待元素可交互并点击 atbb = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "[data-test-id='product_add_to_bag']")) ) atbb.click()
内容的提问来源于stack exchange,提问作者JellyHands
相关产品推荐
相关产品推荐

