CAPSOLVER
Blog
Cách Thêm Trình Giải CAPTCHA vào Trình Duyệt Steel Tự Lưu Trữ

Cách Thêm Trình Giải CAPTCHA vào Trình Duyệt Steel Tự Lưu Trữ

Logo of CapSolver

Anh Tuan

How to use CapSolver

23-Oct-2026

Tóm tắt nhanh

  • Steel Local cung cấp phiên trình duyệt, nhưng bảng tính năng chính thức không liệt kê khả năng tự động giải CAPTCHA tích hợp.
  • Kết nối Python tới WebSocket URL do Steel tự host trả về, sau đó truyền trang Playwright hiện tại vào SDK CAPTCHA.
  • Ví dụ bên dưới được chạy với một server Steel cục bộ thật và đọc tham số reCAPTCHA v2 từ một trang phát triển.
  • Việc phát hiện tham số không cần khóa API CapSolver; giải CAPTCHA trả phí cần thông tin xác thực của bạn và không được kiểm thử trong ví dụ này.
  • Giữ phiên trình duyệt sống xuyên suốt bước CAPTCHA, kiểm tra kết quả phía ứng dụng, rồi giải phóng phiên sau đó.

Một trình duyệt tự host có thể điều hướng đến đúng trang nhưng vẫn để quy trình của bạn “mắc kẹt” tại CAPTCHA. Nếu bạn chạy Steel cục bộ, chỉ thêm cờ giải CAPTCHA của dịch vụ cloud là chưa đủ: bản local và bản cloud có khả năng khác nhau.

Hướng dẫn này cho thấy bước giải CAPTCHA nằm ở đâu trong Steel Browser tự host, với một kiểm tra kết nối Python nhỏ. Ví dụ dùng một trang phát triển cục bộ và public test key reCAPTCHA của Google. Nó không nhắm vào website bên thứ ba và không yêu cầu mô hình AI.

Steel Browser làm gì và bước giải CAPTCHA nằm ở đâu

Steel Browser là một API trình duyệt cho lập trình viên xây agent web và ứng dụng tự động hóa. Nó quản lý một phiên trình duyệt mà client điều khiển được bằng các công cụ quen thuộc. Repo Steel chính thức mô tả cách tự host và cách kết nối từ Playwright, Puppeteer và Selenium.

Với một lập trình viên đang vận hành quy trình form đã được cấp quyền, việc phân chia công việc khá rõ ràng. Steel cung cấp trình duyệt. Playwright điều hướng và tương tác với trang. Trình giải CAPTCHA xử lý thử thách được hỗ trợ khi nó xuất hiện. Quy trình của bạn sau đó kiểm tra xem ứng dụng có chấp nhận hành động dự định hay không.

Hướng dẫn này dùng CapSolver Core SDK cho bước CAPTCHA. SDK có thể kiểm tra một trang Playwright và cung cấp một thao tác giải riêng. Không cần thêm LLM chỉ để nối các thành phần này.

Kịch bản hữu ích là một job trình duyệt tự host vốn đã cần bước CAPTCHA. Với việc test định kỳ phần mềm do bạn sở hữu, chế độ test của nhà cung cấp CAPTCHA có thể là đủ. Chỉ dùng đường giải CAPTCHA khi workflow được cấp quyền thực sự cần, thay vì để mọi điều hướng trình duyệt đều phụ thuộc vào một request trả phí.

Vì sao Steel Local cần bước CAPTCHA riêng

Steel Local không bao gồm khả năng giải CAPTCHA tích hợp của sản phẩm cloud. Bảng so sánh local–cloud của Steel nêu rõ sự khác biệt giữa hai kiểu triển khai.

Khác biệt đó tác động đến cách triển khai. Hướng dẫn cloud có thể bật giải CAPTCHA ngay lúc tạo session, còn tích hợp tự host phải tự bổ sung thao tác bị thiếu. Đừng cho rằng một trường cấu hình cloud sẽ kích hoạt được tính năng tương ứng trên server local.

