三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

headless-cat-n-mouse进阶教程:如何扩展自定义检测规则与反制手段

headless-cat-n-mouse进阶教程:如何扩展自定义检测规则与反制手段

headless-cat-n-mouse进阶教程:如何扩展自定义检测规则与反制手段

【免费下载链接】headless-cat-n-mouseIs headless chrome currently detectable? Let's pit the detections and detection evasions against eachother.项目地址: https://gitcode.com/gh_mirrors/he/headless-cat-n-mouse

headless-cat-n-mouse是一款专注于Chrome无头浏览器检测与反检测对抗的工具,通过模拟真实浏览器环境与识别自动化特征,帮助开发者构建更隐蔽的网页自动化程序。本文将带你深入了解如何扩展自定义检测规则与反制手段,提升自动化脚本的隐蔽性。

核心功能与工作原理

headless-cat-n-mouse的核心架构由两大模块组成:检测系统与反制系统。检测模块通过多种特征识别无头浏览器环境,而反制模块则针对性地修改浏览器属性以规避检测。

检测模块工作流程

检测逻辑主要实现在detect-headless.js文件中,采用插件化测试机制。每个检测规则都是一个独立的测试函数,如用户代理检测、导航器属性检测等:

// 检测规则示例(源自detect-headless.js) await test('userAgent', _ => { return /HeadlessChrome/.test(window.navigator.userAgent); });

系统会运行所有检测规则并返回结果,通过console.assert确保检测结果有效。

反制模块工作原理

反制逻辑位于apply-evasions.js,通过Puppeteer的page.evaluateOnNewDocument方法在页面加载前修改浏览器环境,常见手段包括:

  • 修改navigator.userAgent移除Headless标识
  • 模拟真实浏览器的navigator.pluginslanguages属性
  • 修复被篡改的原生API行为

扩展自定义检测规则

创建新的检测规则只需三步,即可集成到现有检测框架中。

步骤1:理解检测规则结构

每个检测规则是一个异步函数,返回布尔值表示是否检测到无头环境。基本结构如下:

async function test(name, fn) { const detectionPassed = await fn(); if (detectionPassed) console.log(`Chrome headless detected via ${name}`); results[name] = detectionPassed; }

步骤2:编写自定义检测函数

以下是几个实用的自定义检测规则示例:

Canvas指纹检测

无头浏览器的Canvas渲染可能与真实浏览器存在差异:

await test('canvas fingerprint', async _ => { const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); ctx.fillText('headless detection', 5, 5); return canvas.toDataURL() === '特定无头浏览器的指纹值'; });
WebGL特征检测

检测WebGL渲染器信息:

await test('webgl vendor', _ => { try { const gl = document.createElement('canvas').getContext('webgl'); if (!gl) return true; // 无头模式可能禁用WebGL return gl.getParameter(gl.VENDOR) === 'Google Inc.'; } catch (e) { return true; } });

步骤3:集成到检测系统

将新的检测规则添加到detect-headless.js的主函数中,确保使用await test()语法:

// 在detect-headless.js中添加 await test('canvas fingerprint', async _ => { // 实现检测逻辑 });

开发反制手段

针对自定义检测规则,需要开发相应的反制策略,修改浏览器环境以规避检测。

反制实现方法

反制代码应放在apply-evasions.js中,使用Puppeteer的页面注入API:

// apply-evasions.js中添加Canvas反制 await page.evaluateOnNewDocument(() => { // 重写Canvas相关方法 const originalToDataURL = HTMLCanvasElement.prototype.toDataURL; HTMLCanvasElement.prototype.toDataURL = function() { // 返回与真实浏览器匹配的Canvas指纹 if (this.width === 300 && this.height === 150) { return '真实浏览器的Canvas数据URL'; } return originalToDataURL.apply(this, arguments); }; });

常见反制技术

  1. 属性伪装:修改navigator对象的属性,如userAgentpluginslanguages
  2. API钩子:重写可能暴露自动化的API,如Notification.permission
  3. 行为模拟:模拟真实用户的交互模式,如随机延迟、鼠标移动等
  4. 环境修复:恢复被无头模式修改的原生API行为

实战应用:完整扩展示例

下面通过一个完整示例,展示如何添加"字体检测"规则及其反制手段。

添加字体检测规则

在detect-headless.js中添加:

await test('system fonts', async _ => { // 创建隐藏元素测试系统字体 const testElement = document.createElement('div'); testElement.style.visibility = 'hidden'; testElement.style.fontFamily = 'Arial'; testElement.style.fontSize = '100px'; document.body.appendChild(testElement); // 无头模式可能缺少某些系统字体 const arialWidth = testElement.offsetWidth; testElement.style.fontFamily = '不存在的字体'; const fallbackWidth = testElement.offsetWidth; return arialWidth === fallbackWidth; // Arial字体未被识别 });

添加字体反制手段

在apply-evasions.js中添加:

// 模拟系统字体 await page.evaluateOnNewDocument(() => { Object.defineProperty(navigator, 'fonts', { value: { check: function(fontName) { // 返回常见系统字体列表 const systemFonts = ['Arial', 'Times New Roman', 'Verdana', 'Georgia']; return systemFonts.includes(fontName); } } }); });

测试与验证

添加自定义规则后,使用以下命令运行测试:

git clone https://gitcode.com/gh_mirrors/he/headless-cat-n-mouse cd headless-cat-n-mouse npm install node bin.js

程序会输出所有检测规则的结果,验证自定义规则是否生效:

Chrome headless detected via userAgent Chrome headless detected via system fonts ...

最佳实践与注意事项

  1. 规则更新:定期更新检测规则以应对新的反检测技术
  2. 组合策略:使用多种检测手段提高准确性,避免单一特征误判
  3. 环境隔离:在测试环境中验证反制效果,避免影响生产环境
  4. 性能考量:复杂的检测规则可能影响页面加载速度,需权衡检测精度与性能

通过扩展自定义检测规则与反制手段,你可以构建更强大的无头浏览器检测系统,有效应对不断变化的反爬虫技术。headless-cat-n-mouse的模块化设计使得扩展变得简单,无论是添加新的检测方法还是优化反制策略,都能轻松实现。

【免费下载链接】headless-cat-n-mouseIs headless chrome currently detectable? Let's pit the detections and detection evasions against eachother.项目地址: https://gitcode.com/gh_mirrors/he/headless-cat-n-mouse

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

← 返回列表