PythonでCAPTCHAをバイパス

PythonでCAPTCHAをバイパス
「Python」ロゴ
  • 「PHP」ロゴ
  • 「Python」ロゴ
  • 「Java」ロゴ
  • 「C#」ロゴ
  • 「Ruby」ロゴ
  • 「Golang」ロゴ
  • 「JavaScript」ロゴ

どんなサイトでもCAPTCHAを自動突破するためのPythonパッケージ

reCAPTCHAArkose captchaGeetest、その他のCAPTCHAをバイパスする2CaptchaCAPTCHA突破サービスのAPIを使って簡単に統合できるPythonのパッケージ。

GitHubに公開されているのは、PythonとSeleniumを使ったキャプチャバイパスのサンプルです。このリポジトリには、キャプチャを解くプロセスを自動化するための、すぐに使えるスクリプトが含まれており、既存のプロジェクトに簡単に統合することができます。

クイックスタート

インストレーション

スクリプトパッケージはパッケージインストーラーを使うか手動でインストールできます

Pip

ライブラリパッケージを自動インストールするには、Pythonの標準パッケージソリューション、Pipを使う必要があります。こちらのリンクからダウンロードし、説明に従ってインストールしてください。アプリケーションをインストールした後はコマンドを使います:

pip3 install 2captcha-python

弊社のAPIと簡単に統合するためのライブラリとモジュールが見つかるGitHubレポジトリをご参照ください。

設定

インストール済みパッケージを設定するのに必要なすべてのパラメータの概要

TwoCaptchaクラスのインスタンスはこのように作成できます:

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)
TwoCaptchaのインスタンスオプション
オプションデフォルトの値概要
サーバー'2captcha.com'APIサーバー。アカウントを登録している場合、'rucaptcha.com'に設定できます。
softId-2Captcha ソフトウェアカタログで投稿した後に入手したソフトウェアID
callback-CAPTCHA認証結果を受け取るウェブサーバーのURL。URLはご利用のアカウントのpingback設定でまずは登録してください。
defaultTimeout120reCAPTCHA以外のすべてのタイプのCAPTCHAで数秒経つとポーリングがタイムアウトします。res.php APIエンドポイントからモジュールがどれくらいの時間解答を入手しようとするか定義付けします。
recaptchaTimeout600reCAPTCHAでは数秒でポーリングがタイムアウトします。res.php APIエンドポイントからモジュールがどれくらいの時間解答を取得しようとするかを定義付けします。
pollingInterval10res.php APIエンドポイントへのリクエストの合間の数秒ごとのインターバル。値を5秒以下にすることは推奨されていません。
重要事項: 一旦callbackTwoCaptchaインスタンスに定義付けされると、 すべてのメソッドはCAPTCHA IDのみを返し、結果を得るためにAPIをポールしません。結果はcallback URLに送られます。解答を手動で入手するにはgetResultメソッドをご利用ください。

CAPTCHAを突破

画像ベースのCAPTCHAを提出する際には2Captchaの作業員が適切に回答するために、追加のオプションを提供することができます。

Captchaオプション
オプションデフォルトの値概要
numeric0CAPTCHAが数字や他の記号を含むかどうかを定義付けします。API docでもっと詳しい情報を知りましょう。
minLength0解答の最小の長さ
maxLength0解答の最大の長さ
phrase0解答が複数の単語を含むかどうかを定義付けします。
caseSensitive0解答が大文字と小文字を区別するかどうかを定義付けする
calc0CAPTCHAが計算を要求することを定義付けする
lang-CAPTCHAの言語を定義付けします。a href='/2captcha-api#language'>対応する言語のリストをご確認ください。
hintImg-CAPTCHAで作業者にヒントを示す画像
hintText-CAPTCHAで作業者に示されたヒントやタスクテキスト
simpleCaptcha

Normal CAPTCHA(画像の上の歪んだテキスト)をバイパスするには次のメソッドを使ってください。このメソッドは画像のテキストを認証するのにも使われます。

result = solver.normal('path/to/captcha.jpg', param1=..., ...)
textCaptcha

このメソッドははっきりとしたテキストの中で提供される質問に解答することを要求するCAPTCHAをバイパスするのに使われます。

result = solver.text('If tomorrow is Saturday, what day is today?', param1=..., ...)
recaptchaV2

reCAPTCHA V2を突破するのにこのメソッドを使い、保護をバイパスするためにトークンを取得しましょう。

result = solver.recaptcha(sitekey='6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-',
  url='https://mysite.com/page/with/recaptcha',
  param1=..., ...)
recaptchaV3

このメソッドはreCAPTCHA V3ソルバーを提供し、トークンを返します。