Luồng được dùng ở đây:

  1. Tạo một session trên Steel instance cục bộ của bạn.
  2. Đọc websocketUrl của session đó.
  3. Kết nối Playwright tới trình duyệt mà Steel đang quản lý.
  4. Truyền một page trong session đó vào SDK CAPTCHA.
  5. Chỉ tiếp tục workflow ứng dụng sau khi đã kiểm tra kết quả.
  6. Giải phóng session Steel.

Tránh khởi chạy một trình duyệt khác ở bước ba. Trình duyệt thứ hai sẽ không phải session do Steel trả về, khiến bạn dễ kiểm tra một trang trong khi job thật đang chờ ở trang khác.

Chuẩn bị server local và môi trường Python

Bắt đầu với một Steel Local chạy độc lập và Python 3.12. Thiết lập đã kiểm chứng dùng Steel API 0.5.3 tại revision repo 8362bbd, Playwright 1.64.0 và capsolver-core 0.1.1 trên macOS.

Làm theo hướng dẫn thiết lập local của repo cho môi trường của bạn. Với server chạy từ source dùng ở đây, API được khởi động với HOST=127.0.0.1, PORT=3300 và CDP_REDIRECT_PORT=9323. Đây là lựa chọn port cho môi trường test, không phải mặc định bắt buộc. Giữ API phát triển chỉ cho client dự kiến truy cập.

Cài đặt dependency Python trong một môi trường tách biệt:

bash Copy
python -m pip install "playwright==1.64.0" "capsolver-core==0.1.1" "httpx==0.28.1"

Steel khởi chạy trình duyệt, nên client này không mở thêm instance Chromium khác. Phương thức kết nối CDP của Playwright đính kèm vào một trình duyệt nền Chromium đã có sẵn và lộ ra default context của nó.

Client cũng cần truy cập được địa chỉ WebSocket trả về. Nếu Steel chạy trong container hoặc trên máy khác, hãy xác nhận địa chỉ đó truy cập được từ Python; 127.0.0.1 là máy thực hiện kết nối.

Kiểm tra phát hiện bên dưới không cần thông tin CapSolver. Giải CAPTCHA thực tế cần API key hợp lệ và tài nguyên tài khoản của bạn. Giải trả phí, điền lại token và việc ứng dụng chấp nhận không được thực thi trong hướng dẫn này. Hãy giữ bước kiểm chứng riêng đó trong checklist triển khai của bạn.

Kết nối Steel với SDK và kiểm tra widget phát triển

Script tạo một Steel session thật, kết nối tới trình duyệt của nó và đọc một widget phát triển bằng SDK chính thức. Lưu lại thành steel_sdk_check.py và chạy bằng Python.

Ví dụ mặc định dùng server local port 3300. Đặt STEEL_URL nếu server của bạn dùng địa chỉ khác. Hãy dùng instance riêng: việc tạo và giải phóng session sẽ thay đổi session trình duyệt đang hoạt động của instance đó.

Trang được cung cấp qua route của Playwright, nên không cần web server thật trên port 8765. Script widget của Google vẫn cần truy cập mạng. Public site key này được ghi trong tài liệu test reCAPTCHA của Google và chỉ dành cho phát triển, không cho production.

python Copy
import asyncio
import json
import os

import httpx
from capsolver_core import create_capsolver
from playwright.async_api import async_playwright

STEEL_URL = os.environ.get("STEEL_URL", "http://127.0.0.1:3300")
TEST_URL = "http://127.0.0.1:8765/"
HTML = """<!doctype html><html><head><title>Steel CAPTCHA check</title></head>
<body><h1>Owned development page</h1>
<div class="g-recaptcha" data-sitekey="6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI"></div>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</body></html>"""


