
Anh Tuan
Data Science Expert

Hộp kiểm "Tôi không phải là robot" đóng vai trò là cơ chế phòng thủ quan trọng chống lại lưu lượng bot và lạm dụng tự động trên các trang web. Mặc dù cần thiết cho bảo mật, nhưng nó thường tạo ra thách thức lớn cho các hoạt động trích xuất dữ liệu và quét web hợp pháp. Nhu cầu về các giải pháp giải CAPTCHA tự động hiệu quả đã trở nên cấp thiết đối với các nhà phát triển và doanh nghiệp phụ thuộc vào tự động hóa web.
Bài viết này đi sâu vào tích hợp mạnh mẽ của Crawl4AI, một crawler web tiên tiến, với CapSolver, một dịch vụ giải CAPTCHA hàng đầu, cụ thể là giải reCAPTCHA v2. Chúng tôi sẽ khám phá cả hai phương pháp tích hợp dựa trên API và tiện ích mở rộng trình duyệt, cung cấp các ví dụ mã chi tiết và giải thích để giúp bạn đạt được thu thập dữ liệu web liền mạch và không gián đoạn.
reCAPTCHA v2 yêu cầu người dùng nhấp vào hộp kiểm, và đôi khi hoàn thành các thử thách hình ảnh, để chứng minh họ là người thật. Đối với các hệ thống tự động như crawler web, yếu tố tương tác này làm dừng quy trình quét, yêu cầu can thiệp thủ công hoặc kỹ thuật vượt qua phức tạp. Không có giải pháp hiệu quả, việc thu thập dữ liệu trở nên kém hiệu quả, không ổn định và tốn kém.
CapSolver cung cấp giải pháp có độ chính xác cao, phản hồi nhanh cho reCAPTCHA v2 bằng cách sử dụng thuật toán AI tiên tiến. Khi tích hợp với Crawl4AI, nó biến một rào cản lớn thành bước được tự động hóa, đảm bảo các nhiệm vụ tự động hóa web của bạn vẫn trơn tru và hiệu quả.
💡 Ưu đãi đặc biệt cho người dùng tích hợp Crawl4AI:
Nhân dịp tích hợp này, chúng tôi đang cung cấp mã giảm giá 6% —CRAWL4cho tất cả người dùng CapSolver đăng ký qua hướng dẫn này.
Chỉ cần nhập mã trong phần nạp tiền tại Bảng điều khiển để nhận thêm 6% tín dụng ngay lập tức.
Phương pháp tích hợp API cung cấp kiểm soát chi tiết và thường được khuyến khích do tính linh hoạt và độ chính xác. Nó bao gồm việc sử dụng chức năng js_code của Crawl4AI để chèn token CAPTCHA nhận được từ CapSolver trực tiếp vào trang web đích.
siteKey và websiteURL để nhận token gRecaptchaResponse.js_code của Crawl4AI trong CrawlerRunConfig để chèn token nhận được vào phần tử g-recaptcha-response trên trang.Mã Python sau đây minh họa cách tích hợp API của CapSolver với Crawl4AI để giải reCAPTCHA v2. Ví dụ này nhắm đến trang web demo hộp kiểm reCAPTCHA v2.
import asyncio
import capsolver
from crawl4ai import *
# TODO: thiết lập cấu hình của bạn
api_key = "CAP-xxxxxxxxxxxxxxxxxxxxx" # khóa API của bạn từ CapSolver
site_key = "6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9" # khóa trang của trang web đích của bạn
site_url = "https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php" # URL trang web đích của bạn
captcha_type = "ReCaptchaV2TaskProxyLess" # loại CAPTCHA của trang web đích
capsolver.api_key = api_key
async def main():
browser_config = BrowserConfig(
verbose=True,
headless=False,
use_persistent_context=True,
)
async with AsyncWebCrawler(config=browser_config) as crawler:
await crawler.arun(
url=site_url,
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test"
)
# lấy token reCAPTCHA bằng SDK CapSolver
solution = capsolver.solve({
"type": captcha_type,
"websiteURL": site_url,
"websiteKey": site_key,
})
token = solution["gRecaptchaResponse"]
print("token reCAPTCHA:", token)
js_code = """
const textarea = document.getElementById(\'g-recaptcha-response\');
if (textarea) {
textarea.value = \"""" + token + """\";
document.querySelector(\'button.form-field[type="submit"]\').click();
}
"""
wait_condition = """() => {
const items = document.querySelectorAll(\'h2\');
return items.length > 1;
}"""
run_config = CrawlerRunConfig(
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test",
js_code=js_code,
js_only=True,
wait_for=f"js:{wait_condition}"
)
result_next = await crawler.arun(
url=site_url,
config=run_config,
)
print(result_next.markdown)
if __name__ == "__main__":
asyncio.run(main())
Phân tích mã:
capsolver.solve được gọi với loại ReCaptchaV2TaskProxyLess, websiteURL và websiteKey để nhận token gRecaptchaResponse. Token này là giải pháp do CapSolver cung cấp.js_code): Chuỗi js_code chứa JavaScript tìm kiếm phần tử g-recaptcha-response trên trang và gán token nhận được vào thuộc tính value của nó. Sau đó, nó mô phỏng cú nhấp chuột vào nút gửi, đảm bảo biểu mẫu được gửi với token CAPTCHA hợp lệ.wait_for: Một wait_condition được định nghĩa để đảm bảo Crawl4AI chờ đợi một phần tử cụ thể xuất hiện trên trang, cho thấy việc gửi đã thành công và trang đã tải nội dung mới.Đối với các tình huống mà việc chèn API trực tiếp có thể phức tạp hoặc không mong muốn, tiện ích mở rộng CapSolver cung cấp một lựa chọn thay thế. Phương pháp này tận dụng khả năng phát hiện và giải CAPTCHA tự động trong môi trường trình duyệt do Crawl4AI quản lý.
user_data_dir: Cấu hình Crawl4AI để khởi động một phiên trình duyệt với user_data_dir được chỉ định để duy trì ngữ cảnh bền vững.apiKey và manualSolving trong tệp config.js của tiện ích.manualSolving của tiện ích, CAPTCHA sẽ được giải tự động khi phát hiện, hoặc bạn có thể kích hoạt thủ công thông qua JavaScript được chèn.Ví dụ này cho thấy cách Crawl4AI có thể được cấu hình để sử dụng hồ sơ trình duyệt có tiện ích CapSolver cho việc giải reCAPTCHA v2 tự động.
import asyncio
import time
from crawl4ai import *
# TODO: thiết lập cấu hình của bạn
user_data_dir = "/browser-profile/Default1" # Đảm bảo đường dẫn này được thiết lập đúng và chứa tiện ích đã cấu hình
browser_config = BrowserConfig(
verbose=True,
headless=False,
user_data_dir=user_data_dir,
use_persistent_context=True,
proxy="http://127.0.0.1:13120", # Tùy chọn: cấu hình proxy nếu cần
)
async def main():
async with AsyncWebCrawler(config=browser_config) as crawler:
result_initial = await crawler.arun(
url="https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php",
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test"
)
# Tiện ích sẽ tự động giải CAPTCHA khi trang được tải.
# Bạn có thể cần thêm điều kiện chờ hoặc time.sleep để CAPTCHA được giải
# trước khi tiếp tục các hành động tiếp theo.
time.sleep(30) # Ví dụ chờ, điều chỉnh khi cần thiết
# Tiếp tục với các hoạt động khác của Crawl4AI sau khi CAPTCHA được giải
# Ví dụ, kiểm tra các phần tử xuất hiện sau khi gửi thành công
# print(result_initial.markdown) # Bạn có thể kiểm tra nội dung trang sau thời gian chờ
if __name__ == "__main__":
asyncio.run(main())
Phân tích mã:
user_data_dir: Tham số này rất quan trọng để Crawl4AI khởi động phiên trình duyệt giữ nguyên tiện ích CapSolver và cấu hình của nó. Đảm bảo đường dẫn trỏ đến thư mục hồ sơ trình duyệt hợp lệ nơi tiện ích được cài đặt.manualSolving được đặt thành false (hoặc mặc định) trong cấu hình tiện ích, tiện ích sẽ tự động phát hiện và giải reCAPTCHA v2 khi trang được tải. Một time.sleep được bao gồm như một mẫu để cho phép tiện ích đủ thời gian giải CAPTCHA trước khi thực hiện các hành động tiếp theo.Nếu bạn muốn kích hoạt việc giải CAPTCHA thủ công tại một điểm cụ thể trong logic quét của mình, bạn có thể cấu hình tham số manualSolving của tiện ích thành true và sau đó sử dụng js_code để nhấp vào nút giải được cung cấp bởi tiện ích.
import asyncio
import time
from crawl4ai import *
# TODO: thiết lập cấu hình của bạn
user_data_dir = "/browser-profile/Default1" # Đảm bảo đường dẫn này được thiết lập đúng và chứa tiện ích đã cấu hình
browser_config = BrowserConfig(
verbose=True,
headless=False,
user_data_dir=user_data_dir,
use_persistent_context=True,
proxy="http://127.0.0.1:13120", # Tùy chọn: cấu hình proxy nếu cần
)
async def main():
async with AsyncWebCrawler(config=browser_config) as crawler:
result_initial = await crawler.arun(
url="https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php",
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test"
)
# Chờ một lúc để trang tải và tiện ích sẵn sàng
time.sleep(6)
# Sử dụng js_code để kích hoạt nút giải thủ công được cung cấp bởi tiện ích CapSolver
js_code = """
let solverButton = document.querySelector(\'#capsolver-solver-tip-button\');
if (solverButton) {
const clickEvent = new MouseEvent(\'click\', {
bubbles: true,
cancelable: true,
view: window
});
solverButton.dispatchEvent(clickEvent);
}
"""
print(js_code)
run_config = CrawlerRunConfig(
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test",
js_code=js_code,
js_only=True,
)
result_next = await crawler.arun(
url="https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php",
config=run_config
)
print("Kết quả thực thi JS:", result_next.js_execution_result)
# Cho phép thời gian để CAPTCHA được giải sau khi kích hoạt thủ công
time.sleep(30) # Ví dụ chờ, điều chỉnh khi cần thiết
# Tiếp tục với các hoạt động khác của Crawl4AI
if __name__ == "__main__":
asyncio.run(main())
Phân tích mã:
manualSolving: Trước khi chạy mã này, đảm bảo tệp config.js của tiện ích CapSolver có manualSolving được đặt thành true.js_code mô phỏng sự kiện nhấp chuột vào nút #capsolver-solver-tip-button, nút được cung cấp bởi tiện ích CapSolver để giải thủ công. Điều này cho phép bạn kiểm soát chính xác thời điểm quá trình giải CAPTCHA được khởi động.Việc tích hợp Crawl4AI với CapSolver cung cấp các giải pháp mạnh mẽ và linh hoạt để vượt qua reCAPTCHA v2, nâng cao đáng kể hiệu quả và độ tin cậy của các hoạt động trích xuất dữ liệu web. Dù bạn chọn kiểm soát chính xác của tích hợp API hay thiết lập đơn giản của tích hợp tiện ích mở rộng, cả hai phương pháp đều đảm bảo rằng reCAPTCHA v2 không còn là rào cản đối với mục tiêu thu thập dữ liệu của bạn.
Bằng cách tự động hóa việc giải CAPTCHA, các nhà phát triển có thể tập trung vào việc trích xuất dữ liệu có giá trị, tự tin rằng các crawler của họ có thể truy cập các trang web được bảo vệ một cách trơn tru. Sự kết hợp giữa khả năng quét tiên tiến của Crawl4AI và công nghệ giải CAPTCHA mạnh mẽ của CapSolver đánh dấu một bước tiến quan trọng trong việc trích xuất dữ liệu web tự động.
Đang gặp phải lỗi "reCAPTCHA Invalid Site Key" hoặc "token reCAPTCHA không hợp lệ"? Khám phá các nguyên nhân phổ biến, các giải pháp từng bước và mẹo khắc phục sự cố để giải quyết các vấn đề xác minh reCAPTCHA thất bại. Học cách sửa lỗi xác minh reCAPTCHA, vui lòng thử lại.

Học cách giải reCAPTCHA v2 bằng Python và API. Hướng dẫn toàn diện này bao gồm các phương pháp Proxy và không dùng Proxy cùng với mã nguồn có thể triển khai cho tự động hóa.
