如何在Playwright中修改navigator.webdriver属性?
在Playwright环境下,直接通过Object.defineProperty修改navigator.webdriver无效的核心原因是Chrome的AutomationControlled特性会在页面初始化前自动标记webdriver状态,普通脚本注入时机太晚,且无法绕过该特性限制。以下是可行解决方案:
关键步骤
- 禁用Chrome自动化检测特性:启动Chrome时添加
--disable-blink-features=AutomationControlled启动参数,阻止Chrome启用自动化相关检测机制,让navigator.webdriver默认返回false。 - 提前注入锁定脚本:通过
AddInitScriptAsync在页面初始化前注入脚本,锁定navigator.webdriver属性,避免后续被篡改。
.NET绑定代码示例
using Microsoft.Playwright; var playwright = await Playwright.CreateAsync(); var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Args = new[] { "--disable-blink-features=AutomationControlled" }, Headless = false // 根据实际需求设置是否启用无头模式 }); var context = await browser.NewContextAsync(); // 注入初始化脚本,锁定navigator.webdriver为false await context.AddInitScriptAsync(""" Object.defineProperty(navigator, 'webdriver', { get: () => false, configurable: false, enumerable: true }); """); var page = await context.NewPageAsync(); await page.GotoAsync("https://bot.sannysoft.com"); // 后续业务操作... await browser.CloseAsync();
补充说明
- 不要使用
page.EvaluateAsync修改该属性:页面加载后执行的脚本晚于Chrome自动化检测逻辑,无法覆盖初始状态。 - 该方案适配Node.js/Python绑定,只需对应调整启动参数的设置方式即可。
内容的提问来源于stack exchange,提问作者lonix
相关产品推荐
相关产品推荐

