
Anh Tuan
Data Science Expert

Khi thực hiện web scraping, một trong những trở ngại phổ biến bạn có thể gặp phải là các thách thức CAPTCHA. Các trang web thường sử dụng CAPTCHA để ngăn chặn bot truy cập nội dung của họ. CAPTCHA (Kiểm tra Turing công khai tự động hoàn toàn để phân biệt máy tính và con người) là một kỹ thuật được sử dụng rộng rãi để đảm bảo rằng người dùng là con người, không phải bot tự động.
Trong hướng dẫn này, chúng tôi sẽ thảo luận về các loại thách thức reCAPTCHA khác nhau, cách xác định chúng bằng các công cụ và cuối cùng, cách giải quyết nhiều thách thức reCAPTCHA đồng thời bằng Python và threading.
WebScraping là quá trình trích xuất dữ liệu từ các trang web. Nó thường được sử dụng cho các tác vụ như thu thập giá từ các trang web thương mại điện tử, thu thập bài báo tin tức hoặc tổng hợp thông tin từ nhiều nguồn web khác nhau. Scraping bao gồm việc thực hiện yêu cầu HTTP đến một trang web và phân tích cú pháp dữ liệu từ phản hồi. Tuy nhiên, nhiều trang web sử dụng CAPTCHA để ngăn chặn quyền truy cập tự động.
reCAPTCHA V2, loại CAPTCHA này được sử dụng rộng rãi nhất và xuất hiện dưới dạng thách thức "hộp kiểm tra" có nhãn "Tôi không phải là robot". Nó có thể yêu cầu người dùng chọn một số hình ảnh để xác minh họ là người.

reCAPTCHA V3 hoạt động trong nền, chấm điểm các tương tác của người dùng để phát hiện hành vi giống bot. Hệ thống này được thiết kế để tránh gây gián đoạn trải nghiệm người dùng bằng cách cung cấp điểm số cho trang web, có thể được sử dụng để chặn bot hoặc yêu cầu các bước xác minh bổ sung.
reCAPTCHA ẩn là một phiên bản thân thiện với người dùng hơn của reCAPTCHA v2, trong đó thách thức chỉ xuất hiện nếu hệ thống nghi ngờ hành vi giống bot.

Để xác định loại CAPTCHA được sử dụng trên một trang web, bạn có thể sử dụng các công cụ sau:
Capsolver là một dịch vụ cho phép bạn giải quyết các thách thức CAPTCHA một cách có chương trình. Để phát hiện các thông số CAPTCHA:

Sau khi bạn đã thiết lập Capsolver, hãy làm theo các bước sau để phát hiện các thông số CAPTCHA:
Capsolver Captcha Detector có thể trả về thông tin chi tiết về reCAPTCHA:

Các tham số chính cho reCAPTCHA:
Website URLSite KeypageActionisInvisibleisEnterpriseisSRequiredisReCaptchaV3API DomainSau khi các thông số này được phát hiện, Capsolver sẽ trả về một đối tượng JSON với tất cả các chi tiết cần thiết để gửi CAPTCHA đến dịch vụ của họ.

