如何使用 Puppeteer 避免机器人检测?

为什么有反机器人系统?

  • 保护网站资源和性能

爬虫和机器人程序在短时间内可以发送大量请求,消耗服务器资源,导致网站性能下降甚至崩溃。

反机器人系统可以帮助网站管理和限制这些请求,从而保持网站的稳定性和可用性。

  • 防止数据盗窃和滥用

一些机器人程序爬取网站内容进行未经授权的使用,例如内容盗窃和数据抓取。反机器人系统可以帮助保护网站上的数据和内容,防止未经授权的访问和滥用。

  • 提高安全性

恶意机器人程序可以用于各种攻击,例如分布式拒绝服务(DDoS)攻击、暴力破解密码等。反机器人系统可以帮助识别并阻止这些恶意行为,提高网站的整体安全性。

  • 保护用户隐私

一些机器人程序可能会试图获取用户的个人信息,如电子邮件地址、联系方式等。反机器人系统可以帮助保护用户隐私,防止这些信息被非法收集和滥用。

  • 提高用户体验

当机器人程序大量访问网站时,可能会影响正常用户的速度和体验。通过限制机器人流量,网站可以确保真实用户的更好体验。

  • 防止广告欺诈

一些机器人程序模拟用户点击广告以进行广告欺诈,导致广告商蒙受损失。反机器人检测可以识别并阻止这些虚假点击,保护广告商的利益。

反机器人系统如何工作?

反机器人系统通过多种技术和方法识别和阻止机器人流量。这里主要介绍6种常见的分析方法:

1. 行为分析

  • 监控用户在网站上的行为模式,如鼠标移动、点击、滚动和键盘输入。机器人程序通常无法模拟自然的人类行为。
  • 分析用户请求的速度和频率。机器人通常以非人类的速度发送请求,例如每秒大量请求。

2. 设备和环境检测

  • 收集用户的浏览器指纹信息,包括浏览器类型、版本、操作系统、插件等。机器人程序的浏览器指纹通常与真实用户不同。
  • 检查请求头中的User-Agent字段。许多机器人程序使用默认或异常的User-Agent值。

3. 挑战-响应机制

  • 反机器人系统使用CAPTCHA或reCAPTCHA要求用户执行某些任务(例如识别图片中的物体)以验证其人类身份。
  • 在网页中插入隐藏字段或链接(蜜罐),真实用户不会与这些元素互动,而机器人程序可能会触发这些陷阱,从而暴露其身份。

4. IP和地理位置检测

  • 使用已知恶意IP地址列表,阻止这些地址的请求。
  • 基于IP地址的地理位置限制访问。例如,只允许特定国家或地区的请求。

5. 流量分析

  • 监控和分析网站的流量模式,识别异常流量峰值和分布。
  • 分析用户会话的时长和互动模式。机器人的会话通常较短且有规律。

6. 机器学习

使用机器学习算法分析和识别正常用户与机器人的行为差异。机器学习模型可以不断学习和适应新的机器人行为。

网站如何检测Puppeteer?

网站可以检查页面上的特定JavaScript变量,这些变量通常与Puppeteer的使用相关。

例如,他们可能会查找包含"puppeteer"或其他相关标识符的变量名。

