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

如何用C# Selenium点击Shadow-Root下的Akzeptieren按钮?

解决Selenium C#操作Shadow-Root内元素的问题

Shadow-Root元素无法通过Selenium原生API直接操作,必须借助JavaScript访问其内部DOM。针对你遇到的Cookie授权按钮(Akzeptieren)问题,可按以下方案解决:

1. 核心思路

目标网站的Cookie弹窗使用开放型Shadow-Root(可通过shadowRoot属性访问),这是实现操作的前提。我们通过IJavaScriptExecutor执行JS代码,穿透Shadow-Root定位目标按钮并触发点击。

2. 基础实现代码

直接执行链式JS代码定位并点击按钮:

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

// 初始化驱动(保留你现有初始化逻辑)
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://www.all4golf.de/?gclid=CjwKCAjw67ajBhAVEiwA2g_jEP_x3w6PJibWICIaE61LtLDJO_EEy85mgKRseNvZIAJpsA4Qw1yQMBoCOpkQAvD_BwE");

// 等待弹窗加载(临时方案,推荐用下方显式等待)
System.Threading.Thread.Sleep(2000);

// 执行JS点击Shadow-Root内的按钮
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
js.ExecuteScript(@"
    document.querySelector('#usercentrics-root').shadowRoot.querySelector('button[data-testid=""uc-accept-all-button""]').click();
");

3. 更稳定的显式等待方案

为避免弹窗加载延迟导致的失败,使用WebDriverWait确保宿主元素加载完成后再操作:

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using System;

IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://www.all4golf.de/?gclid=CjwKCAjw67ajBhAVEiwA2g_jEP_x3w6PJibWICIaE61LtLDJO_EEy85mgKRseNvZIAJpsA4Qw1yQMBoCOpkQAvD_BwE");

// 显式等待Shadow-Root宿主元素出现(超时10秒)
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement shadowHost = wait.Until(d => d.FindElement(By.Id("usercentrics-root")));

// 传入宿主元素,通过JS获取ShadowRoot并点击按钮
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
js.ExecuteScript(@"
    arguments[0].shadowRoot.querySelector('button[data-testid=""uc-accept-all-button""]').click();
", shadowHost);

4. 选择器调试方案

如果上述代码失效,可通过浏览器开发者工具确认按钮的唯一标识,替换JS选择器:

  • 若按钮文本更可靠,可改用文本匹配:
    Array.from(arguments[0].shadowRoot.querySelectorAll('button')).find(btn => btn.textContent.trim() === 'Akzeptieren').click()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:22:51