async def main():
    async with httpx.AsyncClient(base_url=STEEL_URL, timeout=90) as api:
        response = await api.post("/v1/sessions", json={"headless": True})
        response.raise_for_status()
        session = response.json()
        try:
            async with async_playwright() as playwright:
                browser = await playwright.chromium.connect_over_cdp(session["websocketUrl"])
                try:
                    context = browser.contexts[0]
                    page = await context.new_page()
                    await page.route(TEST_URL, lambda route: route.fulfill(
                        content_type="text/html", body=HTML))
                    await page.goto(TEST_URL)
                    await page.wait_for_function(
                        "() => !!window.___grecaptcha_cfg && "
                        "Object.keys(window.___grecaptcha_cfg.clients || {}).length > 0",
                        timeout=30000)
                    async with create_capsolver() as cap:
                        infos = await cap.get_captcha_info(page)
                    result = [{"type": info.type.value,
                               "url": info.website_url,
                               "site_key": info.website_key} for info in infos]
                    print(json.dumps({"session_id": session["id"],
                                      "captcha_parameters": result}))
                    assert result and result[0]["type"] == "reCaptchaV2"
                finally:
                    await browser.close()
        finally:
            released = await api.post(f"/v1/sessions/{session['id']}/release")
            released.raise_for_status()
            print(json.dumps({"released": released.json().get("success")}))


if __name__ == "__main__":
    asyncio.run(main())

Lần chạy kiểm tra trả về một descriptor reCaptchaV2 với URL trang local và public test site key. Phản hồi release cuối cùng trả về true. Những quan sát này xác thực session Steel thật, kết nối CDP, truy cập page và đường đọc tham số của SDK.

Chúng không chứng minh rằng một CAPTCHA trả phí đã được giải. Development key không phải thử thách production, và script cố ý không yêu cầu token solution.

Mã giữ page trong context trình duyệt hiện có của Steel. Phần dọn dẹp đóng kết nối client và yêu cầu server giải phóng session ngay cả khi việc phát hiện thất bại. Nếu bạn chỉnh sửa nó cho dịch vụ dùng chung, hãy giao một thành phần chịu trách nhiệm vòng đời session thay vì để các job không liên quan giải phóng công việc của nhau.

Thêm bước giải trên cùng trang hiện tại

Thêm lời gọi giải sau khi trang ứng dụng đã được cấp quyền của bạn tải CAPTCHA được hỗ trợ, trong khi kết nối trình duyệt và client SDK vẫn đang mở. Thay fixture phát triển cục bộ bằng workflow ứng dụng của bạn; đừng dùng test key làm input production.

Tạo client SDK với tùy chọn api_key theo tài liệu, nạp thông tin xác thực từ cấu hình bí mật đã được phê duyệt. CapSolver xử lý yêu cầu thử thách; Steel tiếp tục sở hữu phiên trình duyệt.

Dòng sau là lời gọi official browser-mode không đổi. Nó yêu cầu API key đã cấu hình, và việc thực thi trả phí qua kết nối Steel này không được kiểm thử trong hướng dẫn:

python Copy
results = await cap.solve_on_page(page)

Giữ lời gọi bên trong context client còn sống. Đặt nó sau phần dọn dẹp của ví dụ sẽ tham chiếu tới trình duyệt và client đã đóng.

Kiểm tra từng kết quả trả về trước khi tiếp tục. SDK trả về error, một solution có thể có và trạng thái điền ngược thông qua filled. Kết quả rỗng hoặc thiếu solution không phải bằng chứng rằng ứng dụng của bạn đã vượt qua CAPTCHA.

Chế độ token của Core SDK hỗ trợ reCAPTCHA v2/v3 và Cloudflare Turnstile. Đừng cho rằng cùng một lời gọi sẽ giải mọi loại thử thách được liệt kê ở các phần khác trong API CapSolver rộng hơn. Tài liệu task reCAPTCHA v2 nêu yêu cầu cụ thể cho đường hỗ trợ đó.

Kiểm tra workflow sau bước CAPTCHA

Workflow chỉ hoàn tất khi ứng dụng đạt trạng thái dự định. Token response, trường đã được điền và việc gửi form thành công là những quan sát riêng biệt.

Với ứng dụng do bạn kiểm soát, hãy chọn một tín hiệu thành công cụ thể như thông báo xác nhận hoặc response mong đợi. Chờ tín hiệu đó sau hành động form bình thường. Nếu nó không xuất hiện, hãy kiểm tra response ứng dụng thay vì gửi lặp lại yêu cầu giải mà không hiểu nguyên nhân lỗi.

Giữ danh tính trang ổn định trong khi thao tác. Đừng điều hướng đi nơi khác, đóng tab hoặc giải phóng session khi một lần giải đang diễn ra. Nếu ứng dụng tải lại widget, hãy kiểm tra lại thử thách hiện tại thay vì dùng lại tham số từ trạng thái trang trước đó.

