
Anh Tuan
Data Science Expert

Skyvern chịu trách nhiệm mở trang web, điền biểu mẫu và tiến hành các quy trình kinh doanh, trong khi CapSolver xử lý việc trả về Token CAPTCHA.
Cài đặt SDK chính thức capsolver và gọi capsolver.solve() để tránh việc tự mình triển khai logic tạo nhiệm vụ và kiểm tra.
Khi nhận được Token, trả nó về trang trình duyệt hiện tại, sau đó để Skyvern gửi biểu mẫu và kiểm tra kết quả.
Skyvern là nền tảng tự động hóa trình duyệt AI được xây dựng dựa trên Playwright, mô hình thị giác và các Mô hình Ngôn ngữ Lớn (LLMs). Skyvern có thể hiểu văn bản, biểu mẫu và các phần tử tương tác trên trang web, hoàn thành các nhiệm vụ như điều hướng trang, nhấp nút, nhập nội dung, tải tệp lên, trích xuất thông tin và các quy trình nhiều bước dựa trên chỉ dẫn bằng ngôn ngữ tự nhiên. Cách tiếp cận này giảm chi phí bảo trì script do thay đổi cấu trúc trang web, phù hợp với các tình huống như đăng nhập, gửi biểu mẫu, thao tác nội bộ và thu thập dữ liệu.
Khi quy trình tự động hóa gặp phải thách thức CAPTCHA, bạn có thể gọi SDK Python chính thức của CapSolver bằng cách cung cấp các tham số như URL trang hiện tại, Site Key và loại CAPTCHA. Sau khi CapSolver hoàn thành nhiệm vụ, nó sẽ trả về một Token xác minh tương ứng. Chương trình sau đó sử dụng Playwright để ghi Token này vào các trường phản hồi trang, hàm gọi lại JavaScript hoặc yêu cầu kinh doanh. Khi xác minh được thực hiện, Skyvern có thể tiếp tục thực hiện nhiệm vụ được ủy quyền ban đầu của người dùng, chẳng hạn như gửi biểu mẫu, truy cập trang tiếp theo hoặc kiểm tra kết quả cuối cùng.
Skyvern hiện tại yêu cầu Python 3.11, 3.12 hoặc 3.13. Cài đặt Skyvern, SDK CapSolver và Chromium:
pip install "skyvern[local]"
pip install --upgrade capsolver
python -m playwright install chromium
# pip install --upgrade capsolver
# export CAPSOLVER_API_KEY='...'
import capsolver
# capsolver.api_key = "..."
solution = capsolver.solve({
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": "https://www.google.com/recaptcha/api2/demo",
"websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
})
print(solution)
Khi thành công, kết quả trả về chủ yếu sử dụng:
token = solution["gRecaptchaResponse"]
Vai trò của các tham số:
websiteURL và websiteKey phải nhất quán với cấu hình thực tế của trang hiện tại.
Dưới đây là ví dụ tích hợp tối thiểu. Skyvern trước tiên mở trang và điền biểu mẫu, sau đó truy xuất Token qua SDK chính thức, cuối cùng trả Token về trang để gửi.
import asyncio
import capsolver
from skyvern import Skyvern
TARGET_URL = "https://www.google.com/recaptcha/api2/demo"
WEBSITE_KEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
async def inject_token(page, token: str):
await page.evaluate(
"""
(token) => {
const textarea = document.getElementById('g-recaptcha-response');
if (textarea) {
textarea.value = token;
}
}
""",
token,
)
async def main():
skyvern = Skyvern.local()
browser = await skyvern.launch_local_browser(headless=False)
page = await browser.get_working_page()
try:
await page.goto(TARGET_URL)
solution = await asyncio.to_thread(
capsolver.solve,
{
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": TARGET_URL,
"websiteKey": WEBSITE_KEY,
},
)
token = solution["gRecaptchaResponse"]
await inject_token(page, token)
await page.act("Submit")
await page.validate("Verification successful... Great!")
finally:
await browser.close()
CapSolver chỉ chịu trách nhiệm trả về Token; nó không tự động gửi biểu mẫu kinh doanh của trang đích. Các trang web khác nhau xử lý Token theo các cách khác nhau, với các phương pháp phổ biến bao gồm:
Ghi vào trường ẩn g-recaptcha-response;
Gọi hàm gọi lại JavaScript được cấu hình trên trang;
Gửi Token như tham số của giao diện kinh doanh.
Hàm inject_token() trong ví dụ thử cả trường ẩn và hàm gọi lại thử nghiệm. Trong thực tế, đoạn mã này nên được điều chỉnh theo triển khai frontend của trang web của bạn.
Kiểm tra các tham số sau:
websiteURL có phải là địa chỉ trang hiện tại không?
websiteKey có phải từ trang hiện tại không?
Trang có được làm mới sau khi nhận Token không?
Token có được chuyển đến hàm gọi lại hoặc giao diện kinh doanh đúng trang không?
Ngoài reCAPTCHA, Skyvern cũng có thể làm việc với CapSolver để xử lý các CAPTCHA hình ảnh thành văn bản tiêu chuẩn. Ví dụ, trang BotDetect CAPTCHA Demo: ID phần tử hình ảnh CAPTCHA là demoCaptcha_CaptchaImage, ID ô nhập kết quả là captchaCode, và ID nút xác minh là validateCaptchaButton.

