Cách Giải Quyết Cloudflare Với Node.js (Puppeteer + Scrapeless)
Advanced Bot Mitigation Engineer
Tóm tắt:
- Cloudflare đánh giá trình duyệt, không phải người truy cập. Nó đọc độ nhất quán của dấu vân tay, tín hiệu hành vi, và địa chỉ IP ra, sau đó thiết lập một cookie
cf_clearancecho một trình duyệt mà nó tin tưởng — nên việc xóa nó trong Node.js có nghĩa là trở thành một trình duyệt được tin cậy, chứ không phải giải một câu đố. - Một trình duyệt Node.js cục bộ không đạt điểm số đó trên ba trục: dấu hiệu từ
navigator.webdriver, dấu vân tay mặc định headless, và địa chỉ IP từ trung tâm dữ liệu. Việc gắn thêm các plugin ẩn danh để sửa chữa cả ba là một công việc bảo trì mệt mỏi. - Trình duyệt Scrapeless Scraping vượt qua thử thách trong khi render — Chromium tự phát triển thực sự, dấu vân tay nhất quán theo phiên, và địa chỉ ra dân cư ở hơn 195 quốc gia, kết nối qua một điểm cuối WebSocket.
- Node.js của bạn vẫn là Puppeteer tiêu chuẩn. Kết nối với
puppeteer.connect(), chờ nội dung sau thử thách, và đọc trang — sự thay đổi duy nhất là URL kết nối. - Xác thực trực tiếp: một phiên Puppeteer trên trình duyệt đám mây đã vượt qua trang thử thách của Cloudflare, đọc dấu hiệu thành công
Bạn đã vượt qua thử thách Cloudflare! :D, và nhận được một cookiecf_clearance. - Miễn phí để bắt đầu. Các tài khoản Scrapeless mới bao gồm thời gian chạy Scraping Browser miễn phí — đăng ký tại app.scrapeless.com.
Giới thiệu: vượt qua Cloudflare trong Node.js là một vấn đề trình duyệt
Một thử thách của Cloudflare không phải là một CAPTCHA hình ảnh mà bạn giải mã. Nó chạy ẩn và đánh giá trình duyệt đã tải trang — liệu dấu vân tay có nhất quán nội bộ, liệu các tín hiệu tương tác có trông giống con người, và liệu địa chỉ IP ra có uy tín sạch sẽ. Khi điểm số đạt yêu cầu, Cloudflare thiết lập một cookie cf_clearance và trang thực tế được tải. Khi không, bạn sẽ nhận được một trang trung gian thay vì nội dung.
Điều này tạo lại nhiệm vụ Node.js. Không có câu trả lời nào để gửi — công việc là trình bày một trình duyệt mà Cloudflare đã tin tưởng. Một Chromium điều khiển bởi Puppeteer không thể làm vậy: nó thông báo tự động hóa thông qua thuộc tính navigator.webdriver, sử dụng font chữ và hành vi canvas mặc định headless, và ra từ một địa chỉ IP mà dịch vụ uy tín đã biết. Bạn có thể gắn thêm một plugin ẩn danh và sau đó tiếp tục sửa chữa khi Chromium và các công cụ phát hiện di chuyển. Hướng dẫn này đi theo con đường ngắn hơn: điều khiển Scrapeless Scraping Browser từ Puppeteer tiêu chuẩn, để dấu vân tay, hành vi và địa chỉ IP ra được xử lý ở phía máy chủ và thử thách được vượt qua trong quá trình render bình thường.
Những gì Cloudflare thực sự kiểm tra
Tài liệu của Cloudflare mô tả một bước xác minh diễn ra mà không làm gián đoạn người truy cập. Trên thực tế, nó đánh giá ba điều và cấp một cookie cf_clearance — một cookie HTTP tiêu chuẩn — khi chúng đạt được:
| Những gì Cloudflare đọc | Tại sao trình duyệt Node.js cục bộ không đạt tiêu chuẩn |
|---|---|
| Độ nhất quán của dấu vân tay | các thiết lập mặc định headless và cờ webdriver mâu thuẫn với Chrome thật |
| Tín hiệu hành vi | thời gian kịch bản mà không có bề mặt trình duyệt hợp lý |
| Uy tín của địa chỉ IP ra | các địa chỉ IP từ trung tâm dữ liệu đạt điểm thấp hơn so với địa chỉ IP dân cư |
Một trình duyệt nhất quán, đáng tin cậy quan trọng hơn bất kỳ sự né tránh nào — đó là lý do tại sao việc di chuyển cả ba sang phía máy chủ thì bền hơn so với việc gắn thêm các plugin ẩn danh.
Tại sao là Scrapeless Scraping Browser
Trình duyệt Scrapeless Scraping là một trình duyệt đám mây tùy chỉnh, chống phát hiện, được thiết kế cho các bộ thu thập dữ liệu web và các tác nhân AI. Đối với Cloudflare cụ thể, nó cung cấp:
- Chromium tự phát triển thực sự chạy JavaScript thử thách giống như Chrome, vì vậy nó giải quyết thay vì dừng lại.
- Một dấu vân tay nhất quán theo phiên — không có dấu hiệu từ
navigator.webdriver, không có thiết lập mặc định headless nào bị rò rỉ. - Địa chỉ ra dân cư ở hơn 195 quốc gia — Cloudflare đánh giá địa chỉ IP ra, và một khu vực dân cư có uy tín sạch mà một địa chỉ IP từ trung tâm dữ liệu thì không.
- Sự kiên trì của phiên để một sự ủy quyền
cf_clearancecó thể được sử dụng lại trong các yêu cầu trong cùng một phiên. - Một bề mặt kết nối — mọi tùy chọn đều là một tham số truy vấn trên cùng một điểm cuối WebSocket.
Nhận khóa API của bạn trên gói miễn phí tại app.scrapeless.com.
Điều kiện tiên quyết
- Node.js 18 hoặc mới hơn
puppeteer-coređã cài đặt (không cần Chromium đi kèm — bạn kết nối đến một cái từ xa)- Một tài khoản Scrapeless và khóa API — đăng ký tại app.scrapeless.com
Chi tiết kết nối đầy đủ có trong tài liệu Trình duyệt Scraping.
Cài đặt
Bạn kết nối với một trình duyệt từ xa, vì vậy puppeteer-core (không có Chromium kèm theo) là tất cả những gì bạn cần.
bash
npm install puppeteer-core
export SCRAPELESS_API_KEY=your_api_token_here # khóa miễn phí tại https://app.scrapeless.com
Kết nối và xóa thử thách
Xây dựng điểm cuối, kết nối với puppeteer.connect(), điều hướng và chờ nội dung sau thử thách gắn kết. Thử thách được giải quyết trong quá trình kết xuất — không có cuộc gọi giải quyết riêng biệt.
javascript
import puppeteer from "puppeteer-core";
import { URLSearchParams } from "node:url";
const params = new URLSearchParams({
token: process.env.SCRAPELESS_API_KEY,
sessionTTL: "180",
proxyCountry: "US",
});
const endpoint = `wss://browser.scrapeless.com/api/v2/browser?${params}`;
const TARGET = "https://www.scrapingcourse.com/cloudflare-challenge";
const browser = await puppeteer.connect({ browserWSEndpoint: endpoint });
const page = await browser.newPage();
await page.goto(TARGET, { waitUntil: "domcontentloaded", timeout: 90000 });
// Trình duyệt đám mây xóa Cloudflare trong quá trình kết xuất; chờ nội dung thực sự.
await page.waitForSelector("#challenge-title", { timeout: 90000 });
console.log("đã xóa:", await page.$eval("#challenge-title", (el) => el.innerText));
const cookies = await page.cookies();
console.log("cf_clearance:", cookies.some((c) => c.name === "cf_clearance"));
await browser.close();
Một lần chạy trực tiếp của đoạn mã này in ra đã xóa: Bạn đã vượt qua thử thách Cloudflare! :D và cf_clearance: true — Puppeteer tiêu chuẩn, lấy từ trình duyệt đám mây.
Nhận khóa API của bạn trên gói miễn phí: app.scrapeless.com
Xác nhận vượt qua và mang theo sự miễn trừ
Tín hiệu đáng tin cậy là nội dung thực sự gắn kết — một khi phần tử sau thử thách có mặt, trang đã được xóa. Cloudflare cũng đặt một cookie cf_clearance trên phiên vượt qua, mà bạn có thể đọc để mang theo sự miễn trừ cho các yêu cầu khác trong cùng một phiên. Thông số kỹ thuật W3C WebDriver yêu cầu tự động hóa phù hợp phải hiển thị cờ webdriver; trình duyệt đám mây không mang nó, đó là lý do tại sao lần kiểm tra đầu tiên đọc sạch.
javascript
const cookies = await page.cookies();
const clearance = cookies.find((c) => c.name === "cf_clearance");
console.log("cf_clearance có mặt:", Boolean(clearance));
if (clearance) console.log("miền:", clearance.domain);
Ghim khu vực để có sự xóa đáng tin cậy
Cloudflare ghi điểm địa chỉ IP đầu ra, vì vậy hãy ghim proxyCountry vào một khu vực dân cư. Chuyển nó thành bất kỳ mã quốc gia ISO nào.
javascript
const params = new URLSearchParams({
token: process.env.SCRAPELESS_API_KEY,
sessionTTL: "180",
proxyCountry: "US", // hoặc "DE", "JP", "ANY"
});
Nơi các trình duyệt Node.js địa phương dừng lại
Một trình thu thập dữ liệu Puppeteer địa phương là tốt cho đến khi Cloudflare bắt đầu ghi điểm trình duyệt. Sau đó, dấu vân tay headless, cờ webdriver, và địa chỉ IP trung tâm dữ liệu mỗi cái đều bị thất bại trong một kiểm tra khác nhau, và trang chờ thay thế nội dung. Đó là các vấn đề về dấu vân tay, hành vi và IP — ba vấn đề mà trình duyệt đám mây xử lý ở phía máy chủ. Kết nối với Scrapeless sẽ giao cho một phiên được quản lý trong khi mã Puppeteer của bạn giữ nguyên tiêu chuẩn.
Những gì bạn nhận lại
Phiên hoạt động giống như bất kỳ phiên Puppeteer nào — page.goto, page.waitForSelector, page.content(), và cookie đều hoạt động. Một vài quan sát thành thật từ việc xóa Cloudflare qua trình duyệt đám mây:
navigator.webdriverkhông có; vì vậy lần kiểm tra đầu tiên mà Cloudflare chạy giống như một Chrome thực sự.- Địa chỉ IP đầu ra khớp với
proxyCountry— một khu vực dân cư xóa đáng tin cậy hơn nhiều so với địa chỉ IP trung tâm dữ liệu. cf_clearancecó mặt sau khi vượt qua — tái sử dụng cùng một phiên để mang theo quyền cấp phép cho các yêu cầu tiếp theo.- Chân ấm phiên cho các trang cứng đầu — tải trang chủ của trang web đầu tiên trong cùng một phiên trước khi vào trang được bảo vệ, vì vậy bề mặt hành vi trông giống như một chuyến thăm bình thường.
Kết luận: xóa Cloudflare, giữ Node.js của bạn.
Xóa Cloudflare trong Node.js không chỉ là giải mã một thử thách — mà là trình bày một trình duyệt mà Cloudflare tin tưởng. Trình duyệt Scraping không có lỗi xử lý ba yếu tố mà nó đánh giá (dấu vân tay, hành vi, địa chỉ IP xuất) từ phía máy chủ, vì vậy mã Puppeteer của bạn chỉ thay đổi URL kết nối. Gán proxyCountry vào một khu vực dân cư, chờ nội dung sau thử thách, và đọc cf_clearance để xác nhận có thể qua được. Để chạy cùng một trình duyệt đám mây từ Python, hãy xem hướng dẫn trình thu thập dữ liệu sản xuất Scrapling, và so sánh các gói trên trang giá của Scrapeless.
Sẵn sàng để Xây dựng Pipeline Xóa Cloudflare của bạn?
Tham gia cộng đồng của chúng tôi để nhận gói miễn phí và kết nối với các nhà phát triển thu thập dữ liệu từ các trang được bảo vệ bởi Cloudflare: Discord · Telegram.
Đăng ký tại app.scrapeless.com để nhận môi trường chạy Trình duyệt Thu thập Dữ liệu miễn phí và chỉ định Puppeteer đến trình duyệt đám mây xóa Cloudflare trong quá trình render.
Câu hỏi thường gặp
Q: Tôi có cần một dịch vụ giải CAPTCHA riêng không?
Không cần trên một trình duyệt thành công. Cloudflare chủ yếu đánh giá dấu vân tay, hành vi và IP ở chế độ nền và phát hành cookie cf_clearance. Trình duyệt đám mây được xây dựng để vượt qua việc đánh giá đó trong một lần render bình thường, vì vậy không có bước giải câu đố riêng biệt nào cần thiết.
Q: puppeteer hay puppeteer-core?
Sử dụng puppeteer-core. Nó bỏ qua việc tải xuống Chromium đi kèm vì bạn kết nối với trình duyệt đám mây thay vì khởi chạy một cái cục bộ.
Q: Tôi có cần một proxy không?
Không. Kết nối ra ngoài từ khu vực dân cư đã được tích hợp — đặt proxyCountry thành một khu vực hoặc ANY. Cloudflare đánh giá địa chỉ IP xuất, vì vậy một khu vực dân cư sẽ xóa hiệu quả hơn địa chỉ trung tâm dữ liệu.
Q: Thử thách vẫn hiện trên một số trang — điều gì hữu ích?
Gán proxyCountry vào một khu vực dân cư và làm ấm phiên bằng cách tải trang chính của trang web trước trong cùng một phiên trước khi vào trang được bảo vệ, để bề mặt hành vi đọc giống như một lần ghé thăm thông thường.
Q: Việc xóa Cloudflare có hợp pháp không?
Truy cập dữ liệu công khai thường được cho phép, nhưng các quy định có thể khác nhau theo từng khu vực và trang. Xem lại điều khoản dịch vụ của mục tiêu, tôn trọng hướng dẫn của robot, và tham khảo ý kiến của luật sư cho bất cứ điều gì nhạy cảm.
Tại Scrapless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định và chính sách bảo mật trang web hiện hành. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động cạo nào, hãy tham khảo ý kiến cố vấn pháp lý của bạn và xem xét các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.



