Quay lại blog

Xử lý trang được bảo vệ bởi Cloudflare Turnstile với Scrapeless

Sophia Martinez
Sophia Martinez

Specialist in Anti-Bot Strategies

24-Sep-2026

TL;DR:

  • Cloudflare Turnstile và một Trang Thách Thức trung gian là những bề mặt khác nhau. Một widget biểu mẫu có thể xuất hiện trên một trang đã có thể truy cập.
  • Scrapeless Web Unlocker tài liệu hỗ trợ cho Turnstile và việc xử lý thách thức Cloudflare. Ứng dụng của bạn vẫn có trách nhiệm cho hoạt động sau bước đó.
  • Yêu cầu HTTP thành công không chứng minh rằng nội dung mục tiêu có thể sử dụng được. Cần yêu cầu các phần tử trang hoặc trạng thái kinh doanh xác định sự thành công cho nhiệm vụ của bạn.
  • Lấy HTML không xác lập rằng một biểu mẫu được bảo vệ đã được gửi thành công. Hãy coi truy cập nội dung, hoàn thành widget và chấp nhận ứng dụng là những kết quả riêng biệt.
  • Miễn phí để bắt đầu. Đánh giá một mục tiêu đã được phê duyệt với tín dụng có sẵn của tài khoản Scrapeless trước khi mở rộng khối lượng công việc.

Giới thiệu: Xác nhận trạng thái trang trước khi phân tích nó

Một trình thu thập thông tin có thể nhận HTML mà vẫn không có dữ liệu nhiệm vụ có thể sử dụng. Tài liệu có thể là một màn hình thử thách, một trang đăng nhập, hoặc một phản hồi ứng dụng mà chứa tiêu đề mong đợi nhưng không có thông tin được yêu cầu.

Turnstile thêm một sự phân biệt khác. Một trang có thể hiển thị nội dung thông thường trong khi một widget bảo vệ một hành động biểu mẫu cụ thể. Sự hiện diện của widget đó không có nghĩa là toàn bộ trang bị chặn, và việc lấy trang không chứng minh rằng một hành động được bảo vệ đã được chấp nhận.

Hướng dẫn này giải thích cách sử dụng đường dẫn Scrapeless Web Unlocker đã được ghi lại cho nội dung được bảo vệ bởi Cloudflare và cách xác thực những gì trở lại. Ví dụ đã xác thực là một mẫu tích hợp yêu cầu tài khoản của bạn và mục tiêu đã được phê duyệt; đây không phải là một tuyên bố về việc giải quyết Turnstile đã hoàn thành.

Turnstile và Các Trang Thách Thức yêu cầu các kiểm tra khác nhau

Turnstile là một cơ chế xác minh tích hợp, trong khi một Trang Thách Thức trung gian ngắt quyền truy cập vào tài nguyên được yêu cầu. Phân biệt hai điều này ngăn chặn một người thu thập thông tin áp dụng điều kiện thành công sai.

Trạng thái quan sát Những gì nó thiết lập Những gì nó không thiết lập
Nội dung trang như mong đợi có mặt Nội dung có thể được kiểm tra Một hành động biểu mẫu được bảo vệ đã thành công
Widget Turnstile có mặt Trang sử dụng một bước xác minh tích hợp Toàn bộ trang bị chặn
Trang Thách Thức thay thế mục tiêu Nội dung mục tiêu chưa có Phản hồi cuối cùng sẽ có thể sử dụng
Ứng dụng xác nhận hành động dự định Hành động đã đạt được kết quả ứng dụng của nó Sự cho phép cho các hành động không liên quan

Cloudflare phơi bày một tín hiệu phản hồi cho các thách thức trung gian: tiêu đề phản hồi Trang Thách Thức sử dụng cf-mitigated: challenge. Áp dụng tín hiệu đó vào phản hồi mục tiêu gốc khi có sẵn. Một dịch vụ được quản lý có thể trả về bao bì hoặc tiêu đề riêng; đừng giả định rằng một phản hồi API phơi bày mọi tiêu đề mục tiêu gốc.

