Cloudflare 挑战是一种广泛使用的反机器人机制,旨在保护网站资源免受恶意流量的攻击。其核心功能之一是Cloudflare 5s 挑战,它通过动态验证有效地阻止自动化请求。
Cloudflare 5s 挑战是一种智能验证机制。当用户访问受 Cloudflare 保护的网站时,系统会强制他们等待 5 秒。在此期间,Cloudflare 会对用户的浏览器环境进行一系列检查,包括但不限于:
对于网络爬取开发者来说,Cloudflare 5s 挑战带来了以下挑战:
通过结合Puppeteer 和Nstbrowser 的 Browserless 云浏览器服务,您可以模拟真实用户浏览器的行为来绕过 Cloudflare 5s 挑战,并继续执行您的网络爬取任务。
Browserless 是 Nstbrowser 提供的一种高性能无头云浏览器产品。它专为自动化任务而设计,通过 API 和 WebSocket 提供强大的远程控制功能。
借助 Browserless,开发者可以轻松绕过复杂的反机器人机制(例如 Cloudflare 挑战),专注于实现其业务逻辑,无需担心技术障碍。
npm install puppeteer-core
在使用 Puppeteer 编写业务逻辑时,您不再需要担心被 Cloudflare 5s 挑战阻止。Nstbrowser 的 Browserless 云服务会自动为您处理验证,让您可以专注于您的代码。
下面是一个完整的示例脚本:
import puppeteer from 'puppeteer-core';
const API_KEY = "your api key"; // required
const HOST = 'wss://less.nstbrowser.io';
const config = {
proxy: 'your proxy',
headless: true,
};
const query = new URLSearchParams({
"x-api-key": API_KEY, // required
"config": JSON.stringify(config),
});
const browserWSEndpoint = `${HOST}/connect?${query.toString()}`;
(async () => {
const browser = await puppeteer.connect({
browserWSEndpoint: browserWSEndpoint,
defaultViewport: null,
});
const page = await browser.newPage();
try {
await page.goto('https://www.scrapingcourse.com/cloudflare-challenge', {waitUntil: 'domcontentloaded'});
// TODO: Add your business logic here
await page.waitForSelector('#challenge-info', {visible: true});
await page.screenshot({path: 'challenge-solved.png', fullPage: true});
} catch (e) {
console.error(e);
} finally {
await browser.close();
}
})();
您也可以在 Nstbrowser 客户端的 Browserless 菜单下的 Playground 功能中直接测试实际代码执行。
通过遵循本指南,开发人员可以轻松绕过 Cloudflare 5s 挑战,同时利用 Nstbrowser 的 Browserless 云服务,显著提高其网络爬取项目的效率和稳定性。