如何使用 Puppeteer 并避免监测

Scraping and Proxy Management Expert
现在的网站都采用反爬虫软件来识别爬虫。在进行流畅的爬取过程中,最好的防御是使用适当的掩蔽技术,例如无头浏览器。
在进行网页抓取时,Puppeteer 是一个无头 Chrome,它可以模拟实际用户的活动,以逃避像 Cloudflare 这样的反爬虫。那么你如何处理它呢?
这篇文章将介绍使用 Puppeteer 进行抓取而不会被检测到的最佳技巧。然而,在此之前...
Puppeteer:它是什么?
Puppeteer 是一种 Node.js 软件,它提供了一个高级 API,用于以编程方式访问 Chromium 无头浏览器。
它很容易用 Yarn 或 npm 安装,它的一大优势是可以访问和修改 DevTools 协议。
反爬虫能识别 Puppeteer 吗?
确实,这些反爬虫可以识别像 Selenium 或 Puppeteer 这样的无头浏览器。
让我们尝试以快速抓取为例,对 NowSecure 进行爬取,以演示这一点。该网站会通知你是否通过了使用机器人进行测试的保护措施。
为此,我们将首先安装 Node.js,安装完成后,我们将通过运行以下简单的命令代码安装 Puppeteer。
language
npm install puppeteer
language
const puppeteer = require('puppeteer');
(async () => {
// Initiate the browser
const browser = await puppeteer.launch();
// Create a new page with the default browser context
const page = await browser.newPage();
// Setting page view
await page.setViewport({ width: 1280, height: 720 });
// Go to the target website
await page.goto('https://nowsecure.nl/');
// Wait for security check
await page.waitForTimeout(30000);
// Take screenshot
await page.screenshot({ path: 'image.png', fullPage: true });
// Closes the browser and all of its pages
await browser.close();
})();
因此,在这个例子中,我们创建了一个新的浏览器页面,并使用基本的 Puppeteer 配置访问了目标网站。在安全检查后,我们对网页进行了截图。
3 种防止 Puppeteer 被检测到的方法
通过避免 Puppeteer 机器人检测,可以实现无缝的爬取操作。以下是如何在抓取时防止被阻止,并避免 Puppeteer 被检测:
1. 使用代理
IP 跟踪是反爬虫最常用的技术之一,其中网站的请求由反爬虫系统监控。此外,当一个 IP 在短时间内发出大量请求时,反爬虫也可以识别出 Puppeteer 爬虫。
你可以使用代理来逃避检测,代理充当用户和互联网之间的网关。因此,代理接收来自服务器的请求,并将它们与响应数据一起转发给我们。
为了实现这一点,我们可以运行 Puppeteer 并将代理添加到 args
参数中,如下所示:
language
const puppeteer = require('puppeteer');
const proxy = ''; // Add your proxy here
(async () => {
// Initiate the browser with a proxy
const browser = await puppeteer.launch({args: ['--proxy-server=${proxy}']});
// ... continue as before
})();
您是否厌倦了持续的网页抓取阻止?
Scrapeless:最好的在线抓取一体化解决方案!
使用我们的智能、高性能代理轮换保持匿名并避免基于 IP 的封禁:
免费试用!
2. 标头
标头包含关于 HTTP 请求的上下文和元数据细节。它指示工具是机器人还是标准网络浏览器。通过在 HTTP 请求中添加适当的标头,你可以帮助防止被发现。
你可以在 headlessChrome
默认情况下,通过添加新的标头(如 User-Agent)来扩展 Puppeteer 的功能。这个广泛使用的标头包含应用程序、操作系统、供应商和请求版本,在网页抓取中被使用。
language
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Add Headers
await page.setExtraHTTPHeaders({
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
'upgrade-insecure-requests': '1',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'en-US,en;q=0.9,en;q=0.8'
});
// ... continue as before
})();
3. 限制请求
如前所述,反机器人系统可以利用用户发送的查询数量来监控其行为。此外,限制查询数量并在请求之间暂停有助于防止 Puppeteer 被检测,因为大多数用户不会每秒提交数百个请求。
您可以使用 .setRequestInterception()
函数来限制 Puppeteer 渲染的资源。
language
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// 限制请求
await page.setRequestInterception(true);
page.on('request', async (request) => {
if (request.resourceType() == 'image') {
await request.abort();
} else {
await request.continue();
}
});
// ... 继续之前的操作
})();
通过将 .setRequestInterception() = true
设置为 true,我们拒绝了 Puppeteer 对图片的请求。我们能够通过这种方式限制查询。由于要加载和等待的资源更少,我们的抓取器也会更快。
结论
使用 Puppeteer,有各种方法可以逃避检测;在这篇文章中,我们将介绍最有效和最直接的方法。
使用代理、标头、限制请求和 Puppeteer-Stealth 时存在限制,但它们可以帮助您完成任务。这些技术在绕过复杂的反机器人防御方面通常效果不佳。
Scrapeless 通过一个 API 请求,为您管理反机器人绕过过程中的所有方面,包括 CAPTCHA 和轮换代理的无头浏览器。此外,入门是免费的。
在Scrapeless,我们仅访问公开数据,同时严格遵守适用的法律、法规和网站隐私政策。 本博客内容仅用于演示目的,不涉及任何非法或侵权行为。 对于使用本博客或第三方链接的信息,我们不做任何保证,也不承担任何责任。 在参与任何抓取活动之前,请咨询您的法律顾问并查看目标网站的服务条款或获取必要的权限。