
Anh Tuan
Data Science Expert
Đã xuất bản Sep 21, 2026
Đã cập nhật Sep 21, 2026 · đọc tối thiểu

Dịch vụ Container (CaaS) cung cấp một cách quản lý để triển khai, chạy và mở rộng các công nhân được đóng gói trong container. Đối với quét dữ liệu web, điều này thường có nghĩa là đóng gói một trình duyệt hoặc công nhân HTTP một lần, cung cấp cho nó các nhiệm vụ từ hàng đợi, và tăng số lượng công nhân khi nhu cầu thay đổi. Môi trường chạy trở nên lặp lại, trong khi nền tảng xử lý phần lớn công việc lập lịch, kiểm tra sức khỏe và quản lý vòng đời.
Định nghĩa này có một ranh giới quan trọng: CaaS mở rộng việc thực thi, không phải tính chính xác. Một trăm container khỏe mạnh vẫn có thể trả về một trăm trang thử thách, trùng lặp cùng một lần gửi, hoặc phân tích tài liệu lỗi như dữ liệu sản phẩm. Do đó, thiết kế cần có hợp đồng nhiệm vụ ổn định, mô hình trạng thái trình duyệt, đường đi thách thức có giới hạn và bộ xác minh sau khi trích xuất.
Khi quy trình được ủy quyền đạt đến bước xác minh được hỗ trợ, CapSolver có thể cung cấp nhiệm vụ giải quyết được tài liệu hóa trong khi công nhân vẫn chịu trách nhiệm về liên tục phiên, thời hạn, ứng dụng kết quả và kiểm tra trạng thái kinh doanh cuối cùng.
Một quy trình quét dữ liệu web dựa trên CaaS đáng tin cậy tách biệt giữa điều phối và truy cập web. Mỗi giai đoạn có trách nhiệm nhỏ và phát sinh kết quả có kiểu thay vì cờ thành công mơ hồ.
| Giai đoạn | Đầu vào | Hoạt động | Đầu ra | Điều kiện dừng |
|---|---|---|---|---|
| Bộ phân công | URL được ủy quyền và chính sách | Tạo nhiệm vụ không thay đổi | ID nhiệm vụ và thời hạn | Phạm vi không hợp lệ hoặc thời hạn đã hết |
| Hàng đợi | Bản ghi nhiệm vụ | Giao nhiệm vụ cho một công nhân | Người sở hữu nhiệm vụ và lần thử | Không thể cấp phép nhiệm vụ |
| Công nhân trình duyệt | Nhiệm vụ cùng tham chiếu phiên | Điều hướng và quan sát | Bằng chứng trang và phân loại | Hết thời gian điều hướng hoặc ngân sách chính sách |
| Người xử lý thách thức | Bản ghi thách thức phù hợp | Chạy luồng nhiệm vụ được tài liệu hóa | Kết quả giải quyết có kiểu | Loại không hỗ trợ hoặc giới hạn lần thử |
| Trình trích xuất | Bằng chứng trang được chấp nhận | Phân tích các trường cần thiết | Bản ghi có cấu trúc | Các trường cần thiết thiếu |
| Bộ xác minh | Bản ghi có cấu trúc và bằng chứng | Kiểm tra cấu trúc và quy tắc kinh doanh | Bản ghi được chấp nhận hoặc từ chối | Thất bại xác minh |
Sự phân chia này cũng làm cho việc mở rộng tự động an toàn hơn. Bộ điều phối có thể thêm công nhân mà không cần cấp quyền cho mỗi công nhân thay đổi phạm vi, tạo nhiệm vụ thử thách không giới hạn hoặc ghi trực tiếp vào hệ thống đầu ra.
Một công nhân trình duyệt được đóng gói cần có hợp đồng nhiệm vụ bền vững trước khi cần bộ mở rộng tự động. Tối thiểu, lưu trữ ID nhiệm vụ, mục tiêu được ủy quyền, phiên bản chính sách, thời gian tạo, thời hạn tuyệt đối, tham chiếu phiên, giai đoạn hiện tại, số lần thử và khóa không thay đổi bên ngoài container.
Hợp đồng nên đưa ra ba quyết định rõ ràng:
Các container là dễ bị xóa. Cookie, tham chiếu trạng thái lưu trữ, hình ảnh chụp màn hình, nhật ký và lịch sử nhiệm vụ không phải. Lưu trữ các yếu tố này trong hệ thống bền vững được phê duyệt và truyền tham chiếu qua hàng đợi. Playwright ghi chú rằng các ngữ cảnh trình duyệt tách biệt cookie, lưu trữ cục bộ và các trạng thái khác, điều này khiến một ngữ cảnh cho mỗi nhiệm vụ được cấp phép là mặc định hữu ích. Nếu quy trình cố ý tái sử dụng xác thực, bảo vệ trạng thái lưu trữ như tài khoản và không bao giờ đóng gói nó vào hình ảnh.
Một công nhân trình duyệt nên xử lý một nhiệm vụ được cấp phép tại một thời điểm và đóng ngữ cảnh trình duyệt trước khi xác nhận thông điệp hàng đợi. Điều này giữ cho quyền sở hữu phiên rõ ràng và ngăn cookie hoặc trạng thái trong bộ nhớ rò rỉ giữa các công việc không liên quan.
Hình ảnh nên chứa chỉ runtime, phụ thuộc trình duyệt, mã công nhân và các cài đặt mặc định không nhạy cảm. Chèn khóa API và thông tin xác thực lưu trữ tại thời điểm chạy từ bộ quản lý bí mật của nền tảng. Cố định phiên bản trình duyệt và thư viện, sau đó xây dựng lại thông qua phát hành được kiểm soát thay vì cài đặt các gói bất kỳ khi nhiệm vụ bắt đầu.
Sử dụng ba tín hiệu sức khỏe:
Không xem điều tra sức khỏe thành công là bằng chứng cho thấy nhiệm vụ trang web thành công. Sức khỏe mô tả quy trình công nhân; bằng chứng nhiệm vụ mô tả quy trình web.
Phân loại trang nên chạy trước bất kỳ trình phân tích nào hoặc ghi đầu ra. Trạng thái HTTP đơn lẻ không đủ vì một phản hồi có thể trả về 200 trong khi hiển thị biểu mẫu đăng nhập, trang thử thách, màn hình đồng ý hoặc lỗi ứng dụng.
Thu thập một tập hợp bằng chứng có giới hạn từ cùng một ngữ cảnh trình duyệt: URL cuối, trạng thái phản hồi, tiêu đề tài liệu, các điểm đánh dấu DOM được chọn, tham chiếu hình ảnh chụp màn hình, lỗi bảng điều khiển và sự hiện diện của trường bắt buộc. Chuyển nhiệm vụ đến một trong số một tập hợp nhỏ các trạng thái như ready, challenge, authentication_required, retryable_error, terminal_error, hoặc review_required.
Lớp phân loại không nên đoán cách giải quyết mọi chướng ngại vật. Nó chỉ xác định trạng thái quan sát được và truyền bản ghi có kiểu đến thành phần tiếp theo được ủy quyền. Đây là cùng sự tách biệt được mô tả trong hướng dẫn của CapSolver về các lớp cơ sở hạ tầng tự động hóa web cho các đại diện AI: runtime trình duyệt sở hữu phiên và bằng chứng, trong khi xử lý thách thức là một lớp được kiểm soát.
Xử lý CAPTCHA nên là nhánh tùy chọn, không phải vòng lặp thử lại chung. Công nhân trước tiên kiểm tra xem mục tiêu và thách thức có nằm trong chính sách được phê duyệt, loại nhiệm vụ được hỗ trợ, phiên trình duyệt vẫn hợp lệ và còn thời gian trước thời hạn tuyệt đối.
Luồng CapSolver được tài liệu hóa sử dụng createTask để tạo nhiệm vụ được hỗ trợ và getTaskResult để nhận kết quả bất đồng bộ. Xem lại luồng createTask và lấy kết quả để biết các trường yêu cầu và quy tắc loại nhiệm vụ hiện tại. Giữ ID nhiệm vụ trả về trong trạng thái bền vững để công nhân khởi động lại có thể kiểm tra nhiệm vụ đã biết thay vì tạo một nhiệm vụ khác.
Sử dụng ngân sách tồn tại sau khi khởi động lại:
Nếu loại thách thức không được hỗ trợ, phiên thay đổi, thời hạn hết hạn hoặc ứng dụng từ chối kết quả, trả về trạng thái kết thúc hoặc xem xét lại. Không để bộ mở rộng tự động biến một nhiệm vụ bị chặn thành nhiều lần thử giải quyết trùng lặp.
Rút thưởng mã giảm giá CapSolver
Tăng ngân sách tự động hóa ngay lập tức!
Sử dụng mã giảm giá CAP26 khi nạp tiền vào tài khoản CapSolver để nhận thêm 5% tiền thưởng cho mỗi lần nạp — không giới hạn.
Rút thưởng ngay bây giờ trong Bảng điều khiển CapSolver
Trích xuất nên bắt đầu chỉ sau khi phân loại trang trả về ready. Phân tích lược đồ nhỏ nhất được yêu cầu bởi nhiệm vụ kinh doanh, sau đó xác minh kiểu, trường bắt buộc, độ mới, tính duy nhất và tính nhất quán nguồn trước khi ghi đầu ra.
Giữ một bao bằng chứng gọn gàng với mỗi bản ghi:
{
"task_id": "task-20260921-0042",
"final_url": "https://example.test/catalog/42",
"observed_at": "2026-09-21T02:30:00Z",
"page_state": "ready",
"session_ref": "session://browser/task-20260921-0042",
"required_fields_present": true,
"artifact_refs": ["screenshot://task-20260921-0042/final"]
}
Bao này là minh họa, nhưng mục đích là cụ thể: các hệ thống đầu ra có thể phân biệt bằng chứng trang mới từ bộ nhớ đệm cũ, đầu ra trình phân tích từ quan sát trình duyệt và dữ liệu được chấp nhận từ thành công giả. Việc lưu trữ nên ngắn và được quy định bởi chính sách, đặc biệt khi hình ảnh chụp màn hình hoặc trạng thái trình duyệt có thể chứa thông tin cá nhân hoặc bí mật.
Mở rộng CaaS nên phản hồi với công việc, không chỉ dựa vào việc sử dụng quá trình. Công nhân trình duyệt thường chờ đợi điều hướng, hiển thị, hàng đợi hoặc API bên ngoài, vì vậy CPU có thể thấp trong khi độ trễ nhiệm vụ tăng.
Các đầu vào hữu ích bao gồm số lượng nhiệm vụ đang chờ, tuổi của nhiệm vụ sẵn sàng lâu nhất, thời gian chờ đợi cấp phép, thời gian nhiệm vụ trung bình và số lượng công nhân trong mỗi trạng thái có kiểu. Kubernetes ghi chú rằng HorizontalPodAutoscaler có thể sử dụng các chỉ số tùy chỉnh, điều này phù hợp hơn cho công việc trình duyệt dựa trên hàng đợi thay vì chỉ dựa vào CPU. Kubernetes cũng cung cấp Jobs cho các nhiệm vụ hữu hạn chạy đến khi hoàn thành, mặc dù một người tiêu dùng hàng đợi liên tục có thể hiệu quả hơn khi khởi động trình duyệt tốn kém.
Thiết lập các giới hạn cứng cho số lượng công nhân, độ đồng thời theo miền, tổng số nhiệm vụ thử thách và ghi đầu ra. Khi mục tiêu bắt đầu trả về nhiều trạng thái thử thách hoặc từ chối, giảm hoặc tạm dừng công việc thay vì mở rộng vào thất bại. Một hàng đợi tăng có thể là tín hiệu dung lượng; tỷ lệ thử thách tăng là tín hiệu chẩn đoán.
Hàm Python sau mô hình lớp quyết định mà không liên hệ với mục tiêu hoặc giải quyết CAPTCHA. Nó chấp nhận trạng thái trang quan sát được và ngân sách nhiệm vụ bền vững, sau đó trả về hành động tiếp theo.
from dataclasses import dataclass
from enum import Enum
class NextAction(str, Enum):
EXTRACT = "extract"
HANDLE_CHALLENGE = "handle_challenge"
RETRY = "retry"
REVIEW = "review"
STOP = "stop"
@dataclass(frozen=True)
class Budget:
attempts: int
max_attempts: int
seconds_remaining: int
session_matches: bool
challenge_allowed: bool
def decide(page_state: str, budget: Budget) -> NextAction:
if budget.seconds_remaining <= 0:
return NextAction.STOP
if page_state == "ready":
return NextAction.EXTRACT
if page_state == "challenge":
if not budget.challenge_allowed or not budget.session_matches:
return NextAction.REVIEW
if budget.attempts >= budget.max_attempts:
return NextAction.STOP
return NextAction.HANDLE_CHALLENGE
if page_state == "retryable_error":
return NextAction.RETRY if budget.attempts < budget.max_attempts else NextAction.STOP
if page_state in {"authentication_required", "review_required"}:
return NextAction.REVIEW
return NextAction.STOP
Các bài kiểm tra địa phương bao gồm trang sẵn sàng, thách thức phù hợp, phiên thay đổi, thời hạn hết hạn, thử lại hết hạn, trạng thái xem xét lại và đầu vào không xác định. Mô hình quyết định được cố ý nhỏ để bộ điều phối có thể ghi và kiểm toán mọi chuyển tiếp.
Các chỉ số hữu ích kết nối hành vi cơ sở hạ tầng với kết quả trang. Theo dõi tuổi hàng đợi và mức độ bão hòa công nhân, nhưng cũng ghi lại tỷ lệ thử thách, tỷ lệ yêu cầu xác thực, tỷ lệ từ chối của trình phân tích, tỷ lệ nhiệm vụ trùng lặp, thời hạn hết hạn và chấp nhận trạng thái kinh doanh cuối cùng.
Sử dụng ID liên kết trên thông điệp hàng đợi, nhật ký trình duyệt, nhiệm vụ thử thách, bản ghi trích xuất và ghi đầu ra. Các bản ghi nên che khóa API, cookie, token và dữ liệu cá nhân. Một hình ảnh chụp màn hình là bằng chứng, không phải bản ghi vĩnh viễn; chỉ giữ lại những gì được yêu cầu bởi trường hợp sử dụng được ủy quyền.
Cảnh báo về tỷ lệ thay vì các thất bại riêng lẻ. Một thử thách có thể bình thường. Tăng nhanh cho cùng một mục tiêu, tuyến đường hoặc phiên trình duyệt có thể chỉ ra thay đổi trang, lỗi phiên, xác thực hết hạn, vấn đề chính sách hoặc lỗi phát hành. Tạm dừng phần bị ảnh hưởng trong khi phần còn lại hàng đợi tiếp tục.
Quy mô container không mở rộng quyền. Sử dụng kiến trúc này chỉ cho các quy trình dữ liệu công khai, được ủy quyền hoặc hợp pháp khác. Tôn trọng điều khoản mục tiêu, giới hạn tốc độ, nghĩa vụ bảo mật, thẩm quyền và yêu cầu giảm thiểu dữ liệu.
Không gửi trang riêng tư, dữ liệu tài khoản hoặc hình ảnh chụp màn hình nhạy cảm đến hệ thống bên ngoài trừ khi quy trình được phê duyệt rõ ràng cho dữ liệu đó. Tách biệt quy trình đăng nhập và xác định danh tính khỏi các nhiệm vụ dữ liệu công khai thông thường. Yêu cầu xem xét của con người trước khi nộp dữ liệu nhạy cảm, hành động không thể đảo ngược hoặc thay đổi phạm vi.
Dịch vụ Container làm cho các công nhân trình duyệt lặp lại và mở rộng được, nhưng độ tin cậy sản xuất đến từ các hợp đồng xung quanh các công nhân đó. Gán mỗi nhiệm vụ một người sở hữu, một phiên tách biệt, một thời hạn bền vững, một máy trạng thái có kiểu và một đầu ra được xác minh. Mở rộng khi hàng đợi cho thấy nhu cầu lành mạnh; dừng lại khi bằng chứng cho thấy từ chối lặp lại hoặc trạng thái không chắc chắn.
Đối với các quy trình được ủy quyền có các bước xác minh được hỗ trợ, CapSolver có thể được đặt sau cổng xác thực trong khi ứng dụng của bạn bảo tồn ngữ cảnh trình duyệt và xác minh kết quả cuối cùng.
Bắt đầu với một mục tiêu được phê duyệt và một người lao động bị giới hạn. Ghi lại phân loại trang, điều kiện đủ điều kiện thách thức, thời gian đã trôi qua, sự chấp nhận cuối cùng và tham chiếu bằng chứng trước khi tăng độ đồng thời. Sử dụng tài liệu CapSolver để chọn luồng nhiệm vụ hiện tại đã được tài liệu hóa, sau đó xem lại kết quả trong phiên trình duyệt ban đầu.
Câu hỏi: Dịch vụ Container có giải quyết các vấn đề truy cập website không?
Không. CaaS triển khai và mở rộng các ứng dụng được đóng gói trong container, trong khi lớp truy cập của bạn vẫn cần trạng thái trình duyệt, định tuyến, phân loại thách thức, kiểm soát chính sách và xác minh kết quả.
Câu hỏi: Mỗi URL có nên chạy trong một container riêng biệt không?
Không nhất thiết. Một ngữ cảnh trình duyệt tách biệt cho mỗi nhiệm vụ được thuê thường là ranh giới quan trọng; một container người lao động có thể xử lý các nhiệm vụ theo trình tự nếu nó đóng mỗi ngữ cảnh, xóa bộ nhớ nhiệm vụ và chỉ xác nhận sau khi trạng thái bền vững được ghi lại.
Câu hỏi: Chỉ số nào nên được mở rộng để điều chỉnh số lượng người lao động trình duyệt?
Độ sâu hàng đợi và tuổi nhiệm vụ thường là các tín hiệu chính mạnh hơn CPU riêng lẻ. Kết hợp chúng với giới hạn người lao động, độ đồng thời cấp mục tiêu, tỷ lệ thách thức và thời hạn hết hạn để nền tảng không mở rộng quy trình thất bại.
Câu hỏi: Một người lao động được khởi động lại nên xử lý một nhiệm vụ CAPTCHA hiện có như thế nào?
Người lao động được khởi động lại nên tải ID nhiệm vụ nhà cung cấp bền vững, thời hạn ban đầu, số lần thử và tham chiếu phiên. Nó nên kiểm tra nhiệm vụ đã biết chỉ khi phiên vẫn khớp và ngân sách còn lại cho phép; nếu không, nó nên dừng lại hoặc yêu cầu xem xét lại.
Câu hỏi: Mẫu này có thể được sử dụng cho dữ liệu riêng tư hoặc bị hạn chế không?
Khả năng kỹ thuật không cấp phép thu thập dữ liệu riêng tư, bị hạn chế, cá nhân hoặc nhạy cảm. Sử dụng mẫu này chỉ trong phạm vi được phê duyệt và áp dụng các điều khoản của mục tiêu, luật pháp áp dụng, giảm thiểu dữ liệu, kiểm soát lưu trữ và yêu cầu xem xét của con người.

Anh Tuan
Data Science Expert
Turning task outcomes into actionable insights.
GIỚI THIỆU TÁC GIẢ
Học kiến trúc gỡ mã web Rust có thể mở rộng với reqwest, scraper, gỡ mã bất đồng bộ, gỡ mã trình duyệt không đầu, xoay proxy và xử lý CAPTCHA tuân thủ.

Tự động hóa việc giải CAPTCHA với Nanobot và CapSolver. Sử dụng Playwright để giải reCAPTCHA và Cloudflare tự động.
