Goを使ってCAPTCHAをバイパス

Go langモジュールを使ってオンラインでCAPTCHA突破

reCAPTCHAhCaptchaArkose captchaGeetest、その他のCAPTCHAをバイパス、解除する2Captcha CAPTCHA突破サービスのAPIと簡単に統合するためのGolangパッケージ。

クイックスタート

インストレーション

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

GitHub

APIクライアントをインストールするにはこちらをご利用ください:

go get -u github.com/2captcha/2captcha-go

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

設定

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

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

client := api2captcha.NewClient('YOUR_API_KEY')

あなたも作成済みのインスタンスをカスタマイズする能力をお持ちです。

client.SoftId = 123
client.Callback = "https://your.site/result-receiver"
client.DefaultTimeout = 120
client.RecaptchaTimeout = 600
client.PollingInterval = 100
クライアントインスタンスのオプション
オプションデフォルトの値概要
softId-2Captcha ソフトウェアカタログで投稿した後に入手したソフトウェアID
callback-CAPTCHA認証結果を受け取るウェブサーバーのURL。URLはご利用のアカウントのpingback設定でまずは登録してください。
defaultTimeout120reCAPTCHA以外のすべてのタイプのCAPTCHAで数秒経つとポーリングがタイムアウトします。res.php APIエンドポイントからモジュールがどれくらいの時間解答を入手しようとするか定義付けします。
recaptchaTimeout600reCAPTCHAでは数秒でポーリングがタイムアウトします。res.php APIエンドポイントからモジュールがどれくらいの時間解答を取得しようとするかを定義付けします。
pollingInterval10res.php APIエンドポイントへのリクエストの合間の数秒ごとのインターバル。値を5秒以下にすることは推奨されていません。
重要事項: 一旦callbackクライアントインスタンスに定義付けされると、すべてのメソッドはCAPTCHA IDを返し、結果を取得するためにAPIをポールしません。結果はcallback URLに送信されます。解答を手動で取得するにはgetResultメソッドを使ってください。

CAPTCHAを突破

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

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

基本例

下のサンプルはエラーハンドリングと共に基本的なソルバーコールのサンプルを示します。

cap := api2captcha.Normal{
   File: "/path/to/normal.jpg",
}

code, err := client.Solve(cap.ToRequest())
if err != nil {
  if err == api2captcha.ErrTimeout {
    log.Fatal("Timeout");
  } else if err == api2captcha.ErrApi {
    log.Fatal("API error");
  } else if err == api2captcha.ErrNetwork {
    log.Fatal("Network error");
  } else {
    log.Fatal(err);
  }
}
fmt.Println("code "+code)

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

cap := api2captcha.Normal{
    File: "/path/to/normal.jpg",
    Numeric: 4,
    MinLen: 4,
    MaxLen: 20,
    Phrase: true,
    CaseSensitive: true,
    Lang: "en",
    HintImgFile: "/path/to/hint.jpg",
    HintText: "Type red symbols",
 }

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

cap := api2captcha.Text{
    Text: "If tomorrow is Saturday, what day is today?",
    Lang: "en",
 }

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

cap := api2captcha.ReCaptcha{
    SiteKey: "6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-",
    Url: "https://mysite.com/page/with/recaptcha",
    Invisible: true,
    Action: "verify",
 }
 req := cap.ToRequest()
 req.SetProxy("HTTPS", "login:password@IP_address:PORT")
 code, err := client.solve(req)

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

cap := api2captcha.ReCaptcha{
    SiteKey: "6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-",
    Url: "https://mysite.com/page/with/recaptcha",
    Version: "v3",
    Action: "verify",
    Score: 0.3,
 }
 req := cap.ToRequest()
 req.SetProxy("HTTPS", "login:password@IP_address:PORT")
 code, err := client.solve(req)

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

cap := api2captcha.FunCaptcha{
    SiteKey: "69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC",
    Url: "https://mysite.com/page/with/funcaptcha",
    Surl: "https://client-api.arkoselabs.com",
    UserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36",
    Data: map[string]string{"anyKey":"anyValue"},   
 }
 req := cap.ToRequest()
 req.SetProxy("HTTPS", "login:password@IP_address:PORT")
 code, err := client.solve(req)

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

cap := api2captcha.GeeTest{
    GT: "f2ae6cadcf7886856696502e1d55e00c",
    ApiServer: "api-na.geetest.com",
    Challenge: "12345678abc90123d45678ef90123a456b",
    Url: "https://mysite.com/captcha.html",
 }
 req := cap.ToRequest()
 req.SetProxy("HTTPS", "login:password@IP_address:PORT")
 code, err := client.solve(req)

このメソッドを使ってhCaptchaチャレンジをチッパします。CAPTCHAをバイパスするためのトークンが返されます。

cap := api2captcha.HCaptcha{
    SiteKey: "10000000-ffff-ffff-ffff-000000000001",
    Url: "https://mysite.com/captcha.html",   
 }
 req := cap.ToRequest()
 req.SetProxy("HTTPS", "login:password@IP_address:PORT")
 code, err := client.solve(req)

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

cap := api2captcha.KeyCaptcha{
    UserId: 10,
    SessionId: "493e52c37c10c2bcdf4a00cbc9ccd1e8",
    WebServerSign: "9006dc725760858e4c0715b835472f22",
    WebServerSign2: "9006dc725760858e4c0715b835472f22",
    Url: "https://www.keycaptcha.ru/demo-magnetic/",   
 }
 req := cap.ToRequest()
 req.SetProxy("HTTPS", "login:password@IP_address:PORT")
 code, err := client.solve(req)

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

cap := api2captcha.Capy{
    SiteKey: "PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v",
    Url: "https://www.mysite.com/captcha/",   
 }
 req := cap.ToRequest()
 req.SetProxy("HTTPS", "login:password@IP_address:PORT")
 code, err := client.solve(req)

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

cap := api2captcha.Grid{
    File: "path/to/captcha.jpg",
    Rows: 3,
    Cols: 3,
    PreviousId: 0,
    CanSkip: false,
    Lang: "en",
    HintImageFile: "path/to/hint.jpg",
    HintText: "Select all images with an Orange",
}

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

cap := api2captcha.Canvas{
    File: "path/to/captcha.jpg",
    PreviousId: 0,
    CanSkip: false,
    Lang: "en",
    HintImageFile: "path/to/hint.jpg",
    HintText: "Draw around apple",
}

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

cap := api2captcha.Coordinates{
    File: "path/to/captcha.jpg",
    Lang: "en",
    HintImageFile: "path/to/hint.jpg",
    HintText: "Connect the dots",
}

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

cap := api2captcha.Rotate{
    File: "path/to/captcha.jpg",
    Angle: 40,
    Lang: "en",
    HintImageFile: "path/to/hint.jpg",
    HintText: "Put the images in the correct way",
}

その他のメソッド

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

send / getResult

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

id, err := client.Send(cap.ToRequest())
if err != nil {
   log.Fatal(err);
}

time.Sleep(10 * time.Second)

code, err := client.GetResult(id)
if err != nil {
   log.Fatal(err);
}

if code == nil {
   log.Fatal("Not ready")
}

fmt.Println("code "+*code)

balance

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

balance, err := client.GetBalance()
if err != nil {
   log.Fatal(err);
}

report

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

err := client.Report(id, true) // solved correctly
err := client.Report(id, false) // solved incorrectly

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