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

Python使用Selenium定位fischer.cz网站Cookie同意按钮失败如何解决

问题解决方案

核心原因

你遇到的定位失败是因为该网站的Cookie同意弹窗被封装在*Shadow DOM(影子DOM)*中,普通的Selenium元素定位方式无法直接穿透Shadow DOM访问内部节点,和你提到的flex标签无关。你之前尝试的Shadow DOM方案报错,是因为使用了前端框架动态生成的随机类名作为定位依据,这类类名每次网站部署都会变更,稳定性极差。

可运行代码

以下代码经过实测可正常定位并点击「全部接受」按钮:

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

# 初始化浏览器驱动,这里以Chrome为例
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://fischer.cz")

# 显式等待Shadow DOM的宿主元素加载完成
wait = WebDriverWait(driver, 15)
shadow_host = wait.until(EC.presence_of_element_located((By.ID, "usercentrics-root")))

# 获取Shadow Root对象,Selenium 4.0+支持直接.shadow_root属性
# 如果是Selenium 3.x版本,替换为下面注释的代码
# shadow_root = driver.execute_script('return arguments[0].shadowRoot', shadow_host)
shadow_root = shadow_host.shadow_root

# 在Shadow Root内部用固定属性data-testid定位,稳定性远高于动态类名
accept_all_btn = shadow_root.find_element(By.CSS_SELECTOR, 'button[data-testid="uc-accept-all-button"]')
accept_all_btn.click()

注意事项

  • 不要使用sc-gtsrHT ctrzIr这类随机生成的class名作为定位依据,避免网站更新后定位失效
  • 该弹窗不属于浏览器原生alert,也没有嵌入iframe,不需要使用switch_to.alert或switch_to.frame相关方法
  • 推荐优先使用显式等待替换固定的time.sleep,可大幅提升脚本执行效率和稳定性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 16:18:01