📘

Puppeteerでの2captcha-solverプラグインの使い方

2022/10/05に公開

この記事では2captcha-solverプラグインをPuppeteerで使う方法を説明します。 PuppeteerはNodeライブラリで、ブラウザを起動し、その中で複数のアクションを実行できます。使い方の説明はこちらhereをご参照ください。ライブラリ、Puppeteerはパーサーやブラウザ内のオートメーションが必要なその他のタスクを書くので、あらゆる自動化に適しています。Puppeteerの魅力はそのシンプルさとheadlessモードで作業できる能力になります。自動化である事実を隠すPuppeteer用の既成のソリューションが存在します。自動化していることを隠すことは、ブラウザがより本物の人に見え、露呈しないのでパーサーを開発する際に重要です。

この記事ではPuppeteerpuppeteer-extrapuppeteer-extra-plugin-stealthを使用します。puppeteer-extraはPuppeteer周辺の軽量ラッパーで、puppeteer-extra-plugin-stealth は自動化のトレースを隠すためにデザインされて、puppeteer-extraに追加されたものです。
次のステップバイステップガイドで、https://2captcha.com/demo/recaptcha-v2でCAPTCHAを突破する方法をご説明します。

1. コンポーネントをインストールする

Puppeteerと他の必要なパッケージをインストールする:

npm i puppeteer puppeteer-extra puppeteer-extra-plugin-stealth 

2. プラグインをセットアップする

プラグインを使ってアーカイブ(archive)をダウンロードし、プロジェクトのルート内のフォルダ"/2captcha-solver"に解凍します。 プラグインには特定のCAPTCHAへのソリューション、プロキシ(proxy)のサポートなどたくさんの設定があります。設定は/common/config.jsのファイルにあります。自動reCAPTCHA V2ソリューションの設定を追加するには/common/config.jsファイルを開き、autoSolveRecaptchaV2 フィールドの値をtrueに変更してください。 次にプラグインをコンフィグする必要があります。:

Enter your API key in the plugin settings fileプラグイン設定ファイル
./common/config.jsにAPIキーを入力します。キーはapiKeyフィールドの値に入れる必要があります。APIキーのコピーはこのページ(page)で確認、コピーできます。
サンプル: apiKey: "8080629c1221fdd82m8080000ff0c99c"
インストール後、拡張機能設定を開くのを無効にします。これを行うには ./manifest.jsonのファイルで次の行を削除します。:

"options_ui": {
    "page": "options/options.html",
    "open_in_tab": true
},

3. ブラウザ自動化

Puppeteerでプラグインを起動、初期化します。:
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');

const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
const { executablePath } = require('puppeteer'); 

(async () => {
  const pathToExtension = require('path').join(__dirname, '2captcha-solver');
  puppeteer.use(StealthPlugin())
  const browser = await puppeteer.launch({
    headless: false,
    args: [
      `--disable-extensions-except=${pathToExtension}`,
      `--load-extension=${pathToExtension}`,
    ],
    executablePath: executablePath()
  });

  const [page] = await browser.pages()
})();

3.1 ページを開く

https://2captcha.com/demo/recaptcha-v2のページを開き、CAPTHAを送信します。 page.goto()を使い、https://2captcha.com/demo/recaptcha-v2のページに進みます。 次に何らかのソリューションのCAPTCHAを送信する必要があります。これは手動でも自動でも実行できます。 サンプルではCAPTHCAを手動で送信するのですが、そのためにCSSセレクター、.captcha-solverのあるプラグインボタンが使えるようになるまで待つ必要があり、それからこのボタンをクリックします。ボタンをクリック後、CAPTCHAはソリューションのサービスに進みます。

// Opening a page
await page.goto('https://2captcha.com/demo/recaptcha-v2') 

// Waiting for the element with the CSS selector ".captcha-solver" to be available
await page.waitForSelector('.captcha-solver')
// Click on the element with the specified selector
await page.click('.captcha-solver')

3.2 CAPTCHAのステータスを確認する

サービスからレスポンスを受信した後、プラグインボタン.captcha-solverはデータ属性data-stateの値を変更します。このdata-state属性の値を観察することで、プラグインの状態を監視することができます。CAPTCHA突破後、この属性の値は"solved"に変わります。 Data-state属性の値の概要:

属性 概要
data-state="ready" プラグインはCAPTCHAを解除する用意ができています。CAPTCHAを送信するにはボタンをクリックしてください。
data-state="solving" CAPTCHA解除
data-state="solved" CAPTCHAがうまく解除できました。
data-state="error" レスポンスを受信する際にエラーが発生したか、CAPTCHAがうまく解除できませんでした。

このステップではCAPTCHAを突破するまで待つ必要があり、属性の値が"solved"に変わった後、CAPTHCHA突破成功を知らせます。このステップの後は必要なアクションを行えます。

// By default, waitForSelector waits for 30 seconds, but this time is usually not enough, so we specify the timeout value manually with the second parameter. The timeout value is specified in "ms".
await page.waitForSelector(`.captcha-solver[data-state="solved"]`, {timeout: 180000})

4. アクションの実行

CAPTCHA突破後、ページで必要なアクションの実行を開始できます。サンプルでは受信したCAPTCHAソリューションAの精密性を確認するために”Check”ボタンをクリックします。チェックをうまく通過すると、"Captchaを無事突破しました!"というメッセージが表示されます。

// Click on the "Check" button to check the successful solution of the captcha.
await page.click("button[type='submit']")

おめでとうございます。CAPTCHAをうまく通過できました!サンプルの完全なソースコードはこちら(here)。

役立つ情報

● プラグインにはたくさんの設定があります。例えば特定のタイプのCAPTCHAの自動ソリューションやproxyのサポート、すべての設定は解凍していないプラグインのあるフォルダの中のファイル/common/config.jsにあります。reCAPTCHA V2を自動送信するにはファイル/common/config.jsautoSolveRecaptchaV2フィールドの値をtrueに変更してください。 ● sandboxモードを使ってテストすることが可能です。sandboxモードでは送信されたCAPTCHAはあなたに届きます。sandboxについて学ぶにはこちら(here)をお読みください。 ● headlessモードでPuppeteerを実行する際はプラグインの読み込みに対応していません。この問題を解決するにはxvfbを利用できます。
役立つリンク
● サンプルの完全なソースコードはこちら(here)
2captcha-solver (ソースコード)
2captcha-solver (chrome web store)
● デベロッパー向け2captchaサービスのFAQ https://2captcha.com/support/faq/developer
Puppeteer
puppeteer-extra
puppeteer-extra-plugin-stealth
xvfb

Discussion