for (let key in window) {if (key.includes('puppeteer') || key.includes('webdriver')) {// Detected Puppeteer}
}

Puppeteer还会修改浏览器行为以自动执行任务。因此,网站可能会检查 navigator.webdriver等属性的存在和值,以确定是否有自动化工具在控制浏览器。

此属性在Puppeteer中通常设置为 true

绕过机器人检测的最简单方法 - Nstbrowser

想快速绕过机器人检测?现在开始免费使用Nstbrowser吧!Nstbrowser提供:

  • 智能IP轮换
  • 高级代理
  • CAPTCHA解答器

Nstbrowser不仅使用真实的浏览器指纹进行网络访问,还模拟真实用户的行为和习惯,使其无法被反机器人系统识别。

此外,为简化网络抓取和自动化,Nstbrowser配备了强大的网站解锁技术,提供无缝的网络访问体验。

使用Puppeteer避免机器人检测的8种最佳方法

如上所述,机器人检测已成为网络爬虫程序的一个主要问题。但别担心!我们仍然可以轻松解决它。

除了使用Nstbrowser,以下是一些使用Puppeteer避免机器人检测的技巧:

方法1. IP/代理轮换

大多数机器人检测器的主要检测方式是通过检查IP。Web服务器可以通过维护每个请求的日志来推导IP地址的模式。

他们使用Web应用防火墙(WAF)跟踪和阻止IP地址活动,并将可疑IP列入黑名单。重复和编程的请求会损害IP信誉并导致永久封锁。

要避免机器人检测,您可以使用IP轮换或Puppeteer设置代理:

const puppeteer = require('puppeteer');(async () => {const browser = await puppeteer.launch({args: ['--proxy-server=http://your_proxy_ip:your_proxy_port',// Add any other Chrome flags you need],});const page = await browser.newPage();// Now Puppeteer will use the proxy specified aboveawait page.goto('https://example.com');// Continue with your automation tasksawait browser.close();
})();
  • --proxy-server=http://your_proxy_ip:your_proxy_port 参数指定代理服务器的地址和端口。
  • 您可以根据需要添加其他Chrome标志(args)。

请确保将 your_proxy_ip 和 your_proxy_port 替换为实际代理服务器的IP地址和端口号。

方法2. 旋转HTTP头信息和User-Agent

网站通常检查请求的User-Agent以确定请求来自哪个浏览器和操作系统。

通常,Puppeteer使用固定的User-Agent,这使其容易被检测到。通过随机化User-Agent,请求将更有可能被识别为来自不同的真实用户。

此外,反机器人系统还会检查HTTP头以识别机器人。这些头包括 Accept-LanguageAccept-EncodingCache-Control 等。

默认的HTTP头也可能暴露自动化工具的使用。随机化和设置常见的HTTP头将帮助您的请求更加真实。

const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
const randomUseragent = require('random-useragent'); // Random User-Agent Librarypuppeteer.use(StealthPlugin());(async () => {const browser = await puppeteer.launch({ headless: true });const page = await browser.newPage();// Define common HTTP headersconst commonHeaders = {'Accept-Language': 'en-US,en;q=0.9','Accept-Encoding': 'gzip, deflate, br','Cache-Control': 'no-cache','Upgrade-Insecure-Requests': '1',};// Randomize User-Agent and HTTP headersconst setRandomHeaders = async (page) => {const userAgent = randomUseragent.getRandom(); // Get random User-Agentawait page.setUserAgent(userAgent);await page.setExtraHTTPHeaders(commonHeaders);};await setRandomHeaders(page);await page.evaluateOnNewDocument(() => {Object.defineProperty(navigator, 'webdriver', {get: () => false,});});await page.goto('https://example.com', {waitUntil: 'networkidle2',});

方法3. 禁用navigator.webdriver

默认情况下,Puppeteer将navigator.webdriver属性设置为true。这暴露了自动化工具的存在。通过禁用或修改此属性,您可以减少被检测的机会。

await page.evaluateOnNewDocument(() => {Object.defineProperty(navigator, 'webdriver', { get: () => false });
});

方法4. 使用​stealth插件​

使用 puppeteer-extra-plugin-stealth 插件可以帮助Puppeteer避免被检测为机器人。

该插件修改了一些浏览器的默认行为和特性,使其看起来像是一个真实用户。

首先,您需要安装 puppeteer-extra 和 puppeteer-extra-plugin-stealth 插件:

npm install puppeteer-extra puppeteer-extra-plugin-stealth

接下来,您可以在代码中使用这些插件来启动Puppeteer:

const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());const browser = await puppeteer.launch({ headless: true });

方法5. 使用Cookie

如果您想从社交媒体平台或其他需要身份验证的网站抓取数据,通常需要重复登录。

这种重复的身份验证请求会触发警报,账号可能会被封锁或面临CAPTCHA或JavaScript认证挑战。

我们可以通过使用Cookie来避免这种情况。登录一次后,我们可以收集登录会话Cookie,以便将来重复使用。

方法6. 使用CAPTCHA解答服务

在进行网络抓取时,您肯定会遇到CAPTCHA识别问题。这时,您需要利用CAPTCHA解答服务。

通常,这些服务使用真实用户来解决CAPTCHA,从而减少被检测为机器人的可能性。

这可以确保绕过机器人检测,并有助于降低运行机器人的整体成本。

方法7. 延迟输入和随机化

真实用户无法在一分钟内发出500个请求!

真实用户也无法有固定的浏览习惯和程序!

因此,为了防止被反机器人系统轻易检测到,我们需要在使用Puppeteer时,为自动化程序设置延迟输入和一些随机化操作。这样可以模拟真实用户,从而在一定程度上降低被检测的风险。

  • 模拟人类输入速度,而不是立即输入所有内容:
await page.type('input[name=username]', 'myUsername', { delay: 100 });
await page.type('input[name=password]', 'myPassword', { delay: 100 });
  • 随机化鼠标移动、点击和滚动操作:
await page.mouse.move(100, 100);
await page.mouse.click(100, 100);

方法8. 使用浏览器扩展

在使用Puppeteer运行自动化任务时,有时可以利用浏览器扩展来帮助绕过一些机器人检测。

这些扩展可以修改浏览器的行为,使其看起来更像是由真实用户操作的。

加载本地扩展:

  • 下载您想要使用的浏览器扩展(例如Chrome扩展)到本地。
  • 在启动Puppeteer时,通过指定args参数加载扩展:
const puppeteer = require('puppeteer');(async () => {const browser = await puppeteer.launch({headless: false, // non-headless modeargs: [`--disable-extensions-except=/path/to/extension/`, // Load extensions with specified paths`--load-extension=/path/to/extension/`]});const page = await browser.newPage();await page.goto('https://example.com');// Continue executing your code
})();
  • 这将允许您在Puppeteer控制的浏览器实例中加载和使用特定扩展,有时可以帮助绕过机器人检测。

更改默认Chrome扩展路径

Puppeteer默认使用一个空的扩展目录来模拟Chrome。您可以通过设置userDataDir来指定一个自定义的用户数据目录,并在其中预加载所需的扩展。

结语

在本文中,我们讨论了:

  • 为什么网站使用反机器人系统?
  • 它们如何工作?
  • 使用Puppeteer避免机器人检测的8种最佳方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/43291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

借助软件资产管理系统,优化Solidworks软件许可证管理

在当今数字化的企业环境中,软件许可证的有效管理对于业务的顺畅运行至关重要。然而,IT 运维部门常常面临着诸如用户部门 SW 许可证不够用、使用紧张等问题,而由于缺乏可靠的数据支持,难以准确判断许可证的短缺程度,这给…

MFC引用C#生成的dll,将dll放置到非exe程序目录,如何操作?

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

信创:鲲鹏(arm64)+麒麟(kylin v10)离线部署k8s和kubesphere(含离线部署新方式)

本文将详细介绍,如何基于鲲鹏CPU(arm64)和操作系统 Kylin V10 SP2/SP3,利用 KubeKey 制作 KubeSphere 和 Kubernetes 离线安装包,并实战部署 KubeSphere 3.3.1 和 Kubernetes 1.22.12 集群。 服务器配置 主机名IPCPUOS用途master-1192.168.10…

【linux高级IO(二)】多路转接之select详解

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Linux从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学更多操作系统知识   🔝🔝 Linux高级IO 1. 前言2. 初识s…

TEE共享内存的介绍-共享内存的限制是什么? TA堆内存/栈内存有限制吗?Trustzone/TEE

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】:【精选】TEE从入门到精通-[目录] 👈👈👈思考: 如何开发一个TA? sdk又是什么?开发一个TA的流程是怎样的?How to do?有关TA的签名介绍TEE开发Secure driver介绍RP…

昇思25天学习打卡营第21天|基于MindSpore实现BERT对话情绪识别

模型简介 BERT全称是来自变换器的双向编码器表征量。与BERT模型相似的预训练语言模型例如问答、命名实体识别、自然语言推理、文本分类等在许多自然语言处理任务中发挥着重要作用。模型是基于Transformer中的Encoder并加上双向的结构。 BERT模型的主要创新点都在pre-train方法…

SCI丨返修一作+通讯

中科四区,JCR2 返修转让一作通讯,5个月左右录用 题目:通过机器学习算法XXXXXXXxxx混凝土力学性能的可靠方法

Nginx 配置ssl证书

1. 准备 SSL 证书文件 确保您有以下文件: SSL 证书文件(通常是 .crt 或 .pem 文件) 私钥文件(通常是 .key 文件) 中间证书文件(如果适用,通常是 .crt 或 .pem 文件) 将这些文件上传…

苍穹外卖--完善登录功能:进行MD5加密

目标 TODO:使用MD5加密方式对明文密码。 实现 password DigestUtils.md5DigestAsHex(password.getBytes());

Face_recognition实现人脸识别

这里写自定义目录标题 欢迎使用Markdown编辑器一、安装人脸识别库face_recognition1.1 安装cmake1.2 安装dlib库1.3 安装face_recognition 二、3个常用的人脸识别案例2.1 识别并绘制人脸框2.2 提取并绘制人脸关键点2.3 人脸匹配及标注 欢迎使用Markdown编辑器 本文基于face_re…

双向链表+Map实现LRU

LRU: LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。 核心思想: 基于Map实现k-v存储,双向链表中使用一个虚拟头部和虚拟尾部,虚拟头部的…

BioXcell—InVivoMAb anti-West Nile/dengue virus E protein

研发背景: 西尼罗河病毒(WNV)是一种由蚊虫类介导传播的黄病毒,与引起人类感染性流行病的登革热病毒、黄热病病毒和日本脑炎病毒密切相关。 WNV和登革热病毒(DENV)同属黄病毒科(Flaviviridae)黄热病毒属,是具有小包膜单…

实现llava的【单轮对话】调整成【多轮对话】 (输入图片/多模态/多轮对话/llava)

使用llava时,将llava的单轮对话调整成多轮对话 先说好方法一,直接对官方网站的quick start代码进行修改方法二:使用bash结合基础的单轮对话代码进行修改2.1 首先是最基础的llava官网代码回顾2.2 伪多轮对话方法(每次新的prompt输入…

AEC10 SA计算整理 --- 基础SA

LuxSA: LuxSALumaAvgLumaBE16x16 LuxSATarget[setparam/tr:luxlux] LuxSAAdjRatioLuxSATarget/LuxSALumaLuxSALuma: 计算16x16区域的平均亮度(Luma值)。 LuxSATarget: 通过参数设置获取目标亮度值(通常与当前光线条件相关)。 Lux…

【多模态】41、VILA | 打破常规多模态模型训练策略,在预训练阶段就微调 LLM 被证明能取得更好的效果!

论文:VILA: On Pre-training for Visual Language Models 代码:https://github.com/NVlabs/VILA 出处:NVLabs 时间:2024.05 贡献: 证明在预训练阶段对 LLM 进行微调能够提升模型对上下文任务的效果在 SFT 阶段混合…

同三维T80006解码器视频使用操作说明书:高清HDMI解码器,高清SDI解码器,4K超清HDMI解码器,双路4K超高清解码器

同三维T80006解码器视频使用操作说明书:高清HDMI解码器,高清SDI解码器,4K超清HDMI解码器,双路4K超高清解码器 解码器T80006 同三维,十多年老品牌,我们一直专注:视频采集卡、视频编码器、转码器、…

Centos7离线安装ElasticSearch7.4.2

一、官网下载相关的安装包 ElasticSearch7.4.2: elasticsearch-7.4.2-linux-x86_64.tar.gz 下载中文分词器: elasticsearch-analysis-ik-7.4.2.zip 二、上传解压文件到服务器 上传到目录:/home/data/elasticsearch 解压文件&#xff1…

免费无限白嫖阿里云服务器

今天,我来分享一个免费且无限使用阿里云服务器的方法,零成本!这适用于日常测试学习,比如测试 Shell 脚本、学习 Docker 安装、MySQL 等等。跟着我的步骤,你将轻松拥有一个稳定可靠的服务器,为你的学习和实践…

数据库的优点和缺点分别是什么

数据库作为数据存储和管理的核心组件,具有一系列显著的优点,同时也存在一些潜在的缺点。以下是对数据库优点和缺点的详细分析: 优点 数据一致性:数据库通过事务处理和锁机制等手段,确保数据的一致性和完整性。这意味着…

错误记录-SpringCloud-OpenFeign测试远程调用

文章目录 1,org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name memberController: Unsatisfied dependency expressed through field couponFeign2, Receiver class org.springframework.cloud.netflix…