ImageToTextTask yêu cầu chuyển đổi hình ảnh CAPTCHA thành Base64 và gửi nó qua tham số body. Nếu src hình ảnh là URL dữ liệu, ví dụ:
data:image/png;base64,iVBORw0KGgoAAA...
Khi truyền nó đến CapSolver, chỉ giữ nội dung Base64 sau dấu phẩy, loại bỏ tiền tố data:image/...;base64,. Khác với các nhiệm vụ kiểu Token, ImageToTextTask trả về kết quả nhận dạng trực tiếp mà không cần kiểm tra thêm getTaskResult.
Dưới đây là ví dụ tích hợp Skyvern đầy đủ:
import asyncio
import capsolver
from skyvern import Skyvern
TARGET_URL = "https://captcha.com/demos/features/captcha-demo.aspx"
async def main():
skyvern = Skyvern.local()
browser = await skyvern.launch_local_browser(headless=False)
page = await browser.get_working_page()
try:
await page.goto(TARGET_URL)
await page.locator("#demoCaptcha_CaptchaImage").wait_for()
# Đọc URL dữ liệu hình ảnh CAPTCHA.
image_src = await page.locator(
"#demoCaptcha_CaptchaImage"
).get_attribute("src")
if not image_src or "," not in image_src:
raise RuntimeError("Không tìm thấy hình ảnh CAPTCHA Base64 hợp lệ")
# Xóa tiền tố URL dữ liệu và giữ chỉ dữ liệu Base64.
base64_image = image_src.split(",", 1)[1]
solution = await asyncio.to_thread(
capsolver.solve,
{
"type": "ImageToTextTask",
"websiteURL": TARGET_URL,
"module": "common",
"body": base64_image,
},
)
captcha_text = solution["text"]
print("Kết quả nhận dạng:", captcha_text)
await page.locator("#captchaCode").fill(captcha_text)
await page.locator("#validateCaptchaButton").click()
await page.wait_for_timeout(5000)
finally:
await browser.close()
if __name__ == "__main__":
asyncio.run(main())
Quy trình thực thi mã có thể được tóm tắt như sau:
Skyvern mở trang CAPTCHA
-> Tìm #demoCaptcha_CaptchaImage
-> Trích xuất và làm sạch dữ liệu hình ảnh Base64
-> Gọi capsolver.solve(ImageToTextTask)
-> Đọc solution["text"]
-> Điền vào #captchaCode
-> Nhấp vào #validateCaptchaButton
module là tham số tùy chọn; common có thể được sử dụng theo mặc định. Nếu CAPTCHA chỉ chứa số, bạn có thể sử dụng number; đối với một số kiểu đặc biệt, bạn cũng có thể chọn mô hình độc lập tương ứng theo tài liệu CapSolver để cải thiện độ chính xác nhận dạng.

