Selenium Firefox驱动无法设置dom.webdriver.enabled为false问题求助
问题原因
- 配置执行顺序错误:你先将未修改偏好的
FirefoxProfile实例赋值给了FirefoxOptions,之后才调用SetPreference修改配置,此时的修改不会同步到已经赋值给options的profile副本中,修改未生效。 - 高版本Firefox/GeckoDriver的额外限制:仅设置
dom.webdriver.enabled不足以覆盖所有自动化标识,部分版本的GeckoDriver会强制将navigator.webdriver重置为true,需要额外添加屏蔽配置。
修复方案
首先调整配置执行顺序,完成所有FirefoxProfile偏好设置后再将其赋值给FirefoxOptions,同时补充反检测相关的偏好和启动参数,示例代码如下:
CodePagesEncodingProvider.Instance.GetEncoding(437); Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); // 初始化Profile FirefoxProfile firefoxProfile = new FirefoxProfile(@"C:\Users\klwid\AppData\Roaming\Mozilla\Firefox\Profiles\i611dw79.selenium"); // 配置所有偏好项 firefoxProfile.SetPreference("dom.webdriver.enabled", false); firefoxProfile.SetPreference("useAutomationExtension", false); firefoxProfile.SetPreference("dom.webdriver.open.denied", true); firefoxProfile.SetPreference("general.platform.override", "Win32"); // 配置完成后再绑定到Options FirefoxOptions options = new FirefoxOptions() { Profile = firefoxProfile }; // 额外添加启动参数屏蔽自动化标记 options.AddArgument("--disable-blink-features=AutomationControlled"); // 初始化驱动 driver = new FirefoxDriver(options);
如果调整配置后navigator.webdriver仍返回true,可以通过CDP命令强制覆盖该属性的返回值,示例代码如下:
using OpenQA.Selenium.DevTools; using OpenQA.Selenium.DevTools.V120.Page; // 驱动初始化完成后执行 IDevTools devTools = driver as IDevTools; DevToolsSession devToolsSession = devTools.GetDevToolsSession(); devToolsSession.Domains.Page.AddScriptToEvaluateOnNewDocument(new AddScriptToEvaluateOnNewDocumentCommandSettings { Source = "Object.defineProperty(navigator, 'webdriver', { get: () => undefined })" });
内容的提问来源于stack exchange,提问作者D3FALT404
相关产品推荐
相关产品推荐

