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

Một bài kiểm thử trình duyệt Robot Framework có thể thất bại vì trang giờ hiển thị CAPTCHA thay vì nội dung mà khẳng định tiếp theo mong đợi. Tăng timeout chung không giải thích được thay đổi đó. Một bước kiểm tra CAPTCHA chuyên biệt có thể cho bài kiểm thử một kết quả hữu ích: loại thử thách và các tham số mà một quy trình giải được phê duyệt sẽ cần.
Robot Framework là một framework mã nguồn mở cho kiểm thử chấp nhận và tự động hóa quy trình nghiệp vụ (RPA). Cú pháp từ khóa cho phép nhóm mô tả các bước kiểm tra, trong khi các thư viện Python triển khai các thao tác bên dưới. Hướng dẫn này kết nối một từ khóa Python với CapSolver Core SDK chính thức và xác minh rằng Robot nhận được kết quả phát hiện thực từ một trang trình duyệt.
Phát hiện CAPTCHA nên được đặt tại một điểm kiểm tra trang đã biết, trước khi bài kiểm thử xem một trang bị chặn như một phản hồi ứng dụng bình thường.
Ví dụ, một luồng trình duyệt được phép mong đợi một form tìm kiếm nhưng lại đến một thử thách. Câu hỏi hữu ích đầu tiên là liệu có một CAPTCHA được hỗ trợ hiện diện không. Kết quả nhận diện sau đó có thể định hướng bước tiếp theo có kiểm soát: dùng tích hợp giải theo tài liệu, tạm dừng để con người thao tác, hoặc ghi nhận một lỗi kiểm thử cụ thể.
Điều này khác với việc coi mọi phần tử bị thiếu là CAPTCHA. Một trang cũng có thể lỗi vì script ứng dụng không tải, route bị thay đổi, hoặc selector sai. Hãy giữ việc phát hiện CAPTCHA tách biệt với những chẩn đoán đó.
Hướng dẫn sử dụng Robot Framework ghi lại các thư viện kiểm thử Python và cách thực thi từ khóa. Thư viện nhỏ dưới đây dùng chính điểm mở rộng đó. Đây là một ví dụ tích hợp, không phải tuyên bố rằng Robot Framework cung cấp sẵn một thư viện CapSolver gốc.
Cài Robot Framework, Playwright và Core SDK trong cùng một môi trường Python để bộ chạy kiểm thử có thể import cả ba.
Ví dụ sử dụng Python 3.12, Robot Framework 7.5, Playwright 1.64.0 và capsolver-core 0.1.1. Kho chính thức của framework là nguồn thông tin về bối cảnh dự án và các cách cài đặt được hỗ trợ.
python -m pip install robotframework==7.5 playwright==1.64.0 capsolver-core==0.1.1
python -m playwright install chromium
Chạy việc cài đặt và kiểm thử với cùng một trình thông dịch. Một lỗi thiết lập thường gặp là cài thư viện trình duyệt ở một môi trường rồi chạy Robot từ môi trường khác. Khi đó import sẽ lỗi trước khi trang được mở.
Ví dụ này chỉ phát hiện widget và đọc các tham số công khai của nó. Việc giải trả phí sẽ cần một khóa API solver hợp lệ, tài khoản đã sẵn sàng và một quy trình được phê duyệt riêng. Không có kết quả trả phí nào được tạo ra bởi bài kiểm thử dưới đây.
Tạo index.html trong một thư mục fixture riêng và phục vụ nó trên máy của bạn.
Google ghi lại khóa thử nghiệm reCAPTCHA v2 công khai trong hướng dẫn kiểm thử tự động. Fixture này dùng khóa đó để tải một widget có thể nhận diện mà không dùng cấu hình của một site production.
<!doctype html><html><head><title>Owned CAPTCHA test fixture</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>
Khởi động một server cục bộ từ thư mục đó:
python -m http.server 8766 --bind 127.0.0.1
Script widget vẫn cần truy cập mạng đến Google. Nếu widget của fixture không tải, hãy kiểm tra điều kiện tiên quyết đó trước khi diễn giải một kết quả phát hiện rỗng. Server cục bộ chỉ cung cấp fixture trên loopback interface.
Khóa thử nghiệm hữu ích để kiểm tra kết nối và nhận diện. Nó không phải là bằng chứng đại diện cho độ khó thử thách trên môi trường production, hiệu năng giải trả phí, hay việc ứng dụng chấp nhận. Hãy giữ các kiểm thử đó tách biệt trong checklist phát hành.
Lưu thư viện sau đây dưới tên CaptchaCheck.py cạnh file kiểm thử Robot của bạn.
Thư viện gọi phương thức get_captcha_info đã được ghi lại từ Core SDK. Wrapper dành riêng cho Robot được cố ý giữ nhỏ: nó khởi tạo event loop, mở trình duyệt, đọc thông tin và đóng trình duyệt trong khối finally.
import asyncio
from robot.api.deco import keyword
from capsolver_core import create_capsolver
from playwright.async_api import async_playwright
@keyword("Inspect CAPTCHA Page")
def inspect_captcha_page(url):
return asyncio.run(_inspect(url))
async def _inspect(url):
async with async_playwright() as pw:
browser = await pw.chromium.launch(headless=True)
try:
page = await browser.new_page()
await page.goto(url, wait_until="networkidle")
async with create_capsolver() as cap:
infos = await cap.get_captcha_info(page)
return [{"type": item.type.value, "url": item.website_url,
"site_key": item.website_key} for item in infos]
finally:
await browser.close()
Danh sách trả về chứa các dictionary đơn giản, thuận tiện cho khẳng định trong Robot. Danh sách rỗng có nghĩa là lần kiểm tra này không trả về thông tin khớp nào. Không nên suy diễn nó thành khẳng định rằng không hề có thử thách nào ở bất cứ đâu trong luồng.
Điều kiện chờ tải trang này phù hợp cho fixture nhỏ này. Một ứng dụng production với hoạt động mạng liên tục có thể cần điều kiện sẵn sàng khác, đặc thù cho trang. Đừng sao chép networkidle vào mọi ứng dụng và cho rằng nó chứng minh widget liên quan đã render xong.
Nhận mã thưởng CapSolver của bạn
Tăng ngân sách tự động hóa ngay lập tức!
Dùng mã thưởng CAP26 khi nạp tiền vào tài khoản CapSolver để nhận thêm 5% bonus cho mỗi lần nạp — không giới hạn.
Đổi mã ngay trong Bảng điều khiển CapSolver
Lưu nội dung sau dưới tên captcha.robot cạnh thư viện và chạy trong khi server fixture cục bộ đang hoạt động.
*** Settings ***
Library CaptchaCheck.py
Library Collections
*** Variables ***
${PAGE_URL} http://127.0.0.1:8766/
*** Test Cases ***
Identify The Fixture CAPTCHA
${items}= Inspect CAPTCHA Page ${PAGE_URL}
Should Not Be Empty ${items}
${first}= Get From List ${items} 0
Should Be Equal ${first}[type] reCaptchaV2
Log ${items}
python -m robot --outputdir results captcha.robot
Bài kiểm thử khẳng định rằng bộ phát hiện đã trả về kết quả và fixture được nhận diện là reCaptchaV2. Log của nó chứa URL trang trả về và sitekey công khai. Báo cáo do Robot tạo sẽ cho bạn biết các khẳng định đó có vượt qua hay không.
Một lần pass thiết lập một chuỗi cụ thể: Robot gọi từ khóa Python của bạn, Playwright mở fixture, Core SDK kiểm tra trang thực, và dữ liệu trả về đến được các khẳng định của Robot. Mã sẽ đóng trình duyệt ngay cả khi có ngoại lệ xảy ra.
Hãy đọc lỗi tại giai đoạn chúng xảy ra. Lỗi import là vấn đề phụ thuộc. Lỗi điều hướng là vấn đề truy cập trang. Timeout có thể có nghĩa là fixture chưa ổn định. Khẳng định loại thất bại có nghĩa là dữ liệu trả về không khớp với kỳ vọng về fixture. Những tình huống này cần các cách sửa khác nhau.
Việc phát hiện cung cấp thông tin cho quyết định dùng solver, nhưng bước tiếp theo phải giữ nguyên ngữ cảnh trang mà tác vụ yêu cầu.
Hướng dẫn SDK chính thức mô tả việc giải trong trình duyệt như một thao tác riêng. Nếu luồng production của bạn cần giải và tiếp tục trên cùng một trang, hãy giữ trang đó và context trình duyệt của nó sống xuyên suốt thao tác. Từ khóa chẩn đoán trong bài viết này đóng trình duyệt của nó và vì vậy không phải là bước tiếp nối thả vào thẳng cho một phiên đăng nhập sẵn có.
Các nhóm đang dùng SeleniumLibrary hoặc Robot Framework Browser cũng nên phân biệt trình duyệt đang hoạt động của họ với trình duyệt được mở bởi ví dụ này. Chia sẻ URL không có nghĩa là chia sẻ cookie, tương tác trước đó, hoặc đối tượng trang. Tránh tuyên bố rằng một thử thách đã được giải trong trình duyệt đang active của bài kiểm thử khi công việc thực ra diễn ra trong một trình duyệt khác.
Đối với các bài kiểm thử hồi quy site do bạn sở hữu thông thường, khóa thử nghiệm do nhà cung cấp đưa ra có thể là lựa chọn đơn giản hơn. Chỉ dùng đường đi solver thực khi mục tiêu kiểm thử yêu cầu xác nhận tích hợp đó. Hướng dẫn khóa thử nghiệm reCAPTCHA giải thích ranh giới này chi tiết hơn.
Hãy dùng một checkpoint nhỏ, rõ ràng để phân biệt một CAPTCHA đã được nhận diện với một lỗi phần tử chung. CapSolver cung cấp khả năng phát hiện trong ví dụ này; Robot Framework biến kết quả đó thành một khẳng định kiểm thử dễ đọc. Chỉ thêm bước giải trả phí như một bước riêng được xác minh, với quyền sở hữu trang và kiểm tra kết quả ứng dụng phù hợp.
H: Bài kiểm thử Robot này có giải CAPTCHA không?
Không. Nó phát hiện CAPTCHA của fixture và trả về các tham số công khai của nó. Bài kiểm thử không gửi yêu cầu giải trả phí hay xác minh việc gửi form trên môi trường production.
H: Đây có phải là plugin chính thức của Robot Framework không?
Không. Wrapper từ khóa Python là một ví dụ được xây dựng quanh cơ chế thư viện đã được Robot Framework ghi lại và Core SDK chính thức. Wrapper cụ thể được bao gồm để hành vi của nó có thể được kiểm tra.
H: Tôi có thể dùng cùng từ khóa này trong các bài kiểm thử SeleniumLibrary không?
Bạn có thể gọi từ khóa, nhưng nó mở một trình duyệt Playwright riêng. Nó không kiểm tra hoặc tiếp tục phiên trình duyệt của SeleniumLibrary. Việc tích hợp với một phiên có sẵn cần một bước chuyển giao rõ ràng, được hỗ trợ.
H: Tại sao fixture trả về danh sách rỗng?
Hãy kiểm tra xem script widget đã tải hay chưa, trang mong đợi có đang được phục vụ hay không, và SDK có hỗ trợ thử thách hiện có hay không. Một kết quả rỗng tự thân nó không xác định được nguyên nhân.
H: Tôi có cần khóa API solver cho ví dụ này không?
Bước kiểm tra phát hiện tham số được minh họa không gửi tác vụ giải trả phí. Một bước giải trên môi trường production cần các thông tin xác thực và điều kiện tiên quyết được ghi lại cho thao tác đó.
H: Có nên để mọi bài kiểm thử tự động gọi trình giải CAPTCHA không?
Không. Hãy dùng cơ chế thử nghiệm do nhà cung cấp đưa ra cho các bài kiểm thử hồi quy site do bạn sở hữu thông thường khi phù hợp. Dành các bài kiểm thử tích hợp solver cho những luồng mà chúng cần xác nhận, và giữ chúng được giới hạn.

Anh Tuan
Data Science Expert
Turning task outcomes into actionable insights.
GIỚI THIỆU TÁC GIẢ
Tìm hiểu lý do tại sao một CAPTCHA hiển thị lại bị bỏ sót bên trong iframe. Kiểm tra ngữ cảnh tài liệu, quá trình tải widget, các tham số của trang web và quá trình trình duyệt chuyển giao cho trình giải CAPTCHA của bạn.

Lên kế hoạch cho các bài kiểm tra CAPTCHA Node.js với khóa kiểm tra của nhà cung cấp, các lần kiểm tra bộ giải được kiểm soát và các câu lệnh kiểm thử rõ ràng. Tách riêng các hồi quy của biểu mẫu khỏi các lỗi giải CAPTCHA từ hệ thống bên ngoài.
