Menu

NodeJS と Puppeteer で Recaptcha V2 をバイパスする


何を学ぶのか

  • 新しくインストールされたUbuntu OSでNodeJSとウェブストーム IDE をセットアップします。
  • アンチキャプチャオフィシャルおよびpuppeteer npmモジュールをインストールしてインポートします。
  • NodeJS スクリプトを使用して Recaptcha を使用して これ フォームを送信する方法を学習します。
  • バックグラウンドモードでクロムを開き、ページに移動するpuppeteer スクリプトを記述する方法を説明します。
  • ページのスクリーンショットを撮ってディスクに保存する方法を説明します。
  • CSS セレクタを使用してフォームテキストフィールドに入力する方法を説明します。
  • Recaptcha v2 を解決し、隠しテキスト領域#g-recaptcha-response を入力し、フォームを送信する方法を学びます。
  • Javascript ES6 とNodeJS の関連知識を確認します。
Source code

新しくインストールされたUbuntu OSでNodeJSとウェブストーム IDE をセットアップします。

  • Ubuntu OS: Ubuntu OS のインストールは必須ではありませんが、推奨事項です。 Windows から NodeJS を実行することもできますが、コードに互換性がない場合があります。
  • Node JS: お使いのオペレーティング システム用の NodeJS をダウンロードします ここ
  • コード エディター: VS Code または Atom をお勧めします。どちらも無料の IDE です。

curl と nodejs を Ubuntu にインストールします。

apt update
apt install -y curl
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
apt install -y nodejs

アンチキャプチャオフィシャルおよびpuppeteer npmモジュールをインストールしてインポートします。

アンチキャプチャおよび Puppeteer npm モジュールをインストールします。

npm install @antiadmin/anticaptchaofficial puppeteer

新しいファイル index.js を作成し、以下を追加します。 「YOUR_API_KEY」を API 設定 からのキーに置き換えます:

const ac = require("@antiadmin/anticaptchaofficial");
      const pup = require("puppeteer");
      ac.setAPIKey('YOUR_API_KEY');

バックグラウンドモードでクロムを開き、ページに移動するpuppeteer スクリプトを記述する方法を説明します。

次のコードを追加して最初にキャプチャを解決し、フォームにログインとパスワードを入力し、g-response トークンを id="g-recaptcha-response" でテキストエリアに貼り付け、フォームを送信します。

const login = 'mylogin';
const password = 'my strong password';

(async () => {

    console.log('solving recaptcha ...');
    let token = await ac.solveRecaptchaV2Proxyless('https://anti-captcha.com/demo?page=recaptcha_v2_textarea', '6LfydQgUAAAAAMuh1gRreQdKjAop7eGmi6TrNIzp');
    if (!token) {
        console.log('something went wrong');
        return;
    }

    console.log('opening browser ..');
    const browser = await pup.launch();

    console.log('creating new tab ..');
    const tab = await browser.newPage();

    console.log('changing window size .. ');
    await tab.setViewport({ width: 1360, height: 1000 });

    console.log('opening target page ..');
    await tab.goto('https://anti-captcha.com/demo?page=recaptcha_v2_textarea', { waitUntil: "networkidle0" });

    console.log('filling login input ..');
    await tab.$eval('#contentbox > form > div > div:nth-child(1) > span > input', (element, login) => {
        element.value = login;
    }, login);

    console.log('filling password input');
    await tab.$eval('#contentbox > form > div > div:nth-child(2) > span > input', (element, password) => {
        element.value = password;
    }, password);

    console.log('setting recaptcha g-response ...');
    await tab.$eval('#g-recaptcha-response', (element, token) => {
        element.value = token;
    }, token);

    console.log('submitting form .. ');
    await Promise.all([
        tab.click('#contentbox > form > div > div.tac.padding20px > button'),
        tab.waitForNavigation({ waitUntil: "networkidle0" })
    ]);

    console.log('making a screenshot ...');
    await tab.screenshot({ path: 'screenshot.png' });

    console.log('closing browser .. ');
    await browser.close();

})();

最初にキャプチャを解決してから、ページに移動して結果を貼り付けます。サイトキーとトークンの有効期間が 120 秒であることは既にわかっているため、Recaptcha で機能します。

最終ページのスクリーンショットは、screenshot.png に保存されます。ブラウザで何が起こっているかを確認したい場合は、ヘッドレス モードをオフにします。

console.log('opening browser ..');
//const browser = await pup.launch();
const browser = await pup.launch({ headless: false });

Javascript ES6 とNodeJS の関連知識を確認します。

フォームの一部として「g-recaptcha-response」テキストエリアを使用して、最も簡単な実装方法で Recaptcha V2 を使用してフォームをバイパスする方法を学習しました。あなたの知識を広げたいと思うかもしれません:

Github

https://github.com/anti-captcha/solving-captcha-concepts/blob/master/tutorial1.js