Help us understand the problem. What is going on with this article?

Google『reCAPTCHA』を突破!『2Captcha』でブラウザ操作の完全自動化に挑む

目次

はじめに

スクレイピングやブラウザ操作の自動化タスクにおける一番の難所は各種キャプチャの突破だと思います。そもそもキャプチャ機能はロボット操作されないために設置するものなので,それを突破しようとする時点でどうなのという気はしますが,それでもなんとかしたいと思うことがあります。そんなときの解決方法として「2Captcha」というサービスがあります。

最近このサービスを知り利用してみたところ,あまりに簡単にキャプチャ突破できたので,ここで紹介しようと思います。

※ ご利用は自己責任でお願いします。くれぐれも悪用しないように。

2Captchaとは

スクリーンショット 2020-11-06 17.00.05.png

ロシアの会社が提供するキャプチャ機能を突破するためのサービスです。
2CaptchaのAPIを利用することでキャプチャ処理を自動化することができます。
有料サービスですが,APIリクエスト1回の料金は0.3円程度ですので,十分安い金額だと思います。

仕組み

2Captchaというサービスでは,難関のキャプチャ機能を圧倒的な人海戦術で突破します。
ユーザーが2CaptchaのAPIを利用して解除したいキャプチャの情報を送信すると,どこかにいる大量のWorkerがキャプチャを解除し必要な情報を返してくれます。

スクリーンショット

言語対応

2CaptchaではAPIをより簡単に利用するための方法として,複数のプログラム言語でライブラリが用意されています。

2Captchaの使用準備

アカウント登録

https://2captcha.com/ にアクセス
右上の「Registration」ボタンからアカウント登録をします。
スクリーンショット 2020-11-06 13.43.33.png

メールアドレスとパスワードを設定して登録完了です。
スクリーンショット

ログインすると以下のようなページになります。
スクリーンショット

入金

残念ながら2Captchaは無料では利用できません。
ログイン後画面上部の「Add funds」から入金を行います。
※ 入金前は「0$」と表示されているはずです。
スクリーンショット 2020-11-06 16.37.01.png

利用可能な決済サービスを選んで金額を設定します。私はPayPalで払いました。
とりあえず最低入金額の3$入金しましょう。
スクリーンショット

決済が完了すると,もとの画面の表示が3$に変わっているはずです。
(決済手段によって多少時間がかかる場合があるようです。)

APIキーの取得

ログイン後画面中央にAPIキーが表示されています。
2Captchaの利用に必要なのでコピーしておきます。

スクリーンショット 2020-11-06 16.04.10.png

Python+Selenium+2Captchaで『reCAPTCHAv2』を突破

Pythonを使ってreCAPTCHAv2を突破してみます。

パッケージインストール

Python用のパッケージが用意されているので,まずはそれをインストールします。

pip install 2captcha-python

また,以下のテストではSeleniumでHeadless Chromeを扱います。
Selniumの準備はこちらの記事などを参考にしてみてください。

reCAPTCHAのデモページでテスト

今回はこちらのデモページを使って2Captchaのテストをしたいと思います。
https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php

import traceback

import chromedriver_binary
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from twocaptcha import TwoCaptcha

solver = TwoCaptcha('YOUR_API_KEY')  # 自分のAPIキーを設定してください
url = 'https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php'


def main():
    # ブラウザ起動
    options = Options()
    options.add_argument('--headless')
    driver = webdriver.Chrome(options=options)

    try:
        # ページアクセス
        driver.get(url)

        # data-sitekey属性の値を取得
        data_sitekey = driver.find_element_by_css_selector('[data-sitekey]').get_attribute('data-sitekey')

        # 2Captchaで解除コードを取得
        response = solver.recaptcha(sitekey=data_sitekey, url=url)
        code = response['code']

        # 解除コードを所定のtextareaに入力
        textarea = driver.find_element_by_id('g-recaptcha-response')
        driver.execute_script(f'arguments[0].value = "{code}";', textarea)

        # ボタンクリック
        driver.find_element_by_css_selector('button[type="submit"]').click()

        # 結果表示 (成功:"Success!", 失敗:"Something went wrong")
        result = driver.find_element_by_css_selector('body>main>h2:nth-child(3)').text
        print(result)

    except BaseException:
        print(traceback.format_exc())
    driver.quit()


if __name__ == '__main__':
    main()

実行結果:Success!

2Captchaのレスポンスには5~20秒ほどかかりましたが,確かにreCAPTCHAを突破することができました。

さいごに

いかがでしたでしょうか。
今回はGoogleのreCAPTCHAv2の突破を試しましたが,他にもreCAPTCHAv3やGoogle以外のキャプチャ機能などにも対応しているようです。
多少お金がかかってしまうことがネックですが,どうしても必要なときの一つの選択肢として持っておくと役に立ちそうです。

参考

derodero24
主に画像認識/言語処理AIの研究・開発に従事 Python,JS,Julia,FLutter
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away