Python - cầu nối giúp giải mã reCaptcha v2.0 bằng dịch vụ 2captcha
Python
70
bypass
5
White

Alex viết ngày 09/01/2020

Cùng với sự phát triển của công nghệ, việc "phức tạp hóa" reCAptcha của Google để phân biệt con người và ro-bot đã và đang trở thành rào cản lớn đối với nhiều người. Vậy làm cách nào để giải quyết vấn đề này? Thông qua bài viết này, chúng tôi sẽ giúp bạn có cái nhìn tổng quan nhất về dịch vụ giải mã google reCaptcha v2.0 bằng cách sử dụng code tự động kết nối đến dịch vụ 2captcha.

Thuật toán đơn giản mà dịch vụ này sử dụng như sau:

  1. Gửi thông tin của trang đích đến dịch vụ 2captcha (site-key - tham số này xác định xem bạn sử dụng reCaptcha nào trong danh sách reCaptcha, URL của website, tùy chọn: IP proxy). Bạn có thể tìm thấy những thông tin này bằng các công cụ phát triển web đơn giản.
  2. Nhân viên của reCaptcha tiếp nhận thông tin
  3. Trong 10-30 giây, bạn yêu cầu câu trả lời bằng token dạng g-recaptcha-response.
  4. Sử dụng g-recaptcha-response này bên trong biểu mẫu [submit] của trang đích với recaptcha.

Lưu ý: Những bước này có thể được thực hiện bằng các phương thức của HTTP: GET và POST thuần túy.

Với mục đích minh họa, chúng tôi đã thực hiện một thử nghiệm với recaptcha.
Lấy các giá trị theo yêu cầu

Dịch vụ 2captcha yêu cầu chúng tôi cung cấp các tham số sau:

Yêu cầu tham số | Giá trị

Key | SERVICE_KEY (mã dịch vụ 2captchas)

Googlekey | Giá trị thuộc tính data-sitekey trong phần tử khối g-recaptcha

URL | http://testing-ground.scraping.pro/recaptcha (url của trang đích với recaptcha)

Method | userrecaptcha

Để tìm kiếm các tham số trên, chúng ta sẽ kiểm tra mã HTML recaptcha của trang đích bằng cách nhấm phím F12. Chúng tôi tìm và lấy giá trị thuộc tính data-sitekey trong block g-recaptcha. Giá trị của nó là một hằng số cho một site, giá trị site_key được cung cấp bởi Google. Xem giá trị được bôi đậm ở ảnh bên dưới:

ReCaptcha V3

Với một vài bước đơn giản, chúng ta đã lấy được tham số Googlekey: 6Lf5CQkTAAAAAKA-kgNm9mV6sgqpGmRmRMFJYMz8

SERVICE_KEY được lấy từ mục cài đặt tài khoản của 2captcha:

Captcha Key

Gửi yêu cầu đến dịch vụ giải mã recaptcha

Bây giờ, chúng ta thực hiện yêu cầu GET hoặc POST đến dịch vụ 2captcha (in.php Endpoint) với các tham số đã đề cập ở trên:

http://2captcha.com/in.php?key=SERVICE_KEY&method=userrecaptcha&googlekey=6Lf5CQkTAAAAAKA-kgNm9mV6sgqpGmRmRMFJYMz8&pageurl

Đoạn mã Python:

import requests
from time import sleep, time
service_key = 'xxxxxxxxxxxxxx' # 2captcha service key
google_site_key = '6LfxxxxxxxxxxxxxxxxxxxxxFMz856JY'
pageurl = 'http://testing-ground.scraping.pro/recaptcha'
url = "http://2captcha.com/in.php?key=" + service_key + "&method=userrecaptcha&googlekey=" + google_site_key + "&pageurl=" + pageurl
resp = requests.get(url)
if resp.text[0:2] != 'OK':
quit('Service error. Error code:' + resp.text)
captcha_id = resp.text[3:]
2captcha 09-01-2020

Dịch vụ 2captcha hiển thị phản hồi dưới dạng: OK|Captcha_ID where Captcha_ID - là id của recaptcha trong hệ thống.

Nhận mã Token

Sau khi gửi yêu cầu, chúng ta sẽ chờ để nhận được mã Token hợp lệ. Để đảm bảo dịch vụ này đang hoạt động, chúng tôi yêu cầu 2captcha sau 5 giây gửi thông báo một lần cho đến khi nhận được mã token hợp lệ. Xem yêu cầu res.php endpoint với các tham số:

http://2captcha.com/res.php?key=SERVICE_KEY&action=get&id=Captcha_ID

fetch_url = "http://2captcha.com/res.php?key="+ service_key + "&action=get&id=" + captcha_id

for i in range(1, 10):
sleep(5) # wait 5 sec.
resp = requests.get(fetch_url)
if resp.text[0:2] == 'OK':
break
Print('Google response token: ', resp.text[3:])
Đoạn mã Python:

Gửi mã token

Bây giờ, chúng ta sẽ gửi biểu mẫu với mã token g-recaptcha-response

