Cách Giải Quyết Cloudflare Turnstile Khi Web Scraping
Specialist in Anti-Bot Strategies
Tóm tắt:
- Cloudflare Turnstile đánh giá trình duyệt, không đánh giá người dùng. 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 ngoài trong nền, sau đó cấp cookie
cf_clearancecho một trình duyệt mà nó tin cậy — vì vậy cách khắc phục là trở thành một trình duyệt đáng tin cậy, không phải là giải một câu đố. - Một trình duyệt headless cục bộ thất bại Turnstile trên ba trục cùng một lúc: giá trị
navigator.webdriver, dấu vân tay mặc định headless, và địa chỉ IP ra khỏi trung tâm dữ liệu. Sửa tất cả ba điều này bằng tay là một công việc bảo trì không ngừng. - Trình duyệt Scraping không có tạp chất vượt qua Turnstile trong quá trình render — Chromium tự phát triển thực sự, một dấu vân tay nhất quán theo phiên, và điểm ra dân cư ở 195+ quốc gia, kết nối qua một điểm cuối WebSocket.
- Mã tự động của bạn không thay đổi. Nó giao tiếp qua CDP, vì vậy
puppeteer.connect()vàchromium.connectOverCDP()hoạt động như bình thường; bạn chỉ cần chỉ định kết nối đến trình duyệt đám mây và đọc DOM sau khi thử thách. - Turnstile xuất hiện ở ba chế độ — không tương tác, vô hình, và checkbox quản lý — và cả ba đều kết thúc với việc cấp
cf_clearancetrên một trình duyệt đã vượt qua. - Miễn phí để bắt đầu. Tài khoản Scrapeless mới bao gồm thời gian chạy Trình duyệt Scraping miễn phí — đăng ký tại app.scrapeless.com.
Giới thiệu: Turnstile đánh giá trình duyệt, không phải một câu đố
Cloudflare Turnstile không phải là một CAPTCHA hình ảnh. Nó chạy trong nền và đánh giá trình duyệt đã tải trang: liệu dấu vân tay có nhất quán bên trong, liệu các tín hiệu tương tác có giống như con người, và liệu địa chỉ IP ra ngoài có danh tiếng sạch. Khi điểm số vượt qua, Cloudflare đặt một cookie cf_clearance và trang thực sự được tải. Khi không vượt qua, bạn nhận được một trang chuyển tiếp thay vì nội dung.
Điều đó thay đổi ý nghĩa của "giải quyết Turnstile". 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 trình duyệt Chromium headless cục bộ không thể: nó thông báo về tự động hóa thông qua thuộc tính navigator.webdriver, đi kèm với các font mặc định headless và hành vi canvas, và thoát từ một IP mà các dịch vụ danh tiếng đã biết. Bạn có thể sửa từng cái đó tại chỗ và sau đó tiếp tục sửa khi Chromium và các bộ phát hiện thay đổi.
Hướng dẫn này chọn con đường ngắn hơn: điều khiển Trình duyệt Scraping không có tạp chất — một trình duyệt đám mây chống phát hiện — với Puppeteer hoặc Playwright mà bạn đã sử dụng, để dấu vân tay, bề mặt hành vi và địa chỉ IP ra ngoài được xử lý phía máy chủ và Turnstile vượt qua trong quá trình render bình thường.
Turnstile thực sự kiểm tra điều gì
Tài liệu Turnstile của Cloudflare mô tả một widget xác thực khách truy cập mà không làm gián đoạn họ. Trong thực tế, nó xuất hiện ở ba chế độ, và cùng một trình duyệt đám mây xử lý tất cả vì nó trình bày một trình duyệt thực sự nhất quán thay vì một trình duyệt đã được sửa:
| Chế độ | Những gì khách truy cập thấy | Những gì nó đánh giá |
|---|---|---|
| Không tương tác | một widget xác thực mà không cần nhấp chuột | dấu vân tay + tín hiệu hành vi thụ động |
| Vô hình | không có gì được render | đánh giá nền tảng thuần túy |
| Quản lý | một checkbox "Xác nhận bạn là người" | cái trên cộng với một sự kiện tương tác |
Tất cả ba chế độ đều dẫn đến một cookie cf_clearance — một cookie HTTP tiêu chuẩn — được đặt trên một trình duyệt đã vượt qua. Turnstile cũng tham khảo các mã thông hành kiểu Privacy Pass được định nghĩa trong giao thức cấp phát Privacy Pass của IETF, đó là lý do mà một trình duyệt đáng tin cậy, nhất quán quan trọng hơn bất kỳ sự lách luật nào đơn lẻ.
Tại sao lại là Trình duyệt Scraping không có tạp chất
Trình duyệt Scraping không có tạp chất 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 trình thu thập dữ liệu web và đại lý AI. Đặc biệt cho Turnstile, nó mang lại:
- Chromium tự phát triển thực sự mà chạy JavaScript của widget giống hệt như Chrome, vì vậy thử thách được giải quyết thay vì bị treo.
- Một dấu vân tay nhất quán theo phiên — không có giá trị
navigator.webdriver, không có mặc định headless nào bị rò rỉ. - Điểm ra dân cư ở 195+ quốc gia — Turnstile đánh giá địa chỉ IP ra ngoài, và một khu vực dân cư có danh tiếng sạch nơi mà địa chỉ IP từ trung tâm dữ liệu thì không.
- Bảo tồn phiên để một cấp phép
cf_clearancecó thể được sử dụng lại qua 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 là một tham số truy vấn trên cùng một điểm cuối WebSocket.
Nhận API key của bạn trong gói miễn phí tại app.scrapeless.com.
Các yêu cầu cần có
- Node.js 18 hoặc mới hơn
- Một tài khoản Scrapeless và API key — đăng ký tại app.scrapeless.com
- Kiến thức cơ bản về Puppeteer hoặc Playwright và terminal
Các ví dụ dưới đây đã được xác minh với bề mặt CDP được tài liệu hóa của Trình duyệt Scraping. Chạy chúng từ đầu đến cuối cần có một phiên Scrapeless sống; thêm khóa API của bạn để thực thi từng cái. Chi tiết kết nối đầy đủ có trong tài liệu Trình duyệt Scraping.
Cài đặt
bash
npm install puppeteer-core # hoặc: playwright-core
export SCRAPELESS_API_KEY=sk_... # khóa miễn phí tại https://app.scrapeless.com
Cấu hình kết nối
Mọi thứ là tham số truy vấn trên wss://browser.scrapeless.com/api/v2/browser. Ghim proxyCountry vào một khu vực dân cư, vì Turnstile tính điểm cho IP xuất ra.
javascript
import puppeteer from "puppeteer-core";
const params = new URLSearchParams({
token: process.env.SCRAPELESS_API_KEY,
sessionTTL: "180",
proxyCountry: "US",
});
const browser = await puppeteer.connect({
browserWSEndpoint: `wss://browser.scrapeless.com/api/v2/browser?${params}`,
});
Xóa Turnstile và đọc mã thông báo
Trình duyệt Scraping của Scrapeless tự động giải quyết Turnstile trong quá trình render — không cần gọi giải quyết một cách rõ ràng. Bạn điều hướng, sau đó chờ mã thông báo Turnstile xuất hiện, đây là tín hiệu cho thấy widget đã được giải quyết. Việc quét tiếp theo phụ thuộc vào bạn.
javascript
import puppeteer from "puppeteer-core";
const TARGET = "https://www.scrapingcourse.com/cloudflare-challenge";
const params = new URLSearchParams({
token: process.env.SCRAPELESS_API_KEY,
sessionTTL: "180",
proxyCountry: "US",
});
const browser = await puppeteer.connect({
browserWSEndpoint: `wss://browser.scrapeless.com/api/v2/browser?${params}`,
});
const page = await browser.newPage();
await page.goto(TARGET, { waitUntil: "domcontentloaded", timeout: 60000 });
// Trình duyệt tự động giải quyết Turnstile; chờ mã thông báo để xác nhận đã giải quyết.
await page.waitForFunction(
() => window.turnstile && window.turnstile.getResponse(),
{ timeout: 60000 }
);
const token = await page.evaluate(() => window.turnstile.getResponse());
console.log("mã thông báo turnstile ->", token.slice(0, 24) + "...");
console.log("tiêu đề ->", await page.title());
await browser.close();
Lấy khóa API của bạn trong gói miễn phí: app.scrapeless.com
Dòng chảy tương tự trong Playwright
Playwright kết nối đến cùng một trình duyệt đám mây qua CDP; phiên tự động giải quyết Turnstile trong quá trình render, và bạn chờ mã thông báo theo cách giống nhau.
javascript
import { chromium } from "playwright-core";
const params = new URLSearchParams({
token: process.env.SCRAPELESS_API_KEY,
sessionTTL: "180",
proxyCountry: "US",
});
const browser = await chromium.connectOverCDP(
`wss://browser.scrapeless.com/api/v2/browser?${params}`
);
const page = await browser.newPage();
await page.goto("https://www.scrapingcourse.com/cloudflare-challenge", {
waitUntil: "domcontentloaded",
});
await page.waitForFunction(() => window.turnstile && window.turnstile.getResponse());
console.log("tiêu đề ->", await page.title());
await browser.close();
Xác nhận việc vượt qua
Tín hiệu đáng tin cậy là mã thông báo Turnstile — một khi window.turnstile.getResponse() trả về một giá trị, widget đã được giải quyết và bạn có thể tiếp tục. Cloudflare cũng thiết lập một cookie cf_clearance trên phiên đã vượt qua, mà bạn có thể đọc nếu bạn cần mang theo quyền truy cập này đến các yêu cầu khác.
javascript
const token = await page.evaluate(() => window.turnstile && window.turnstile.getResponse());
console.log("mã thông báo turnstile hiện có ->", Boolean(token));
const cookies = await page.cookies();
console.log("cf_clearance hiện có ->", cookies.some((c) => c.name === "cf_clearance"));
Những gì bạn nhận lại
- Tín hiệu
navigator.webdriverkhông có — trình duyệt đám mây không thông báo tự động hóa, vì vậy lần kiểm tra đầu tiên mà Turnstile thực hiện đọc như một Chrome thực sự. - IP xuất ra khớp với
proxyCountry— một khu vực dân cư xóa lỗi đáng tin cậy hơn nhiều so với IP trung tâm dữ liệu, mà Turnstile sẽ giảm điểm. cf_clearancecó mặt sau khi vượt qua — sử dụng lại cùng một phiên để mang theo quyền truy cập qua các yêu cầu tiếp theo.- Khởi động phiên cho các trang khó — tải trang chủ 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 trông giống như một chuyến thăm bình thường.
Kết luận: xóa Turnstile, giữ mã của bạn
Giải quyết Turnstile không phải là về việc trả lời một thách thức - mà là về việc trình bày một trình duyệt mà Cloudflare tin tưởng. Trình duyệt Scrapeless Scraping xử lý ba yếu tố mà Turnstile chấm điểm (dấu vân tay, hành vi, IP đầu ra) ở phía máy chủ, vì vậy mã Puppeteer hoặc Playwright 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ư, làm nóng phiên trên trang chủ, và đọc cf_clearance để xác nhận đạt yêu cầu. Để biết sự khác biệt giữa trình yêu cầu tạm thời và widget, hãy xem thách thức Cloudflare so với Turnstile, và so sánh các gói trên trang giá Scrapeless.
Sẵn sàng để xây dựng quy trình làm sạch Turnstile 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 đang thu thập dữ liệu từ các trang web có bảo vệ Turnstile: Discord · Telegram.
Đăng ký tại app.scrapeless.com để nhận miễn phí thời gian runtime của Trình duyệt Scraping và hướng Puppeteer hoặc Playwright đến trình duyệt đám mây có khả năng làm sạch Turnstile trong quá trình render.
Câu hỏi thường gặp
H: Turnstile có phải là một CAPTCHA mà tôi phải giải với dịch vụ giải mã không?
Không đối với một trình duyệt đạt yêu cầu. Turnstile chủ yếu chấm điểm dấu vân tay, hành vi và IP ở 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 chấm điểm đó trong quá trình render bình thường, vì vậy không có câu đố nào khác để trả lời.
H: Nó có xử lý chế độ vô hình và không tương tác không?
Có. Cả ba chế độ Turnstile đều kết thúc với việc cấp cf_clearance giống nhau, và phiên được quản lý xử lý việc chấm điểm thụ động giống như cách nó xử lý biến thể hộp kiểm.
H: Tôi có cần một proxy không?
Không. Đầu ra dân cư đã được tích hợp — thiết lập proxyCountry vào một khu vực hoặc ANY. Turnstile chấm điểm IP đầu ra, vì vậy một khu vực dân cư làm sạch đáng tin cậy hơn so với địa chỉ trung tâm dữ liệu.
H: Thách thức vẫn hiển thị trên một số trang — có gì giúp không?
Gán proxyCountry vào một khu vực dân cư và làm nóng phiên bằng cách tải trang chủ của trang web trước trong cùng một phiên trước trang được bảo vệ, để bề mặt hành vi đọc giống như một lần truy cập bình thường.
H: Mã Puppeteer hoặc Playwright của tôi có tương thích không?
Có. Trình duyệt Scraping hỗ trợ CDP, vì vậy puppeteer.connect() và chromium.connectOverCDP() vẫn hoạt động như cũ — bạn chỉ thay đổi URL kết nối.
H: Làm sạch Turnstile có hợp pháp không?
Truy cập dữ liệu công khai theo các điều khoản của trang web và luật pháp hiện hành. Các kỹ thuật này dành cho tự động hóa có ủy quyền, kiểm thử và nghiên cứu nơi bạn có sự cho phép.
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.



