This commit is contained in:
2026-01-27 09:25:04 +08:00
parent 935531955f
commit e14aabd0e2
3 changed files with 113 additions and 93 deletions

View File

@@ -198,41 +198,51 @@ def inject_fingerprint(page, fingerprint: dict):
plat = fingerprint.get("platform", "Win32")
screen = fingerprint.get("screen", {"width": 1920, "height": 1080})
# 使用 try-catch 包裹每个属性定义,避免 Linux 上属性不可重定义的错误
js_script = f'''
// 伪装 WebGL 指纹
const getParameterProxyHandler = {{
apply: function(target, thisArg, args) {{
const param = args[0];
if (param === 37445) {{ return "{webgl_vendor}"; }}
if (param === 37446) {{ return "{webgl_renderer}"; }}
return Reflect.apply(target, thisArg, args);
}}
}};
const originalGetParameter = WebGLRenderingContext.prototype.getParameter;
WebGLRenderingContext.prototype.getParameter = new Proxy(originalGetParameter, getParameterProxyHandler);
if (typeof WebGL2RenderingContext !== 'undefined') {{
const originalGetParameter2 = WebGL2RenderingContext.prototype.getParameter;
WebGL2RenderingContext.prototype.getParameter = new Proxy(originalGetParameter2, getParameterProxyHandler);
}}
// 伪装 platform
Object.defineProperty(navigator, 'platform', {{ get: () => "{plat}" }});
// 伪装屏幕分辨率
Object.defineProperty(screen, 'width', {{ get: () => {screen["width"]} }});
Object.defineProperty(screen, 'height', {{ get: () => {screen["height"]} }});
Object.defineProperty(screen, 'availWidth', {{ get: () => {screen["width"]} }});
Object.defineProperty(screen, 'availHeight', {{ get: () => {screen["height"]} }});
// 隐藏 webdriver 特征
Object.defineProperty(navigator, 'webdriver', {{ get: () => undefined }});
// 伪装 languages
Object.defineProperty(navigator, 'languages', {{ get: () => ["zh-CN", "zh", "en-US", "en"] }});
// 伪装 plugins
Object.defineProperty(navigator, 'plugins', {{
get: () => [
{{ name: "Chrome PDF Plugin", filename: "internal-pdf-viewer" }},
{{ name: "Chrome PDF Viewer", filename: "mhjfbmdgcfjbbpaeojofohoefgiehjai" }},
{{ name: "Native Client", filename: "internal-nacl-plugin" }}
]
}});
(function() {{
// 伪装 WebGL 指纹
try {{
const getParameterProxyHandler = {{
apply: function(target, thisArg, args) {{
const param = args[0];
if (param === 37445) return "{webgl_vendor}";
if (param === 37446) return "{webgl_renderer}";
return Reflect.apply(target, thisArg, args);
}}
}};
const originalGetParameter = WebGLRenderingContext.prototype.getParameter;
WebGLRenderingContext.prototype.getParameter = new Proxy(originalGetParameter, getParameterProxyHandler);
if (typeof WebGL2RenderingContext !== 'undefined') {{
const originalGetParameter2 = WebGL2RenderingContext.prototype.getParameter;
WebGL2RenderingContext.prototype.getParameter = new Proxy(originalGetParameter2, getParameterProxyHandler);
}}
}} catch(e) {{}}
// 伪装 platform
try {{ Object.defineProperty(navigator, 'platform', {{ get: () => "{plat}", configurable: true }}); }} catch(e) {{}}
// 伪装屏幕分辨率
try {{
Object.defineProperty(screen, 'width', {{ get: () => {screen["width"]}, configurable: true }});
Object.defineProperty(screen, 'height', {{ get: () => {screen["height"]}, configurable: true }});
Object.defineProperty(screen, 'availWidth', {{ get: () => {screen["width"]}, configurable: true }});
Object.defineProperty(screen, 'availHeight', {{ get: () => {screen["height"]}, configurable: true }});
}} catch(e) {{}}
// 隐藏 webdriver 特征
try {{ Object.defineProperty(navigator, 'webdriver', {{ get: () => undefined, configurable: true }}); }} catch(e) {{}}
// 伪装 languages
try {{ Object.defineProperty(navigator, 'languages', {{ get: () => ["zh-CN", "zh", "en-US", "en"], configurable: true }}); }} catch(e) {{}}
// 伪装 plugins
try {{
Object.defineProperty(navigator, 'plugins', {{
get: () => [
{{ name: "Chrome PDF Plugin", filename: "internal-pdf-viewer" }},
{{ name: "Chrome PDF Viewer", filename: "mhjfbmdgcfjbbpaeojofohoefgiehjai" }},
{{ name: "Native Client", filename: "internal-nacl-plugin" }}
],
configurable: true
}});
}} catch(e) {{}}
}})();
'''
page.run_js(js_script)