result = solver.recaptcha(sitekey='6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-',
  url='https://mysite.com/page/with/recaptcha',
  version='v3',
  param1=..., ...)
funCaptcha

FunCaptcha (Arkoselabs)突破メソッド。トークンを返します。

result = solver.funcaptcha(sitekey='6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-',
  url='https://mysite.com/page/with/funcaptcha',
  param1=..., ...)
geeTest

GeeTestパズルCAPTCHAを突破する方法。JSONとしてトークンのセットを返します。

result = solver.geetest(gt='f1ab2cdefa3456789012345b6c78d90e',
  challenge='12345678abc90123d45678ef90123a456b',
  url='https://www.site.com/page/',
  param1=..., ...)
keyCaptcha

KeyCAPTCHAを突破するトークンベースの方法

result = solver.keycaptcha(s_s_c_user_id=10,
    s_s_c_session_id='493e52c37c10c2bcdf4a00cbc9ccd1e8',
    s_s_c_web_server_sign='9006dc725760858e4c0715b835472f22-pz-',
    s_s_c_web_server_sign2='2ca3abe86d90c6142d5571db98af6714',
    url='https://www.keycaptcha.ru/demo-magnetic/', 
    param1=..., ...)
capy

CapyパズルCAPTCHAをバイパスするためのトークンベースメソッド

result = solver.capy(sitekey='PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v',
  url='http://mysite.com/',
  api_server='https://jp.api.capy.me/',
  param1=..., ...)
grid

Gridメソッドは元々はOld reCAPTCHA V2と呼ばれていました。このメソッドは画像でグリッドを適用し、特定のグリッドボックスをクリックすることを要求するタイプのCAPTCHAをバイパスするために使用されます。ボックスの数を返します。

result = solver.grid('path/to/captcha.jpg', param1=..., ...)
canvas

Canvasメソッドは画像にあるオブジェクトの周りに線を引く必要があるときに使われます。多角形を描くために、ポイントのセットを返します。

result = solver.canvas('path/to/captcha.jpg', param1=..., ...)
clickCaptcha

ClickCaptchaメソッドはCAPTCHA画像上で座標上のポイントを返します。画像の特定のポイントをクリックする必要があるときに使われます。

result = solver.coordinates('path/to/captcha.jpg', param1=..., ...)
rotateCaptcha

このメソッドはアイテムを回転させることを尋ねるCAPTCHAに使用されます。ほとんどの場合FunCaptchaのバイパスに使われます。回転の角度を返します。

result = solver.rotate('path/to/captcha.jpg', param1=..., ...)

その他のメソッド

メインスクリプトの作業中に使用される追加の有効なメソッド

send / getResult

このようなメソッドは手動CAPTCHA提出と解答のポーリングに使用されます。

import time
. . . . . 

id = solver.send(file='path/to/captcha.jpg')
time.sleep(20)

code = solver.get_result(id)

balance

このメソッドを使ってアカウントの残高を入手する。

balance = solver.balance()

report

このメソッドを使ってCAPTCHAの回答が良いか悪いかを報告する。

solver.report(id, True) # captcha solved correctly
solver.report(id, False) # captcha solved incorrectly

処理エラー

リクエスト処理中にサービスによって返されたスタンダードエラーの可能なバリアント

エラーが発生した場合CAPTCHAソルバーが例外を投げます。こういったケースは適切に扱うことが必要です。例外を処理する際にはtry/exceptを使うことをおすすめします。

Try:
    result = solver.text('If tomorrow is Saturday, what day is today?')
Except ValidationException as e:
    # invalid parameters passed
  print(e)
Except NetworkException as e:
  # network error occurred
  print(e)
Except ApiException as e:
  # api respond with error
  print(e)
Except TimeoutException as e:
  # captcha is not solved so far
  print(e)

プロキシ

recaptcha、funcaptcha、geetestメソッドの追加のアーギュメントとしてプロキシを通すことができます。プロキシはCAPTCHAを突破するためにAPIに転送されます。

proxy={
    'type': 'HTTPS',
    'uri': 'login:password@IP_address:PORT'
}

非同時性のコール

例えばasyncioを使って非同時性のコールを作成することもできます。

import asyncio
import concurrent.futures
from twocaptcha import TwoCaptcha

captcha_result = await captchaSolver(image)

async def captchaSolver(image):
    loop = asyncio.get_running_loop()
    with concurrent.future.ThreadPoolExecutor() as pool:
        result = await loop.run_in_executor(pool, lambda: TwoCaptcha(API_KEY).normal(image))
        return result

サービスAPIと統合するための他の言語