Ví dụ, khi nhận dạng CAPTCHA chỉ chứa số, bạn có thể thay đổi tham số nhiệm vụ thành:
solution = capsolver.solve({
"type": "ImageToTextTask",
"module": "number",
"images": [base64_image],
})
answers = solution["answers"]
Mô hình number hỗ trợ gửi nhiều hình ảnh cùng lúc, và images có thể chứa tối đa 9 chuỗi Base64. Đối với các tên mô hình khác và loại hình ảnh áp dụng, vui lòng tham khảo Tài liệu chính thức của CapSolver về ImageToTextTask.
Việc chọn giải pháp kỹ thuật phù hợp cho tự động hóa trình duyệt AI phụ thuộc vào độ phức tạp của nhiệm vụ, tần suất thay đổi trang và cơ chế xác minh của trang web mục tiêu. Các công cụ truyền thống như Selenium và Playwright phù hợp với các quy trình tự động hóa có cấu trúc ổn định và đường đi rõ ràng. Skyvern xây dựng trên nền tảng này bằng cách giới thiệu các mô hình thị giác và LLMs, khiến nó phù hợp hơn với các nhiệm vụ web có cấu trúc trang thay đổi thường xuyên, yêu cầu hiểu biết ngữ nghĩa hoặc liên quan đến các bước hoạt động nhiều. Vì Skyvern kiểm soát trình duyệt dựa trên Playwright, nó có thể hoàn thành điều hướng trang, điền biểu mẫu, nhấp nút và trích xuất dữ liệu thông qua ngôn ngữ tự nhiên. Khi quy trình gặp phải thách thức CAPTCHA, các nhà phát triển có thể kết hợp SDK CapSolver chính thức để nhận Token xác minh và sau đó điền kết quả trở lại trang hiện tại, cho phép Skyvern tiếp tục các thao tác tiếp theo như gửi biểu mẫu, chuyển trang và kiểm tra kết quả. Bằng cách kết hợp Skyvern và CapSolver, các nhà phát triển có thể xây dựng các quy trình tự động hóa trình duyệt linh hoạt, dễ bảo trì và mở rộng hơn, giảm chi phí bảo trì các lựa chọn truyền thống trong khi cải thiện hiệu suất và độ ổn định của các nhiệm vụ web phức tạp. Việc xác định rõ phạm vi ủy quyền, bảo vệ khóa API và xác minh và ghi lại kết quả tự động hóa là các điều kiện tiên quyết quan trọng cho hoạt động ổn định của các dự án liên quan.
Nhận Mã Ưu Đãi CapSolver
Tăng ngân sách tự động hóa của bạn ngay lập tức!
Sử dụng mã ưu đãi CAP26 khi nạp tiền vào tài khoản CapSolver để nhận thêm 5% ưu đãi cho mỗi lần nạp tiền — không giới hạn.
Nhận mã ngay bây giờ trong Bảng điều khiển CapSolver
Câu hỏi 1: Làm thế nào để xử lý CAPTCHA trong iframe?
Trả lời 1: Chuyển sang ngữ cảnh iframe trước bằng cách sử dụng page.frame_locator('iframe_selector') trước khi chèn token. Đảm bảo websiteURL được gửi đến CapSolver là URL trang cha, không phải URL iframe.
Câu hỏi 2: Nếu trang web sử dụng hàm gọi lại JavaScript tùy chỉnh thì sao?
Trả lời 2: Xác định tên hàm gọi lại (ví dụ: onCaptchaResolved) và thực thi nó qua Playwright: await page.evaluate("onCaptchaResolved(token)", token).
Câu hỏi 3: Làm thế nào để cải thiện tỷ lệ nhận dạng ImageToText?
Trả lời 3: Sử dụng các tham số module cụ thể (như number cho CAPTCHA số) và đảm bảo hình ảnh Base64 được trích xuất rõ ràng và độ phân giải cao.
Câu hỏi 4: Làm thế nào để bảo mật khóa API?
Trả lời 4: Không bao giờ mã hóa cứng khóa API của bạn. Sử dụng biến môi trường (ví dụ: os.getenv("CAPSOLVER_API_KEY")) để tải nó một cách an toàn.
Câu hỏi 5: Bạn có nên triển khai cơ chế thử lại không?
Trả lời 5: Có, sử dụng các thư viện như tenacity để triển khai thử lại với backoff mũ cho capsolver.solve() để xử lý các vấn đề mạng hoặc dịch vụ tạm thời.
Câu hỏi 6: Token CAPTCHA có thời hạn không?
Trả lời 6: Token CAPTCHA hết hạn nhanh (ví dụ: 2 phút). Chèn và gửi token ngay lập tức sau khi nhận được từ CapSolver.
Câu hỏi 7: Skyvern có thể tự động định tuyến các loại CAPTCHA khác nhau không?
Trả lời 7: Có, bạn có thể sử dụng khả năng thị giác của Skyvern để xác định loại CAPTCHA trước, sau đó xây dựng tải trọng CapSolver phù hợp một cách động (ví dụ: chuyển đổi giữa ReCaptchaV2TaskProxyLess và ImageToTextTask).
Câu hỏi 8: Thị giác của Skyvern giúp gì khác?
Trả lời 8: Nó cho phép xác định phần tử động (tìm CAPTCHA mà không cần ID cố định), kiểm tra sau khi gửi biểu mẫu bằng hình ảnh (kiểm tra thông báo thành công), và phát hiện lỗi bằng hình ảnh để thử lại thông minh.
Cải thiện xử lý Captcha trong tự động hóa nộp hồ sơ tòa án cho LegalTech: quy trình tuân thủ và công cụ để đơn giản hóa việc nộp hồ sơ điện tử, giảm lỗi và tăng tốc việc nộp hồ sơ.

Học cách giải CAPTCHA trong theo dõi tồn kho thương mại điện tử với các phương pháp thực tế, mẹo tự động hóa và tuân thủ để đảm bảo dữ liệu tồn kho chính xác và có thể mở rộng.
