如何绕过Cloudflare进行网页爬取

如何绕过Cloudflare进行网页爬取

使用 Puppeteer 绕过 Cloudflare 是一个好办法。Puppeteer是一个基于Node.js的库,提供了控制无头Chrome或Chromium的高级API。
author
Wonderhows November 08, 2023

当我们尝试进行网页爬取时,像Cloudflare这样的反机器人系统往往是最头疼的障碍。而使用Puppeteer绕过Cloudflare是避免这种压力的最佳方式之一。Puppeteer作为一个头less浏览器技术,能够在网页爬取过程中绕过Cloudflare的机器人检测,使你的爬虫顺利运行。

在这篇文章中,我们将讨论如何利用Puppeteer绕过Cloudflare。让我们开始吧!

前言

Puppeteer是一个基于Node.js的库,提供了控制无头Chrome或Chromium的高级API。该API通过DevTools Protocol远程控制无头Chromium实例,并利用其浏览器渲染网页和JavaScript元素的能力。Puppeteer默认以无头模式运行,但你也可以将其配置为非无头模式(完整的Chrome或Chromium)。

当Puppeteer的网络爬虫访问网站时,它首先创建一个浏览器实例。这是为了在导航到所需数据位置进行爬取之前渲染网站内容。Cloudflare的机器人检测可能会将这一行为识别为机器人操作,尤其是在无头模式下执行时。但将Puppeteer配置为完整的Chrome模式(headless = false)可以让你访问受Cloudflare保护的网站。

然而,Cloudflare是一个拥有不断更新的Web应用程序防火墙(WAF)的复杂解决方案。无论是无头模式还是非无头模式,你可能仍然会被阻止。绕过Cloudflare的关键在于了解Cloudflare如何检测机器人。

Cloudflare的机器人保护系统使网站能够识别不必要的流量。然而,像谷歌和其他搜索引擎这样的某些有用的机器人被允许访问以进行网页爬取和排名。这是因为Cloudflare为这些机器人维护了一个安全列表,而不幸的是,Puppeteer并不在这个列表上。因此,你的无头浏览器爬虫可能会在受Cloudflare保护的网站上遇到阻碍。

Cloudflare使用各种技术来防范恶意威胁和数据入侵。其中一些技术包括检测僵尸网络、IP地址声誉、TLS指纹识别、CAPTCHA、Canvas指纹识别、HTTP请求头、事件追踪等。要了解更多,请查看我们的绕过Cloudflare的指南。

Cloudflare Bot Management可以检测Puppeteer。当Puppeteer的网络爬虫访问受Cloudflare保护的网站时,会通过上述方法进行安全检查。这些检查发生在被称为Cloudflare等待室的中间页面。如果网络爬虫成功通过这些挑战,就会被授予访问权限。否则,就会被阻止。

你是否感到沮丧,因为你的网络爬虫一次又一次地被阻止?ZenRows API可以为你处理轮换代理和无头浏览器。免费试用吧。

尽管Puppeteer由于与Chrome的相似性而可以绕过Cloudflare的一些机器人检测技术,但在一些更详细的机器人检测检查中,它不会通过。headless chrome的默认navigation.webdriver属性使Cloudflare能够将其识别为自动化浏览器。虽然一些微小的配置可以缓解这个问题,但Puppeteer仍然在其浏览器指纹中留下了细微的痕迹,这使其被识别为非人类。

要确认Puppeteer是否绕过Cloudflare,请尝试爬取CoinTracker,一个受Cloudflare保护的网站。你可以通过在实际浏览器中访问该网站并检查网络选项卡来确认这一点。

最终发现,Puppeteer本身不能绕过Cloudflare。

那么,如何使用Puppeteer绕过Cloudflare并将爬虫从等待室中释放?我们即将揭晓。

Puppeteer-extra-plugin-stealth

理想情况下,你可以通过掩盖Puppeteer的自动化浏览器属性来执行Puppeteer Cloudflare绕过,使其看起来像一个真实的浏览器。其中一个最流行的做法是利用Puppeteer-extra-plugin-stealth。

Puppeteer-extra-plugin-stealth使用与基本Puppeteer相似的API,所以对于已经使用Puppeteer的开发人员来说,没有学习曲线。这个插件消除了将Puppeteer与真实浏览器区分开来的微小浏览器指纹痕迹。例如,该隐身插件覆盖了navigator.webdriver = true属性,以掩盖自动化操作并表现得像人类。

让我们看看如何使用Puppeteer-extra-plugin-stealth插件绕过Cloudflare Puppeteer。

先决条件:为了完成本教程,我们将使用Node.js,所以你需要安装Node(或nvm)和npm。有些系统已经预先安装了这些工具。安装所有必要的库,运行npm install。它将创建一个包含所有依赖项的package.json文件。然后安装Puppeteer。

要绕过Cloudflare的机器人检测,使用Puppeteer-extra-plugin-stealth开始之前,请先安装Puppeteer额外和隐身插件。

使用以下脚本,我们可以绕过CoinTracker的Cloudflare反机器人检测,并截取我们目标网站首页的屏幕截图。

npm i puppeteer
npm install puppeteer-extra puppeteer-extra-plugin-stealth
// puppeteer-extra is a drop-in replacement for puppeteer, 
// it augments the installed puppeteer with plugin functionality 
const puppeteer = require('puppeteer-extra') 
 
// add stealth plugin and use defaults (all evasion techniques) 
const StealthPlugin = require('puppeteer-extra-plugin-stealth') 
puppeteer.use(StealthPlugin()) 
  
// puppeteer usage as normal 
puppeteer.launch({ headless: true}).then(async browser => { 
	const page = await browser.newPage() 
	await page.goto('https://www.cointracker.io/') 
	await page.waitForTimeout(2000) 
	await page.screenshot({ path: 'cointracker_home.png', fullPage: true }) 
	await browser.close() 
});

总结

使用Puppeteer进行网页爬取是一件有趣的事情,但是当有了像Cloudflare这样的反机器人系统后,这个过程可能会有些让人感到压力,因为它们能够阻止我们的网络爬虫。使用Puppeteer-extra-plugin-stealth是绕过Cloudflare的一种方法,它掩盖了浏览器的属性,使其看起来像人类。

然而,当遇到更高级的Cloudflare安全措施时,这种方法就不再有效。为了解决这个问题,我们使用了ZenRows。它是一个网络爬虫API,可以处理所有的反机器人检测,包括轮换代理、无头浏览器和CAPTCHA。免费开始,观察你的爬虫过程变得顺畅!

comments powered by Disqus