2CaptchaとPuppeteerを使ってCAPCHA突破を自動化
この内容はYouTubeでも視聴可能です。動画のほうが理解しやすい場合はこちらをチェックしてみてください。
https://youtu.be/wsDRkAD6lPs
CAPTCHAは10年以上にわたってインターネット上で見てきたと思います。ログイン、登録、またはどこかにコメントを投稿しようとするときに、道を塞ぐ曲がりくねった線、単語、または数字のことです。
CAPTCHA (またはコンピューターと人間を区別するためのCompletely Automated Public Turing test-完全に自動化された公開チューリング テスト-) は人間を通過させ、ロボット (プログラム) を追い出すゲートとして設計されています。曲がりくねった線や波打つ単語は最近ではあまり見られなくなり、GoogleのreCAPTCHA version 2に置き換えられました。これはあなたの人間性指数が十分に高いと見なされる限り、緑色のチェックマークを付けるCAPTCHAです。
スコアが Googleが考える人間性指数の閾値を超えていない場合、reCAPTCHAはパズルのような画像チャレンジをけしかけます。これは、驚くべきことに実際には単語を解読するよりも面倒なものにできています。
CAPTCHAは人間にとって煩わしいものですが、少なくともその役割を果たしていれば許容できますが、CAPTCHAを自動化する方が、人間であることを証明するよりも簡単です。
2Captchaの仕組み
2Captchaは、ほぼ同じ2つのAPIエンドポイントを使用して、多数の異なるスタイルのCAPTCHAを突破します。最初のリクエストは、CAPTCHAを解決するために必要なデータを配信し、リクエスト ID を返します。画像ベースのCAPTCHAの場合、データはCAPTCHA 自体のbase64化された画像になります。
リクエスト ID を取得したら、リクエストを結果のエンドポイントに送信し、ソリューションの準備が整うまでポーリングする必要があります。
reCAPTCHA v2の場合、話は少し異なります。上記と同じ2段階プロセスに引き続き取り組んでいますが、別のデータを送信しています。この場合、iframe がロードされているかどうかに関係なく、含まれている
取得したレスポンスは、フォームと一緒に送信する必要があるトークンであり、g-recaptcha-responseのIDを持つ非表示のテキストフィールドに入力する必要があります。下の画像はその場所を示しており、ページに表示するためだけにdisplay: none cssプロパティを無効にしました。編集可能にすることで、2Captchaのレスポンスを手動で簡単にテストして、統合のテストの変数を減らすことができます。
画像ベースのCAPTCHAの場合、結果はほぼ瞬時に利用できます。 reCAPTCHA v2 の場合、15 ~ 30秒以上かかることがあります。
Puppeteerを使った自動化
CAPTCHAについて心配する前に、他のすべてを処理する必要があります。そしてその前には使うべき武器を選択する必要があります。この投稿では、次の3つの理由からGoogle Chromeを使用します。
Puppeteer API経由で非常に簡単に自動化できる
ヘッドレスでも、操作が簡単でポータブルなGUIを使用しても実行できる
世界で最も一般的なブラウザであるため、ウェブサイトにある他の自動化防止のトリック (Seleniumや PhantomJSのブロックなど) が機能する可能性は低い
Puppeteerの使用
そうしたくない場合はChromeをインストールする必要はありません。PuppeteerにはChromiumのインストールなど必要なものがすべて付属しています。必要に応じてChromeのローカルインストールを使用することもできますが、それはあなた次第です
$ npm install puppeteer
プログラムを一走りさせて、すべてがつながっていることを確認してください。この練習では、Redditの登録ページを自動化します。これがたまたまreCAPTCHAを使用した最初のページだったからです。
222222