如何在Selenium中修改Worker.navigator等属性模拟Windows系统
解决Linux下Selenium模拟Windows Chrome环境的完整方案
要让Chrome完全伪装成Windows环境,除了你已修改的User-Agent和navigator.platform,还需要覆盖Worker上下文的平台属性,以及补充其他关键系统标识:
1. 覆盖WorkerNavigator.platform
Worker运行在独立的脚本上下文,需单独修改其platform属性,可通过同一段注入脚本同时处理主上下文和Worker上下文:
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', { 'source': """ // 主上下文的navigator.platform Object.defineProperty(navigator, 'platform', {get: () => 'Win32'}); // Worker上下文的WorkerNavigator.platform Object.defineProperty(WorkerNavigator.prototype, 'platform', {get: () => 'Win32'}); """ })
2. 补充修改其他平台相关属性
这些属性也是网站判断系统环境的常见依据,需一并覆盖:
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', { 'source': """ // 模拟Windows的CPU标识 Object.defineProperty(navigator, 'oscpu', {get: () => 'Windows NT 10.0; Win64; x64'}); // 模拟Windows的应用版本字符串 Object.defineProperty(navigator, 'appVersion', {get: () => '5.0 (Windows NT 10.0; Win64; x64)'}); // 确保userAgent在脚本中也被覆盖(避免页面直接读取原始值) Object.defineProperty(navigator, 'userAgent', {get: () => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'}); """ })
3. 初始化阶段确保UA设置生效
在启动Chrome时,通过ChromeOptions直接设置User-Agent,形成双重保障:
from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36') driver = webdriver.Chrome(options=options)
可选:增强逼真度(非必需)
部分网站会通过硬件相关属性辅助判断,可按需调整为Windows常见值:
// 模拟8核CPU Object.defineProperty(navigator, 'hardwareConcurrency', {get: () => 8}); // 模拟8GB内存 Object.defineProperty(navigator, 'deviceMemory', {get: () => 8});
内容的提问来源于stack exchange,提问作者Zefnes
相关产品推荐
相关产品推荐