Các dấu HTML có thể cung cấp bằng chứng hỗ trợ, nhưng chúng không phải là một phân loại phổ quát. Một bài viết kỹ thuật có thể đề cập đến một tập lệnh thách thức mà không bị chặn. Ngược lại, một trang có thể không tải nội dung dự định mà không chứa một dấu hiệu thách thức nhận dạng.

Những gì Scrapeless Web Unlocker xử lý

Scrapeless Web Unlocker tài liệu hỗ trợ tự động với việc xử lý Turnstile và Thách thức Cloudflare. Hành vi thách thức được hỗ trợ cũng chỉ định rằng các hoạt động tiếp theo vẫn là trách nhiệm của ứng dụng.

Thông tin truy cập Web Unlocker là sản phẩm duy nhất được sử dụng trong ví dụ dưới đây. Cấu hình kết xuất JavaScript của nó yêu cầu một kết quả được kết xuất bởi trình duyệt cho các trang cần thực thi mã. Bài viết này không chuyển đổi giữa các sản phẩm API không liên quan hoặc giả định rằng một điểm giải quyết mã token riêng biệt tồn tại.

Một phản hồi nội dung sạch là một kết quả hữu ích cho một nhiệm vụ trích xuất chỉ đọc. Một quy trình làm việc liên quan đến một biểu mẫu được bảo vệ cần xác nhận thêm cụ thể cho ứng dụng. Đừng coi sự xuất hiện của một token hoặc sự biến mất của một widget là bằng chứng đủ rằng một sự gửi đã thành công.

Các yêu cầu tiên quyết và một hợp đồng thành công cụ thể mục tiêu

Bạn cần Python, Requests, một khóa API Scrapeless hoạt động và một mục tiêu mà bạn được ủy quyền truy cập. Cài đặt phụ thuộc với python -m pip install requests và đặt SCRAPELESS_API_KEY trong môi trường thời gian chạy của bạn.

Đặt TARGET_URL cho trang đã được phê duyệt. Định nghĩa EXPECTED_TEXT là một cụm từ đặc trưng từ nội dung dự định của nó. Nếu bạn biết các dấu hiệu trung gian chính xác được sử dụng bởi mục tiêu đó, hãy đặt CHALLENGE_MARKERS thành một danh sách cách nhau bởi dấu phẩy. Giữ danh sách cụ thể cho mục tiêu và xem xét các kết quả mơ hồ.
Yêu cầu xác thực và kết quả thực tế của Turnstile vẫn là những điều kiện tiên quyết cho ví dụ này. Không có tuyên bố nào được đưa ra rằng mục tiêu đã được giải quyết, rằng mọi cấu hình Cloudflare đều được hỗ trợ, hoặc rằng mã hoàn thành các biểu mẫu được bảo vệ.

Trước khi thực hiện, hãy quyết định điều gì được coi là thành công. Đối với một trang tham khảo công khai, có thể đó là một tiêu đề cụ thể và phần nội dung. Đối với một trang sản phẩm, có thể đó là một định danh hợp lệ cộng với một giá có thể phân tích được. Tránh những cụm từ tổng quát có thể xuất hiện cả trong trang và thông điệp lỗi.

Bước 1: Yêu cầu Nội dung Đã được Hiển thị Thông qua Web Unlocker

Yêu cầu bên dưới sử dụng diễn viên Web Unlocker được tài liệu hóa và cấu hình hiển thị JavaScript. Lưu nó dưới dạng fetch_protected_page.py.

Lưu ý: Kịch bản này yêu cầu khóa API Scrapeless của bạn và mục tiêu đã được phê duyệt. Cuộc gọi xác thực và kết quả thử thách chưa được xác minh trong môi trường này. Chạy nó trên mục tiêu của bạn và kiểm tra thân thể được trả về trước khi dựa vào kết quả trích xuất.

