fix: 优化无头浏览器反检测

This commit is contained in:
hp0912 2026-06-05 11:52:16 +08:00
parent 1b0d157903
commit 51b01b9234

View File

@ -807,6 +807,49 @@ async function createPage(client: CdpClient, params: Params): Promise<string> {
await client.send("Page.enable", {}, sessionId); await client.send("Page.enable", {}, sessionId);
await client.send("Runtime.enable", {}, sessionId); await client.send("Runtime.enable", {}, sessionId);
await client.send("Network.enable", {}, sessionId); await client.send("Network.enable", {}, sessionId);
// 注入反 headless 检测脚本,在页面任何 JS 执行前运行
await client.send(
"Page.addScriptToEvaluateOnNewDocument",
{
source: `
// --- 反 headless 检测 ---
// 1. 抹掉 navigator.webdriver正常 Chrome 为 undefined
Object.defineProperty(navigator, 'webdriver', { get: () => undefined });
// 2. 伪造 plugins正常 Chrome 有 PDF Viewer 等内置插件)
Object.defineProperty(navigator, 'plugins', {
get: () => {
const p = [
{ name: 'Chrome PDF Plugin', filename: 'internal-pdf-viewer', description: 'Portable Document Format' },
{ name: 'Chrome PDF Viewer', filename: 'mhjfbmdgcfjbbpaeojofohoefgiehjai', description: '' },
{ name: 'Native Client', filename: 'internal-nacl-plugin', description: '' },
];
p.item = (i) => p[i] || null;
p.namedItem = (name) => p.find((x) => x.name === name) || null;
p.refresh = () => {};
Object.setPrototypeOf(p, PluginArray.prototype);
return p;
},
});
// 3. 补全 window.chrome正常 Chrome 都有这个对象)
if (!window.chrome) {
window.chrome = { runtime: {}, loadTimes: () => {}, csi: () => {}, app: {} };
}
// 4. navigator.languages
Object.defineProperty(navigator, 'languages', { get: () => ['zh-CN', 'zh', 'en'] });
// 5. 权限查询不暴露自动化
const _query = window.navigator.permissions.query.bind(window.navigator.permissions);
window.navigator.permissions.query = (params) =>
params.name === 'notifications'
? Promise.resolve({ state: Notification.permission })
: _query(params);
`.trim(),
},
sessionId,
);
await client.send( await client.send(
"Emulation.setDeviceMetricsOverride", "Emulation.setDeviceMetricsOverride",
{ {