Khi làm việc trên các dự án web scraping, việc giải quyết CAPTCHA có thể trở nên tốn thời gian, đặc biệt là khi bạn cần giải quyết nhiều CAPTCHA đồng thời. Dưới đây là cách bạn có thể tự động giải quyết nhiều thách thức reCAPTCHA đồng thời bằng Python.
import capsolver
import threading
capsolver.api_key = "Your Capsolver API Key"
PAGE_URL = "PAGE_URL"
PAGE_KEY = "PAGE_SITE_KEY"
def solve_recaptcha_v2():
solution = capsolver.solve({
"type": "ReCaptchaV2TaskProxyless",
"websiteURL": PAGE_URL,
"websiteKey": PAGE_KEY,
})
return solution
def solve_recaptcha_task(result_list, index):
result = solve_recaptcha_v2()
result_list[index] = result
def solve_multiple_recaptchas(num_tasks):
threads = []
results = [None] * num_tasks
for i in range(num_tasks):
thread = threading.Thread(target=solve_recaptcha_task, args=(results, i))
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
return results
def main():
num_tasks = 10 # Số lượng tác vụ đồng thời
print(f"Giải quyết {num_tasks} tác vụ reCaptcha v2 đồng thời")
solutions = solve_multiple_recaptchas(num_tasks)
for i, solution in enumerate(solutions):
print(f"Giải pháp {i+1}: {solution}")
if __name__ == "__main__":
main()
Quá trình giải quyết reCAPTCHA v3 khá giống với v2, nhưng bạn sẽ cần điều chỉnh loại CAPTCHA cho phù hợp.
```python
import capsolver
import threading
capsolver.api_key = "Your Capsolver API Key"
PAGE_URL = "PAGE_URL"
PAGE_KEY = "PAGE_SITE_KEY"
def solve_recaptcha_v3():
solution = capsolver.solve({
"type": "ReCaptchaV3TaskProxyless",
"websiteURL": PAGE_URL,
"websiteKey": PAGE_KEY,
})
return solution
def solve_recaptcha_task(result_list, index):
result = solve_recaptcha_v3()
result_list[index] = result
def solve_multiple_recaptchas(num_tasks):
threads = []
results = [None] * num_tasks
for i in range(num_tasks):
thread = threading.Thread(target=solve_recaptcha_task, args=(results, i))
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
return results
def main():
num_tasks = 10 # Số lượng tác vụ đồng thời
print(f"Giải quyết {num_tasks} tác vụ reCaptcha v3 đồng thời")
solutions = solve_multiple_recaptchas(num_tasks)
for i, solution in enumerate(solutions):
print(f"Giải pháp {i+1}: {solution}")
if __name__ == "__main__":
main()
Quá trình giải quyết reCAPTCHA v3 khá giống với v2, nhưng bạn sẽ cần điều chỉnh loại CAPTCHA cho phù hợp.
```python
import capsolver
import threading
capsolver.api_key = "Your Capsolver API Key"
PAGE_URL = "PAGE_URL"
PAGE_KEY = "PAGE_SITE_KEY"
def solve_recaptcha_v3():
solution = capsolver.solve({
"type": "ReCaptchaV3TaskProxyless",
"websiteURL": PAGE_URL,
"websiteKey": PAGE_KEY,
})
return solution
def solve_recaptcha_task(result_list, index):
result = solve_recaptcha_v3()
result_list[index] = result
def solve_multiple_recaptchas(num_tasks):
threads = []
results = [None] * num_tasks
for i in range(num_tasks):
thread = threading.Thread(target=solve_recaptcha_task, args=(results, i))
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
return results
def main():
num_tasks = 10 # Số lượng tác vụ đồng thời
print(f"Giải quyết {num_tasks} tác vụ reCaptcha v3 đồng thời")
solutions = solve_multiple_recaptchas(num_tasks)
for i, solution in enumerate(solutions):
print(f"Giải pháp {i+1}: {solution}")
if __name__ == "__main__":
main()
import capsolver
# Cân nhắc sử dụng biến môi trường cho thông tin nhạy cảm
capsolver.api_key = "Your Capsolver API Key"
PAGE_URL_V2 = "PAGE_URL"
PAGE_KEY_V2 = "PAGE_SITE_KEY"
PAGE_URL_V3 = "PAGE_URL"
PAGE_KEY_V3 = "PAGE_SITE_KEY"
def solve_recaptcha_v2(url, key):
solution = capsolver.solve({
"type": "ReCaptchaV2TaskProxyless",
"websiteURL": url,
"websiteKey": key,
})
return solution
def solve_recaptcha_v3(url, key):
solution = capsolver.solve({
"type": "ReCaptchaV3TaskProxyless",
"websiteURL": url,
"websiteKey": key,
"minScore": 0.5 # Điều chỉnh điểm số tối thiểu nếu cần
})
return solution
def main():
print("Giải quyết reCaptcha v2")
solution_v2 = solve_recaptcha_v2(PAGE_URL_V2, PAGE_KEY_V2)
print("Giải pháp (v2): ", solution_v2)
print("Giải quyết reCaptcha v3")
solution_v3 = solve_recaptcha_v3(PAGE_URL_V3, PAGE_KEY_V3)
print("Giải pháp (v3): ", solution_v3)
if __name__ == "__main__":
main()
Nhận Mã thưởng của bạn cho các giải pháp captcha hàng đầu; CapSolver: scrape. Sau khi đổi mã, bạn sẽ nhận được thêm 5% tiền thưởng sau mỗi lần nạp tiền, Không giới hạn

Để biết thêm thông tin, hãy đọc blog này
Xử lý nhiều thách thức CAPTCHA là một kỹ năng quan trọng đối với bất kỳ ai làm việc trong lĩnh vực web scraping, đặc biệt là khi các trang web tăng cường các biện pháp bảo mật của họ. Với các công cụ như Capsolver và sức mạnh của luồng xử lý của Python, bạn có thể tự động hóa hiệu quả việc giải quyết các thách thức CAPTCHA, đảm bảo các quá trình scraping suôn sẻ hơn cho các dự án của bạn.
Hãy học cách xác định nguyên nhân gây ra lỗi Cloudflare 1020 Truy cập Bị Từ Chối, cách Tường lửa Ứng dụng Web và phát hiện bot hoạt động, và cách các nhà phát triển giảm thiểu kết quả dương tính giả trong các quy trình tự động hợp lệ.

Học cách sử dụng mẫu CapSolver n8n để theo dõi các trang sản phẩm được bảo vệ bởi AWS WAF, giải quyết các thách thức, trích xuất giá cả, so sánh các thay đổi và kích hoạt cảnh báo tự động.
