Python Selenium无法定位并点击Accept Cookies弹窗问题咨询
首先看你代码里最明显的错误: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}")
其他可能的排查点
- 二次确认iframe情况:虽然你说确认过,但可以执行
driver.find_elements(By.TAG_NAME, 'iframe')列出所有iframe,逐个切换进去检查是否存在目标元素,避免遗漏。 - 检查是否是Shadow DOM封装:有些Cookie弹窗会用Shadow DOM隐藏元素,你可以在浏览器控制台执行
document.querySelector('弹窗容器选择器').shadowRoot,如果有返回值,说明需要通过Selenium的shadow_root属性先获取根节点,再定位按钮。 - 换用更稳定的定位方式:比如用XPATH定位:
//button[@data-testid="uc-accept-all-button" and text()="Accept All"],结合文本内容的定位有时候更可靠。
内容的提问来源于stack exchange,提问作者pedro flores
相关产品推荐
相关产品推荐

