如何在Chrome 117+版本中用Selenium C#自动点击弹窗的Allow按钮
C# 实现 Chrome 117+ 中 Selenium 自动点击权限弹窗的Allow按钮
Chrome 117及以上版本的权限请求弹窗(如通知权限)属于原生系统弹窗,无法通过普通Selenium元素定位操作,以下是两种可行的C#实现方案:
方案1:启动浏览器时预先授予权限(推荐)
通过配置ChromeOptions直接指定允许目标权限,从根源避免弹窗出现:
using OpenQA.Selenium; using OpenQA.Selenium.Chrome; class PermissionAutoHandler { static void Main(string[] args) { ChromeOptions options = new ChromeOptions(); // 配置通知权限为允许(1=允许,2=阻止,0=询问) options.AddUserProfilePreference("profile.default_content_setting_values.notifications", 1); // 若需其他权限,替换对应字段即可: // 地理位置:profile.default_content_setting_values.geolocation // 麦克风:profile.default_content_setting_values.microphone // 初始化ChromeDriver(需确保版本与Chrome 117+匹配) using (IWebDriver driver = new ChromeDriver(options)) { driver.Navigate().GoToUrl("你的目标网站地址"); // 后续业务逻辑操作 } } }
方案2:通过Chrome DevTools协议(CDP)动态处理权限
如果需要在运行时动态授予权限,可使用CDP发送命令自动允许:
using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.DevTools; using OpenQA.Selenium.DevTools.V117.Permissions; class PermissionAutoHandler { static async Task Main(string[] args) { ChromeOptions options = new ChromeOptions(); using (IWebDriver driver = new ChromeDriver(options)) { // 初始化DevTools会话 IDevTools devTools = driver as IDevTools; DevToolsSession session = devTools.GetDevToolsSession(); // 启用Permissions模块 await session.SendCommandAsync(new EnableCommandSettings()); // 设置指定域名的通知权限为允许 await session.SendCommandAsync(new SetPermissionCommandSettings { Origin = "https://你的目标网站域名", Permission = "notifications", Setting = PermissionSetting.Allow }); driver.Navigate().GoToUrl("你的目标网站地址"); // 权限请求会自动被允许,无需手动点击弹窗 } } }
注意事项
- 必须保证
ChromeDriver版本与本地Chrome浏览器版本(117+)严格一致,否则会出现兼容性问题。 - 权限类型需根据实际弹窗调整,例如
geolocation对应地理位置权限,camera对应摄像头权限。 - 方案1执行效率更高,无需等待弹窗加载;方案2适用于需要动态控制权限的场景。
内容的提问来源于stack exchange,提问作者Smita Bhargav
相关产品推荐
相关产品推荐