Tại trang đích (phía Server), mã thông báo này sẽ được kiểm tra. Trang web sẽ gửi một yêu cầu tới google để kiểm tra tính hợp lệ của mã token g-recaptcha-response: đúng hay sai, có liên quan đến trang web đó hay không,... Với thử nghiệm này, mã token đã được kiểm tra trước khi gửi biểu mẫu. Nó được thực hiện bằng cách chuyển mã token qua yêu cầu ajax (xhr) đến proxy.php, sau đó trả về phản hồi của Google nếu trang web đó đã được xác thực.

proxy.php

header('Content-type: application/json');
$response = $_GET['response'];
$secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";  
$json = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret=' . $secret . '&response=' . $response);
echo $json;

Mã Python để gửi g-recaptcha-response đến proxy.php để xác thực web bằng google

verify_url = "http://testing-ground.scraping.pro/proxy.php?response=" + resp.text[3:]
resp = requests.get(verify_url)
print(resp.text)

Kết quả trả về dạng JSON:

{ “success”: true,
“challenge_ts”: “2016-09-29T09:25:55Z”,
“hostname”: “testing-ground.scraping.pro”}

Mã Python cho việc gửi dữ liệu trên form với g-recaptcha-response:

submit_url = "http://testing-ground.scraping.pro/recaptcha
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'}
payload = {'submit': 'submit', 'g-recaptcha-response': resp.test[3:] }
resp = requests.post(submit_url, headers=headers, data=payload)

Đoạn mã hoàn chỉnh

import requests
from time import sleep, time
start_time = time()

# send credentials to the service to solve captcha
# returns service's captcha_id of captcha to be solved
url="http://2captcha.com/in.php?key=1069c3052adead147d1736d7802fabe2&method=userrecaptcha&googlekey=6Lf5CQkTAAAAAKA-kgNm9mV6sgqpGmRmRMFJYMz8&pageurl=http://testing-ground.scraping.pro/recaptcha"
resp = requests.get(url)
if resp.text[0:2] != 'OK':
    quit('Error. Captcha is not received')
captcha_id = resp.text[3:]`

# fetch ready 'g-recaptcha-response' token for captcha_id  
fetch_url = "http://2captcha.com/res.php?key=1069c3052adead147d1736d7802fabe2&action=get&id=" + captcha_id
for i in range(1, 20):
sleep(5) # wait 5 sec.
resp = requests.get(fetch_url)
if resp.text[0:2] == 'OK':
break
print('Time to solve: ', time() - start_time)

# final submitting of form (POST) with 'g-recaptcha-response' token
submit_url = "http://testing-ground.scraping.pro/recaptcha"
    # spoof user agent
headers = {'user-agent': 'Mozilla/5.0 Chrome/52.0.2743.116 Safari/537.36'}
    # POST parameters, might be more, depending on form content
payload = {'submit': 'submit', 'g-recaptcha-response': resp.text[3:]  }
resp = requests.post(submit_url, headers=headers, data=payload)

Hạn chế

Mã token g-recaptcha-response bạn nhận được (từ dịch vụ 2captcha) chỉ có hiệu lực trong 120 giây (2 phút), do đó bạn cần sử dụng mã trong form [submit] trên trang đích trong thời gian quy định.

Sử dụng các ngôn ngữ khác

Bạn cũng có thể áp dụng các ngôn ngữ khác để sử dụng dịch vụ 2captcha:
Mã C # (mã cho cùng một trang thử nghiệm)
Java example (chỉ tiếng Anh)

Giải pháp recaptcha nhanh để gửi form số lượng lớn

Hiện tại, thời gian trung bình để giải mã captcha là 25 giây. Và bạn hoàn toàn có thể tối ưu hóa các dịch vụ giải mã captcha để đạt được hiệu quả tối ưu nhất.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Alex

6 bài viết.
2 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
4 0
Sử dụng 2Captcha và Puppeteer giúp tự động hóa "vượt tường" CAPTCHA Trong khoảng hơn một thập kỷ trở lại đây, Captcha đã trở nên quen thuộc ở khắp...
Alex viết 10 tháng trước
4 0
White
3 0
Một câu chuyện rất đỗi quen thuộc và thường diễn ra như sau: Sam cần phải điền vào các biểu mẫu tự động. Nó có thể dành cho các mục đích khác nhau...
Alex viết 10 tháng trước
3 0
White
2 0
Đúng như tên gọi của mình, Captcha (Completely Automated Public Turing test to tell Computers and Humans Apart) được sử dụng để phân biệt Con người...
Alex viết 8 tháng trước
2 0
Bài viết liên quan
White
7 4
Description Mình là một thằng thích đọc sách. Nhưng lúc nào cũng bận (lười) nên cũng mấy tháng rồi chưa hoàn thành được quyển sách nào. Mình đa số...
Rice viết hơn 1 năm trước
7 4
White
5 2
Requirement Hôm bữa đọc được bài https://kipalog.com/posts/Hocvacaithienkienthuctucacduancanhanpetproject thấy hay quá. Tính cũng định viết con ap...
Rice viết hơn 1 năm trước
5 2
White
0 0
(Ảnh) (image from internet) Mở bài Chào mừng mọi người đến với bài post tiếp theo của phần “The Python Tutorial” của series “Khám phá Đại Bản Doa...
BeautyOnCode viết 27 ngày trước
0 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
6 bài viết.
2 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!