Thuật ngữ CAPTCHA giải thích khái niệm xác minh, còn hướng dẫn về token và cookie CAPTCHA giúp phân biệt các loại output. Cả cookie trình duyệt lẫn chuỗi token đều không nên thay thế bước kiểm tra thành công của ứng dụng.

Khắc phục bước đầu tiên bị lỗi

Bắt đầu khắc phục tại thao tác thất bại sớm nhất để sự cố kết nối không biến thành yêu cầu giải không cần thiết.

Triệu chứng Cần kiểm tra gì
Tạo session thất bại Xác nhận Steel API đang chạy và xem HTTP status cùng log server.
Kết nối CDP thất bại Kiểm tra websocketUrl truy cập được từ tiến trình Python và thuộc về session hiện tại.
Widget không bao giờ khởi tạo Kiểm tra trình duyệt có truy cập script phát triển của Google và xác nhận trang mong đợi đã được tải.
Phát hiện không trả descriptor nào Kiểm tra trang hiện tại và loại CAPTCHA được hỗ trợ trước khi thử giải trả phí.
Có solution nhưng workflow bị treo Kiểm tra bước điền ngược, hành động ứng dụng bình thường và response của ứng dụng.
Job khác mất session trình duyệt Xem lại quyền sở hữu session và lời gọi release trước khi chia sẻ instance local.

Giữ log chẩn đoán nhỏ gọn. Ghi lại giai đoạn và lỗi đã được che bớt, không lưu API key, token response hoặc toàn bộ storage trình duyệt. Hãy test một trang duy nhất trước, và chỉ thêm cơ chế retry sau khi xác định được lỗi tạm thời mà retry có thể khắc phục hợp lý.

Hoàn tất tích hợp tự host

Tích hợp Steel Local cần một điểm bàn giao rõ ràng từ trang trình duyệt được quản lý sang thao tác CAPTCHA. Kiểm tra kết nối đã chạy được chứng minh điểm bàn giao đó mà không tạo request trả phí. Trước khi dùng trong production, hãy kiểm chứng việc giải bằng thông tin xác thực của bạn và xác nhận kết quả ứng dụng trong môi trường đã được cấp quyền.

Giữ session mở cho đến khi hoàn thành công việc nó phụ trách, rồi giải phóng khi công việc kết thúc. Điều này cho bạn một ranh giới hữu ích cho cả khắc phục sự cố và nâng cấp package sau này.

Xây dựng workflow tự động ổn định với CapSolver

Kết nối CapSolver tại bước CAPTCHA được hỗ trợ trong workflow Steel của bạn. Bắt đầu với đường phát hiện đã được xác minh, sau đó kiểm chứng thao tác có thông tin xác thực trước khi tăng tải công việc.

Thử CapSolver. Dùng mã thưởng CAP26 để nhận 5% bonus theo điều khoản chiến dịch.

CapSolver CAP26 campaign offering a 5 percent bonus

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

Hỏi: Steel Browser tự host có tự động giải CAPTCHA không?

Không. So sánh chính thức của Steel không liệt kê tính năng giải CAPTCHA tích hợp cho Steel Local. Khả năng giải của bản cloud là một tính năng riêng.

Hỏi: Tôi có cần tài khoản Steel Cloud cho ví dụ này không?

Không. Ví dụ kết nối tới một instance local đang chạy. Bạn chịu trách nhiệm khởi động và vận hành instance đó.

Hỏi: Tại sao kết nối qua CDP thay vì khởi chạy Chromium của Playwright?

CDP gắn Python vào trình duyệt do Steel quản lý. Khởi chạy một trình duyệt khác sẽ tạo session riêng, khác với session mà ví dụ này muốn dùng.

Hỏi: Kiểm tra phát hiện có tốn credit CapSolver không?
Việc kiểm tra chỉ đọc các tham số của widget và không thực hiện yêu cầu giải có trả phí. Lời gọi giải riêng biệt yêu cầu thông tin xác thực CapSolver hợp lệ.

Hỏi: Luồng giải có trả phí đầy đủ đã được kiểm thử ở đây chưa?