python Copy
import hashlib
import json
import os
from pathlib import Path

import requests

url = os.environ["TARGET_URL"]
expected = os.environ["EXPECTED_TEXT"].casefold()
markers = [part.strip().casefold()
           for part in os.environ.get("CHALLENGE_MARKERS", "").split(",")
           if part.strip()]
response = requests.post(
    "https://api.scrapeless.com/api/v2/unlocker/request",
    headers={"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
    json={
        "actor": "unlocker.webunlocker",
        "input": {
            "url": url,
            "method": "GET",
            "redirect": False,
            "jsRender": {
                "enabled": True,
                "waitUntil": "domcontentloaded",
                "response": {"type": "html"},
            },
        },
        "proxy": {"country": "ANY"},
    },
    timeout=120,
)
response.raise_for_status()
body = response.text
Path("page-response.txt").write_text(body)
content_type = response.headers.get("content-type", "").lower()
if "text/html" not in content_type:
    outcome = "inspect_service_response"
elif any(marker in body.casefold() for marker in markers):
    outcome = "review_challenge_marker"
elif expected not in body.casefold():
    outcome = "expected_content_missing"
else:
    outcome = "content_candidate"
record = {
    "requested_url": url,
    "service_http_status": response.status_code,
    "content_type": content_type,
    "response_sha256": hashlib.sha256(response.content).hexdigest(),
    "outcome": outcome,
}
Path("page-observation.json").write_text(json.dumps(record, indent=2))
print(json.dumps(record))
if outcome != "content_candidate":
    raise SystemExit(1)

Các thiết lập đến từ hợp đồng yêu cầu Web Unlocker và cấu hình hiển thị JavaScript. Thời gian chờ của khách hàng là một thời gian tối đa đã được cấu hình, không phải là một tuyên bố về hiệu suất.

Ví dụ này coi phản hồi không phải HTML là một thứ để kiểm tra. Nó không đoán trường HTML lồng trong một phong bì phản hồi không xác định. Chỉ thích ứng trình phân tích sau khi kiểm tra kết quả thực tế được trả về cho tài khoản của bạn.

Bắt đầu Cạo bằng Scrapeless

Nâng cao quy trình làm việc cạo và tự động hóa web của bạn với Scrapeless!
Đăng ký ngay hôm nay và nhận 5 đô la tín dụng miễn phí — không yêu cầu thẻ tín dụng.

Nhận tín dụng miễn phí của bạn ngay bây giờ tại Bảng điều khiển Scrapeless.

Bước 2: Xác thực Nội dung, Không Chỉ Vận chuyển

Xác thực nội dung nên kiểm tra thông tin dự kiến của trang một cách độc lập với trạng thái yêu cầu. Mô hình trạng thái HTTP mô tả phản hồi ở mức giao thức; tiêu chí trích xuất của bạn xác định liệu nó có đáp ứng nhiệm vụ hay không.

Kịch bản báo cáo content_candidate, không phải là một thử thách đã được giải quyết. Tên đó là có chủ ý: một kiểm tra cụm từ chỉ là một bộ lọc ban đầu. Phân tích khu vực nội dung dự kiến, xác minh các trường cần thiết, và từ chối một trang lỗi mà tình cờ chứa một cụm từ phù hợp.

Nếu dấu đánh dấu thử thách đã được cấu hình xuất hiện, hãy kiểm tra phản hồi được lưu. Một sự trùng khớp có thể là một thông điệp thực tế hoặc một dương tính giả. Giữ lại sự phân biệt đó thay vì tự động xóa mọi trang đề cập đến Cloudflare.

Đối với một bản ghi trích xuất thành công, giữ lại URL mục tiêu, thời gian chụp, quy tắc xác thực đã sử dụng, và các trường đã chấp nhận. Tránh giữ lại cookie đầy đủ, thông tin xác thực yêu cầu, hoặc mã thông báo widget trong các nhật ký thông thường.

Bước 3: Giữ Các Hành Động Được Bảo Vệ Tách Biệt Khỏi Việc Lấy Trang

Một quy trình lấy trang nên dừng lại ở nội dung được chấp nhận trừ khi nhiệm vụ rõ ràng yêu cầu và ủy quyền một hành động khác. Đọc một trang công khai và hoàn thành một biểu mẫu tài khoản được bảo vệ có điều kiện thành công khác nhau.

Khi kiểm tra biểu mẫu của riêng bạn, xác minh phản hồi của ứng dụng sau khi gửi. Hoàn thành widget phía máy khách là một sự kiện trung gian. Xác thực phía máy chủ của trang và logic kinh doanh quyết định liệu hành động có được chấp nhận hay không.

Ví dụ Web Unlocker này không chuyển giao mã thông báo widget giữa các phiên không liên quan, cung cấp một bí mật của chủ sở hữu trang, hoặc khởi tạo một cuộc gọi gửi cụ thể cho ứng dụng. Nếu trường hợp sử dụng của bạn yêu cầu tương tác trình duyệt sau khi tải trang, hãy thiết kế và xác minh quy trình đó một cách riêng biệt bằng cách sử dụng giao diện sản phẩm được hỗ trợ.

Để có thông tin cơ bản về sự khác biệt giữa truy cập trang và một phiên trình duyệt liên tục, quy trình thử thách Cloudflare cung cấp bối cảnh liên quan. Xác minh giao diện sản phẩm hiện tại trước khi áp dụng mã từ một ví dụ cũ hơn.

Chẩn Đoán Tình Trạng Bạn Thực Sự Quan Sát

Một bản ghi chẩn đoán hữu ích xác định điều kiện thất bại mà không tuyên bố một nguyên nhân chưa được quan sát. Thiếu văn bản mong đợi có thể là kết quả từ một thông điệp trung gian, một trang đã thay đổi, một chuyển hướng, hoặc một giả định của trình phân tích.

Quan sát Bước chẩn đoán tiếp theo Bằng chứng thành công
Phản hồi không phải là HTML Kiểm tra hình dạng phản hồi dịch vụ được tài liệu hóa Đường dẫn trích xuất được xác minh cho loại phản hồi được trả về
Dấu hiệu thách thức đã biết xuất hiện Đọc thân thể đã chụp trong ngữ cảnh Nội dung dự kiến có mặt và được chấp nhận
Cụm từ mong đợi vắng mặt Kiểm tra mục tiêu, hành vi chuyển hướng và cấu trúc trang Khu vực nội dung cần thiết phù hợp với nhiệm vụ
Widget tồn tại bên cạnh nội dung thông thường Quyết định xem nhiệm vụ có cần hành động được bảo vệ hay không Đọc nhiệm vụ hoàn thành, hoặc hành động được ủy quyền được xác minh riêng biệt
Trình phân tích trả về các trường phần So sánh các giả định của trình phân tích với đánh dấu hiện tại Các trường cần thiết xác thực với trang

Giữ các bài kiểm tra ngắn gọn và tránh mở rộng phạm vi mục tiêu một cách tự động. Giới hạn khởi đầu ba nhân viên mỗi máy chủ là một cài đặt ứng dụng bảo thủ, và các giới hạn mục tiêu hoặc tài khoản nghiêm ngặt hơn sẽ được ưu tiên.

Chính sách truy cập vẫn còn liên quan ngay cả khi nội dung về mặt kỹ thuật có thể tiếp cận. Giao thức Loại trừ Robots diễn đạt hướng dẫn cho trình thu thập dữ liệu; nó không thay thế cho ủy quyền hoặc xác định mọi cách sử dụng được phép của dữ liệu thu thập.

Trước khi triển khai quy trình làm việc, đo lường nội dung được chấp nhận trên mục tiêu thực tế của bạn và so sánh việc sử dụng dịch vụ với bảng giá Scrapeless. Không công bố tỷ lệ giải quyết chung dựa trên một trang đơn hoặc môi trường trình diễn.

Kết luận: Định nghĩa Thành công ở lớp Ứng dụng

Xử lý một trang được bảo vệ bởi Cloudflare cần một lối đi truy cập hỗ trợ và một kiểm tra rằng nội dung dự kiến thực sự có sẵn. Các widget Turnstile, thách thức ngắt quãng, và các đơn ứng dụng nên giữ các trạng thái khác nhau trong kiểm tra đó.

Sử dụng yêu cầu Web Unlocker đã được tài liệu hóa làm điểm khởi đầu, chạy nó trên một mục tiêu đã được phê duyệt và kiểm tra kết quả trước khi bật việc trích xuất phía dưới. Hồ sơ chấp nhận nên mô tả thông tin thu được, không chỉ là thực tế rằng một yêu cầu HTTP đã hoàn thành.

Sẵn sàng Xây dựng Ống dẫn Dữ liệu Web của Bạn?

Tham gia cùng các nhà phát triển đang làm việc về thu thập dữ liệu web trong Discord và Telegram.

Tạo một tài khoản Scrapeless và điều chỉnh quy trình làm việc cho các nguồn dữ liệu được phê duyệt của riêng bạn.

Câu hỏi thường gặp

H: Web Unlocker của Scrapeless có xử lý được Cloudflare Turnstile không?

Web Unlocker tài liệu giúp đỡ với việc xử lý Turnstile và Thách thức Cloudflare. Tính khả thi và kết quả cuối cùng phải được xác thực trên mục tiêu đã được ủy quyền của bạn; các hoạt động tiếp theo vẫn là trách nhiệm của ứng dụng của bạn.

H: Phản hồi HTTP 200 có nghĩa là Turnstile đã được giải quyết không?

Không. Một phản hồi có thể chứa một trang trung gian hoặc nội dung không liên quan đến nhiệm vụ. Kiểm tra trạng thái trả về và nội dung cần thiết.

H: Mỗi trang có widget Turnstile có chặn việc đọc không?

Không. Một widget nhúng có thể bảo vệ một hành động cụ thể trong khi phần còn lại của trang vẫn hiển thị. Khớp kiểm tra với nhiệm vụ bạn đang thực hiện.

H: Có cần thêm một proxy trình duyệt riêng cho ví dụ này không?

Không khởi động trình duyệt địa phương. Sử dụng các tùy chọn proxy đã được tài liệu hóa trong yêu cầu Web Unlocker và xác thực hành vi truy cập kết quả trên mục tiêu.

H: Nếu mục tiêu thay đổi HTML thì sao?

Kiểm tra lại quy tắc nội dung mong đợi và bất kỳ bộ chọn nào đã được sử dụng phía dưới. Một dịch vụ xử lý thách thức không xác định các trường trên trang mà ứng dụng của bạn coi là hợp lệ.

H: Có thể chạy điều này mà không có đại lý AI không?

Có. Yêu cầu Python và các kiểm tra nội dung là xác định và không yêu cầu mô hình ngôn ngữ.

H: Việc xử lý thách thức có nghĩa là được phép thu thập bất kỳ dữ liệu nào được bảo vệ không?

Không. Sử dụng quy trình làm việc chỉ trong phạm vi truy cập và việc sử dụng dữ liệu mà bạn được phép thực hiện, và xem xét các điều khoản trang web liên quan và các yêu cầu áp dụng.

H: Ví dụ có thể gửi một biểu mẫu được bảo vệ không?

Không. Ví dụ này thu thập và kiểm tra nội dung. Một quy trình làm việc biểu mẫu yêu cầu hành vi ứng dụng được thực hiện và xác thực riêng biệt.

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.

Bài viết phổ biến nhất

Danh mục