🥳加入Scrapeless 社区申请免费试用以访问我们强大的网页抓取工具包!
返回博客

如何使用 Puppeteer 并避免监测

James Thompson
James Thompson

Scraping and Proxy Management Expert

24-Sep-2024

现在的网站都采用反爬虫软件来识别爬虫。在进行流畅的爬取过程中,最好的防御是使用适当的掩蔽技术,例如无头浏览器。

在进行网页抓取时,Puppeteer 是一个无头 Chrome,它可以模拟实际用户的活动,以逃避像 Cloudflare 这样的反爬虫。那么你如何处理它呢?

这篇文章将介绍使用 Puppeteer 进行抓取而不会被检测到的最佳技巧。然而,在此之前...

Puppeteer:它是什么?

Puppeteer 是一种 Node.js 软件,它提供了一个高级 API,用于以编程方式访问 Chromium 无头浏览器。

它很容易用 Yarn 或 npm 安装,它的一大优势是可以访问和修改 DevTools 协议。

反爬虫能识别 Puppeteer 吗?

确实,这些反爬虫可以识别像 Selenium 或 Puppeteer 这样的无头浏览器。

让我们尝试以快速抓取为例,对 NowSecure 进行爬取,以演示这一点。该网站会通知你是否通过了使用机器人进行测试的保护措施。

为此,我们将首先安装 Node.js,安装完成后,我们将通过运行以下简单的命令代码安装 Puppeteer。

language Copy
npm install puppeteer
language Copy
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 Copy
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 Copy
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 Copy
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,我们仅访问公开数据,同时严格遵守适用的法律、法规和网站隐私政策。 本博客内容仅用于演示目的,不涉及任何非法或侵权行为。 对于使用本博客或第三方链接的信息,我们不做任何保证,也不承担任何责任。 在参与任何抓取活动之前,请咨询您的法律顾问并查看目标网站的服务条款或获取必要的权限。

最受欢迎的文章

目录