You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Selenium无法定位并点击Accept Cookies弹窗问题咨询

解决Selenium定位Cookie弹窗按钮失败的问题

首先看你代码里最明显的错误:WebDriver初始化方式完全错了。你把网站URL直接传给了webdriver.Edge(),但这个构造函数应该接收驱动路径(或配置Service类),打开页面要靠后续的driver.get(url)操作。这一步错了的话,后续所有元素定位都不可能正常执行。

另外,你代码里的选择器用了"这种HTML转义字符,在Python代码里应该换成普通的单/双引号,避免解析冲突。

修正后的代码示例

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

# Selenium 4+ 版本EdgeDriver标准初始化方式
driver_path = r"C:\Program Files (x86)\msedgedriver.exe"
service = Service(driver_path)
driver = webdriver.Edge(service=service)

url = "https://www.kettlebellkings.com"
driver.get(url)

# 显式等待按钮可点击,使用正确格式的选择器
try:
    accept_btn = WebDriverWait(driver, 30).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[data-testid="uc-accept-all-button"]'))
    )
    accept_btn.click()
    print("成功点击Accept All按钮")
except Exception as e:
    # 正常点击失败时,尝试用JS强制触发点击
    try:
        accept_btn = driver.find_element(By.CSS_SELECTOR, 'button[data-testid="uc-accept-all-button"]')
        driver.execute_script("arguments[0].click();", accept_btn)
        print("通过JS成功点击按钮")
    except Exception as js_e:
        print(f"定位按钮失败: {js_e}")

其他可能的排查点

  1. 二次确认iframe情况:虽然你说确认过,但可以执行driver.find_elements(By.TAG_NAME, 'iframe')列出所有iframe,逐个切换进去检查是否存在目标元素,避免遗漏。
  2. 检查是否是Shadow DOM封装:有些Cookie弹窗会用Shadow DOM隐藏元素,你可以在浏览器控制台执行document.querySelector('弹窗容器选择器').shadowRoot,如果有返回值,说明需要通过Selenium的shadow_root属性先获取根节点,再定位按钮。
  3. 换用更稳定的定位方式:比如用XPATH定位://button[@data-testid="uc-accept-all-button" and text()="Accept All"],结合文本内容的定位有时候更可靠。

内容的提问来源于stack exchange,提问作者pedro flores

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 08:55:21