如何破解並繞過網頁上常見的Captcha驗證?以2Captcha API為例

Yanwei Liu
8 min readJun 17, 2021

2Captcha是一個非常強大的CAPTCHA辨識服務。在我們日常生活當中,如果要登入網站(如:AWS的帳戶登入頁面),可能就會遇到需要手動輸入驗證碼的視窗,有些可能單純只是英文及數字的組合。但是有些卻極度複雜,扭曲的字體及顏色,常常讓使用者感到困擾。

各種不同類型的 Captcha

2Captcha API可以解決各種千奇百怪的Captcha,如下圖所示。最簡單的文字及英文不用說,甚至是回答今天星期幾、轉動圖片成指定方向、拖動圖片、進行圖片拼圖分類都能達成,相當好用。

官方部落格

官方API文檔說明

官方Youtube教學頻道

安裝套件

pip3 install 2captcha-python

使用方式

2Captcha API支援多種不同的程式語言。如:Python、PHP、JavaScript、GO、C#以及Ruby。本文會以Python為例:

申請API的連結:https://2captcha.com/auth/register

申請完後會取得API Key,請把這組Key記下來,待會會使用到,用來建立solver

# 在安裝2captcha後,我們必須到官方網站註冊帳號並申請API
# 下方的YOUR_API_KEY就是需要填入API Key的地方
from twocaptcha import TwoCaptcha
solver = TwoCaptcha('YOUR_API_KEY')

除此之外,也可以設定更細節的參數

config = {
'server': '2captcha.com',
'apiKey': 'YOUR_API_KEY',
'softId': 123,
'callback': 'https://your.site/result-receiver',
'defaultTimeout': 120,
'recaptchaTimeout': 600,
'pollingInterval': 10,
}
solver = TwoCaptcha(**config)

我們來看看要如何使用2captcha解決驗證碼?

如果只是一般包含文字及英文的圖片,還蠻簡單的,只要使用solver.normal(‘圖片位置’)這個function,就能解決驗證碼。如果是文字性的問題,例如「假如明天是星期六,那今天會是星期幾呢?,則是透過solver.text(‘文字問題’)進行解決

result = solver.normal('path/to/captcha.jpg', param1=..., ...)result = solver.text('If tomorrow is Saturday, what day is today?', param1=..., ...)

官方Demo

import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))from twocaptcha import TwoCaptchaapi_key = os.getenv('APIKEY_2CAPTCHA', 'YOUR_API_KEY')solver = TwoCaptcha(api_key)try:
result = solver.normal('path/to/captcha.jpg')
except Exception as e:
sys.exit(e)
else:
sys.exit('solved: ' + str(result))
# result為獲得的文字結果,當我們取得文字之後呢,就可以做後續應用。例如使用Selenium的時候,遇到驗證碼問題就可以使用程式填入這個result。

費用

2captcha這樣的服務相當厲害,主要是應用人工的方式解決問題,也因此,我們除了能夠解決驗證碼之外,我們也能在2captcha這個平台上幫忙解決驗證問題,也能透過這樣的方式賺錢,取得額外收入。

根據官方網站的說明,每解決1000次的驗證碼,最低只需0.5 USD起,這價格相當實惠。我覺得如果在進行網頁爬蟲時,使用2captcha解決驗證碼問題會相當方便。

統計數字

解決一般Captchas需15秒,如果是複雜的ReCaptcha則需要45秒時間。

目前線上有590名的captchas工人、1434名ReCaptcha工人在線上協助我們解決驗證碼問題。

ReCaptcha

--

--