スクレイピングやブラウザ操作の自動化タスクにおいて、一番の難所は何といっても各種キャプチャの突破です。
そもそもキャプチャ機能はロボット操作されないために設置するため、それを突破しようとする時点で「?」ではありますが、それでもなんとかしたい場合の解決方法として「2Captcha」というサービスがあります。
実はこのサービスを使うと、サクッとキャプチャ突破できます。
早速紹介したいと思います。
※利用は自己責任でお願いいたします。悪用厳禁です。
2Captchaについて
ロシアの会社が提供するキャプチャ機能を突破するためのサービスです。
APIを利用することでキャプチャ処理を自動化できます。
サービスは有償になりますが、APIリクエスト1回0.3円程度と非常にリーズナブルです。
仕組みはとても単純。
APIを用いてキャプチャの情報を送ると、どこかにいるWorkerがキャプチャを解除し、必要な情報を返してくれます。
ぶっちゃけ小遣い稼ぎの人海戦術によるロック解除です。
2Captchaの使用方法
アカウントの作成と入金をする
https://2captcha.com/にアクセスします。
右上の「Registration」ボタンからアカウント登録を実施してください。
メールアドレスとパスワードを設定し、登録完了です。
簡単ですよね!
それではログインしてみましょう。
ログインすると以下の様な画面が表示されます。
続いて入金のフェーズに入ります。
2Captchaは無料で使用できないため、はじめに入金しておく必要があります。
ログイン後画面上部の「Add funds」から入金を行います。
利用可能な決済サービスを選んで金額を設定します。
私はコンビニ払いで払いました。
テストを兼ねて、最低入金額の3$の入金をしました。
APIキーの取得をする
ログイン後の画面(ダッシュボード)の中央部分にAPIキーが記載されています。
後ほど使用しますので、コピーしておきましょう。
Python+Selenium+2Captchaで『ReCaptcha V2』を突破してみる
個人的にPythonを使っているため、今回はPythonを使用してReCaptcha V2を突破してみましょう。
パッケージのインストール方法
Python用のパッケージが用意されています。
以下のコマンドを入力し、インストールしてください。
pip install 2captcha-python
また、今回はChromeDriverを使用します。
こちらのインストール手順は以下の記事からご確認ください。
pyhon3でWEBクローリングするならSelenium WebDriverを活用しよう(導入手順と使い方)
スクレイピングは情報を「抽出」すること スクレイピングとは「何らかのデータ構造から抽出すること」を指します。 簡単に言う ...
続きを見る
デモページでテストしてみる
今回はこちらのデモページを使ってテストしてみます。
(あえてセキュリティレベルの高い物を選びました)
https://2captcha.com/demo/recaptcha-v2?level=high
import requests
import json
import time
from selenium import webdriver
from selenium.webdriver.support.ui import Select # Selectタグが扱えるエレメントに変化させる為の関数を呼び出す
options = webdriver.ChromeOptions()
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36')
options.add_argument('--lang=ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7')
driver = webdriver.Chrome(options=options)
# ページにアクセス
driver.get('https://2captcha.com/demo/recaptcha-v2?level=high')
# JSでtextareaタグのdisplay:noneを削除する
driver.execute_script('var element=document.getElementById("g-recaptcha-response"); element.style.display="";')
service_key = 'YOUR_API_KEY' # 自分のAPIキーを設定してください
google_site_key = driver.find_element_by_css_selector('[data-sitekey]').get_attribute('data-sitekey')
pageurl = 'https://2captcha.com/demo/recaptcha-v2?level=high'
url = "https://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:]
fetch_url = "https://2captcha.com/res.php?key="+ service_key + "&action=get&id=" + captcha_id
for i in range(1, 10):
time.sleep(5) # wait 5 sec.
resp = requests.get(fetch_url)
if resp.text[0:2] == 'OK':
break
print('Google response token: ', resp.text)
# textareaにトークンを入力する
driver.find_element_by_id('g-recaptcha-response').send_keys(resp.text[3:])
time.sleep(5)
# ボタンクリック
driver.find_element_by_css_selector('button[type="submit"]').click()
# スリープ&クローズ
time.sleep(10)
driver.quit()
2Captchaのレスポンスには数秒(10秒程度)かかりましたが、難なく突破しました。
キャプチャを解決する方法は2Captchaのサイトに記載がある
2Captchaのアカウント作成が済んでいれば、以下のページからキャプチャの種類ごとの突破方法が記載されています。
https://2captcha.com/2captcha-api#solving_captchas
実際に使用する前に、チェックをしておくと良いですね!
最後に
思ったよりも簡単にReCaptcha V2を突破できてしまいました。
ReCaptcha V3やGoogle以外のキャプチャに関しても対応しているようなので、APIを確認してみてください。
かかった費用と時間(コスト)は非常に小さなものでした。
どうしても困ってしまったとき、最小限の費用で済ませたい場合に活用してみてください。