Selenium处理免责声明弹窗时报<button>坐标点不可点击错误如何解决
问题根因
- 元素定位错误:使用
By.TAG_NAME('button')会匹配页面中第一个按钮,该按钮并非免责声明弹窗的「同意」按钮,点击时被处于上层的模态框div拦截,触发报错 - 点击逻辑受限:普通Selenium点击会遵循前端页面的元素层级规则,模态框未完全渲染完成时,即使目标按钮可见,点击事件也会被模态框的容器div拦截
修复后的完整代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service # 初始化浏览器 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver.maximize_window() driver.get('https://air.norfolk.gov') # 显式等待最多10秒,直到模态框的同意按钮可点击 wait = WebDriverWait(driver, 10) agree_btn = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.modal-footer .btn.primary-button'))) # 用JavaScript执行点击,绕过层级拦截 driver.execute_script("arguments[0].click();", agree_btn) # 后续操作 search_box = wait.until(EC.element_to_be_clickable((By.ID, "primary_search"))) search_box.send_keys("this would be where the address goes")
代码说明
- 替换硬等待
time.sleep()为显式等待,根据元素加载状态自动判断等待时间,适配不同网络环境 - 使用CSS选择器精准定位免责弹窗的同意按钮,避免定位到无关元素
- 通过JavaScript执行点击操作,直接触发按钮的点击事件,跳过前端页面的元素层级点击校验,彻底解决点击被拦截的问题
内容的提问来源于stack exchange,提问作者Adam Norton
相关产品推荐
相关产品推荐

