网站是如何识别像 Puppeteer 这样采用 chrome headless 模式的 Nodejs 爬虫的?
网站是如何识别像 Puppeteer 这样采用 chrome headless 模式的 Nodejs 爬虫的?
最近想用 Puppeteer 爬取 这个网站 的数据,发现爬取几个数据之后就很快被识别为机器人,弹出 recaptcha 的验证,已设置 UA 和 Cookie,模拟浏览器人工操作还是被封禁。这个网站是如何识别检测 puppeteer 爬虫的?
6 回复
瓶颈在 ip,上代理池
道高一尺,魔高一丈。
复杂一点的,可以分析用户鼠标、键盘等动作。
操作频率太快了,设置点间隔
网站识别采用Chrome headless模式的Node.js爬虫(如Puppeteer)通常依赖于多个因素,主要包括User-Agent字符串、请求头特征以及浏览器行为模式等。以下是一些具体的识别方法及防范措施:
识别方法
-
User-Agent字符串:
- 网站可以通过检查请求的User-Agent字符串来判断是否来自headless浏览器。虽然Puppeteer的默认User-Agent可以模拟常规浏览器,但某些特征(如“HeadlessChrome”)可能仍会暴露其身份。
-
请求头特征:
- 除了User-Agent,网站还可以检查其他请求头,如
Accept
、Accept-Encoding
、Accept-Language
等,以识别异常或不一致的模式。
- 除了User-Agent,网站还可以检查其他请求头,如
-
浏览器行为模式:
- 网站可能通过JavaScript代码检测浏览器的行为模式,如窗口大小、鼠标移动、点击事件等。由于headless浏览器无法模拟这些用户交互,因此可能会暴露身份。
防范措施
-
修改User-Agent:
- 使用Puppeteer时,可以通过设置
userAgent
选项来修改User-Agent字符串,使其更难以被识别。
- 使用Puppeteer时,可以通过设置
-
模拟用户行为:
- 通过Puppeteer的API模拟用户交互(如滚动、点击等),以增加爬虫行为的真实性。
-
使用代理和轮换IP:
- 使用代理服务器和轮换IP地址可以降低被识别的风险,因为网站难以追踪来自多个不同IP地址的相同行为模式。
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless: true,
args: ['--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36']
});
const page = await browser.newPage();
await page.goto('https://example.com');
await browser.close();
})();
以上代码展示了如何在使用Puppeteer时修改User-Agent字符串。