Chưa. Lần chạy thực tế chỉ kiểm tra việc tạo phiên, kết nối CDP, phát hiện SDK và giải phóng. Việc giải có trả phí, điền dữ liệu ngược trở lại và ứng dụng chấp nhận vẫn cần một lần kiểm thử riêng với thông tin xác thực.

Hỏi: Đây có phải là quan hệ đối tác chính thức với Steel hoặc tích hợp gốc không?

Không. Đây là một ví dụ kết nối đã được kiểm thử, sử dụng giao diện trình duyệt công khai của Steel và SDK chính thức của CapSolver. Nó không thiết lập quan hệ đối tác hoặc bảo đảm khả năng tương thích cho các phiên bản trong tương lai.

Tuyên bố Tuân thủ: Thông tin được cung cấp trên blog này chỉ mang tính chất tham khảo. CapSolver cam kết tuân thủ tất cả các luật và quy định hiện hành. Việc sử dụng mạng lưới CapSolver cho các hoạt động bất hợp pháp, gian lận hoặc lạm dụng là hoàn toàn bị cấm và sẽ bị điều tra. Các giải pháp giải captcha của chúng tôi nâng cao trải nghiệm người dùng trong khi đảm bảo tuân thủ 100% trong việc giúp giải quyết các khó khăn về captcha trong quá trình thu thập dữ liệu công khai. Chúng tôi khuyến khích việc sử dụng dịch vụ của chúng tôi một cách có trách nhiệm. Để biết thêm thông tin, vui lòng truy cập Điều khoản Dịch vụ và Chính sách Quyền riêng tư.

Thêm

Kiến trúc Thu thập dữ liệu từ web bằng Rust cho trích xuất dữ liệu có thể mở rộng
Kiến trúc Trích xuất Dữ liệu Từ Web bằng Rust cho Trích xuất Dữ liệu Có Thể Mở Rộng

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ủ.

web scraping
Logo of CapSolver

Anh Tuan

22-Apr-2026

Giải Captcha trong Nanobot bằng CapSolver
Cách giải CAPTCHA trên Nanobot bằng CapSolver

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.

web scraping
Logo of CapSolver

Anh Tuan

26-Feb-2026

Dịch vụ dữ liệu (DaaS): Nó là gì và tại sao nó quan trọng vào năm 2026
Dữ liệu dưới dạng dịch vụ (DaaS): Nó là gì và tại sao nó quan trọng vào năm 2026

Hiểu về Dịch vụ Dữ liệu (DaaS) vào năm 2026. Khám phá lợi ích, trường hợp sử dụng và cách nó thay đổi doanh nghiệp với phân tích thời gian thực và tính mở rộng.

web scraping
Logo of CapSolver

Emma Foster

12-Feb-2026

Cách sửa lỗi gỡ mã web phổ biến vào năm 2026
Cách sửa các lỗi thu thập dữ liệu web phổ biến vào năm 2026

Nắm vững việc sửa chữa các lỗi trình gỡ mã web đa dạng như 400, 401, 402, 403, 429, 5xx, và Cloudflare 1001 vào năm 2026. Học các chiến lược tiên tiến về chuyển đổi IP, tiêu đề, và giới hạn tốc độ thích ứng với CapSolver.

web scraping
Logo of CapSolver

Nikolai Smirnov

05-Feb-2026

Làm thế nào để giải quyết bảo vệ Cloudflare khi quét web
Cách khắc phục bảo vệ Cloudflare khi quét web

Học cách giải quyết bảo vệ Cloudflare khi quét dữ liệu web. Khám phá các phương pháp đã được chứng minh như xoay đổi IP, tinh vân TLS và CapSolver để xử lý các thách thức.

web scraping
Logo of CapSolver

Nikolai Smirnov

05-Feb-2026

RoxyBrowser với tích hợp CapSolver
Cách giải Captcha trong RoxyBrowser với tích hợp CapSolver

Tích hợp CapSolver với RoxyBrowser để tự động hóa các nhiệm vụ trình duyệt và vượt qua reCAPTCHA, Turnstile và các CAPTCHA khác.

web scraping
Logo of CapSolver

Anh Tuan

04-Feb-2026