SeleniumとNode.jsを使ってスクレイピングする際のCAPTCHA解決方法

Sora Fujimoto
AI Solutions Architect
15-Oct-2024

スクレイピングプロジェクトの立場から、このような状況は以前にも経験があります。スクレイピングプロジェクトが順調に進んでいると、突然大量のCAPTCHAが表示され、プロセス全体が中断されることがあります。SeleniumとNode.jsをセットアップし、スクレイパーが完璧に動作しているにもかかわらず、CAPTCHAによってすべてが止まってしまうのです。その気持ちはよく分かります。しかし、心配しないでください。この問題を解決する方法はいくつかあります。今日は、SeleniumとNode.jsを使用して、これらの遅延CAPTCHAを解決し、スクレイピングプロジェクトをスムーズに進める方法を紹介します。
なぜウェブサイトはCAPTCHAを使用するのか?
解決策に入る前に、CAPTCHAの存在理由を理解することが重要です。ウェブサイトは、CAPTCHAを使用して、人間のユーザーと自動ボットを区別しています。同じIPアドレスからの複数回のアクセスやその他の自動化の兆候など、疑わしい行動が検出された場合、CAPTCHAがトリガーされる可能性があります。
これらの仕組みは、ウェブサイトをスパム、ボットトラフィック、悪意のある活動から保護するのに役立ちます。これはウェブサイトの所有者にとっては良いことですが、合法的にデータにアクセスして収集する必要があるウェブスクレイパーにとっては、大きな障壁となっています。
厄介なCAPTCHAを完全に解決できないことで苦戦していませんか?
CapSolverのAI搭載自動Webブロック技術を使って、シームレスな自動CAPTCHA解決を実現しましょう!
最高のCAPTCHAソリューションのためのボーナスコードはこちら: CapSolver: WEBS。コードを使用すると、チャージごとに追加で5%のボーナスがもらえ、無制限に使用できます。
なぜNode.jsを使うのか?
reCAPTCHAの解決方法について詳しく説明する前に、Node.jsがこのタスクに最適な選択肢である理由を理解することが重要です。
- 非同期性: Node.jsの非ブロッキングイベント駆動型アーキテクチャは、ウェブスクレイピングやAPIリクエストなど、I/O負荷の高い処理に最適です。つまり、各タスクが順番に完了するのを待つことなく、複数のタスクを同時に実行できます。
- 豊富なエコシステム: Node.jsには、npm(Node Package Manager)を通じて、ウェブスクレイピングや自動化のさまざまな側面を簡素化する、豊富なライブラリやモジュールがあります。これらのライブラリは、HTTPリクエストの処理、ブラウザの自動化、CAPTCHAの解決など、さまざまな側面を簡素化します。
- JavaScriptの統一: Node.jsを使用すると、クライアント側とサーバー側の両方でJavaScriptを使用できます。この統一により、コードベースを簡素化し、アプリケーションのさまざまな部分間でロジックとデータを簡単に共有できます。
- パフォーマンス: Node.jsは、非同期処理の高速な処理と効率性で知られるV8 JavaScriptエンジンをベースとしています。これにより、スクレイピングタスクが高速かつ効率的に実行されます。

SeleniumとNode.jsでCAPTCHAを解決できるのか?
私の経験では、SeleniumとNode.jsを組み合わせてCAPTCHAの課題を解決することは間違いなく可能です。ただし、ウェブサイトのセットアップ方法によっては、2つのアプローチを検討する必要があります。
一部のウェブサイトでは、CAPTCHAは、自動化されたブラウザの動作など、異常な活動が検出された場合にのみ表示されます。このような場合は、自然なユーザーの行動を模倣することで、CAPTCHAを完全に解決できます。つまり、アンチボットシステムから検出されるのを回避し、CAPTCHAに遭遇することなくスムーズに処理を進めることができます。
しかし、一部のウェブサイトでは、CAPTCHAがページに組み込まれ、ボット検出の結果に関係なく、すべての訪問者に表示されます。この場合、コンテンツにアクセスするには、CAPTCHAの問題を解決する必要があります。そのため、ほとんどのスクレイパーはサードパーティのCAPTCHA解決サービスを利用しています。これは、CAPTCHAの問題を解決するための最も主流かつ効果的な方法ですが、一部のサードパーティは手作業を使用しており、速度が遅く、費用も高いため、お勧めできません。代わりに、AI搭載自動Webブロック技術を利用している、市場で評判の高い会社をお勧めします。この技術については、以下で詳しく説明します。
以下では、CAPTCHAの表示を抑制する方法と、サードパーティの経済を通じて、高速で正確なソリューションを大規模に導入する方法についても紹介します。続きを読んで、さらに詳しく調べていきましょう。
方法1: SeleniumとNode.jsでUndetected ChromeDriverを使用する
まず、私が効果的だと感じている無料の方法を紹介します。SeleniumでUndetected ChromeDriverを使用する方法です。
このアプローチがなぜ有効なのかを理解するには、標準のSeleniumがどのように動作するかを最初に理解する必要があります。基本的に、SeleniumはChromeDriver(Chromiumブラウザを制御する小さな実行ファイル)を使用します。この実行ファイルは、Selenium WebDriverとブラウザ自体の仲介役を果たします。
さて、ここで私が直面した問題です。通常のChromeDriverは、ターゲットサイトに対して、自動化に関する多くの情報を漏らしています。ウェブサイトにアンチボット対策が施されている場合、標準のChromeDriverを使用すると、しばしばフラグが立てられます。Cloudflare Turnstile CAPTCHAのような、克服不可能な課題に直面するかもしれません。
そこで、Undetected ChromeDriverが役に立ちました。これは、通常のChromeDriverの修正版で、検出を回避するように設計されています。フィンガープリントのスプーフィングや通常の自動化シグナルの隠蔽などのテクニックを使用することで、このツールはSeleniumを人間らしく見せかけます。このツールは、通常のユーザーの行動を模倣することで、多くの場合CAPTCHAを解決できることに気付きました。
ただし、万能ではありません。Undetected ChromeDriverは、基本的なボット保護が施されたサイトではうまく機能しましたが、必ずしも成功するとは限りません。より高度なシステムを備えたサイトでは、この方法が効果的ではない場合もあります。
自分でセットアップしたい場合は、SeleniumとNode.jsでUndetected ChromeDriverを使用する方法の詳細なガイドを確認することをお勧めします。ただし、より厳重に保護されたウェブサイトの場合、この解決策では不十分な場合があります。
方法2: サードパーティのCAPTCHA解決サービスを使用する
Undetected ChromeDriverは、自然な行動を模倣することで、CAPTCHAの課題を解決できる場合がありますが、常に信頼できるわけではありません。多くのウェブサイトでは、より高度なアンチボット保護が導入されており、どれだけ人間らしく見えても、自動化ツールを検出できます。この場合、特に大規模なウェブスクレイピング操作を行う場合、サードパーティのCAPTCHA解決サービスを使用するのが最も実用的な解決策になります。
サードパーティのCAPTCHAソルバーを選択する理由
サードパーティのサービスが、ウェブスクレイピング中にCAPTCHAを処理する際に、一般的に好まれるアプローチである理由はいくつかあります。
-
正確性と信頼性: 自動CAPTCHA解決サービスは、高度な機械学習アルゴリズムを活用して、Google reCAPTCHAやCloudflareのTurnstileなど、複雑なCAPTCHAの課題を含む、さまざまな種類のCAPTCHAの課題を高い成功率で解決します。
-
スケーラビリティ: 大規模なスクレイピングプロジェクトでは、Undetected ChromeDriverのようなツールだけに頼るのは、信頼性が低く、時間がかかる場合があります。一方、サードパーティのサービスは、大量のCAPTCHAの課題を最小限のダウンタイムで処理するように設計されており、スクレイピングタスクがスムーズに中断されることなく実行されます。
-
費用対効果: 有料サービスを使用すると、コストが増加すると思うかもしれませんが、時間とリソースの節約の可能性を考慮してください。特に大量のスクレイピングプロジェクトでは、CAPTCHAを手動で解決したり、自動化エラーを繰り返しトラブルシューティングしたりするのは、貴重な時間を浪費する可能性があります。この部分を自動化することで、CAPTCHA解決のロジスティクスに縛られることなく、実際のデータ収集に集中できます。
-
複数のウェブサイトにおける一貫性: さまざまなウェブサイトで展開されている、reCAPTCHA、captcha、CloudflareなどのさまざまなCAPTCHAの課題は、DIYソリューションでは対応しきれない場合があります。サードパーティのサービスは、多くの場合、複数のCAPTCHAタイプに対応しており、ターゲットサイトでどのような保護が施されているかに関係なく、対応できます。
サードパーティのソリューションが最も効果的な手段である理由について説明したので、CAPTCHA解決分野のリーダーであるCapSolverをご紹介します。
なぜCapSolverなのか?
CapSolverは、さまざまな種類のCAPTCHAに対応する、高速で信頼性が高く、スケーラブルなサードパーティのCAPTCHA解決ソリューションとして、際立っています。reCAPTCHA v2またはv3、captcha、最新のCloudflare Turnstileなど、どのようなCAPTCHAに対しても、CapSolverは対応できます。
CapSolverをお勧めする理由は次のとおりです。
-
高速なサービスと技術サポート
CapSolverは、お客様に高速な対応と効率的なサービスを提供することに尽力しています。技術チームは、豊富な経験と専門知識を持ち、CAPTCHA認識問題の解決時に、迅速なサポートと解決策を提供できます。 -
迅速な更新速度
CapSolverは、強力な監視システムを備えており、サービスの更新と保守が必要になった場合に、最初に対応し、CAPTCHA認識アルゴリズムを継続的に改善および最適化することで、システムがさまざまなCAPTCHAの更新に効率的に対応し、正確な認識結果を提供し続けることを保証します。 -
豊富なサービスサポートの種類
CapSolverは、市場で最も多くの種類のCAPTCHA認識サービスをサポートしているサプライヤーであり、reCAPTCHA (v2/v3/Enterprise)、captcha(Normal/Enterprise)、Cloudflare、ImageToText、captcha、captcha V3/V4、captcha Captchaなど、世界中の95%以上のCAPTCHAニーズに対応できる、すべての主流CAPTCHAサービスタイプを網羅しています。 -
詳細なAPI機能とドキュメントチュートリアル
CapSolverは、包括的なAPI機能を提供しており、開発者はCAPTCHA認識サービスを簡単に統合できます。ドキュメントチュートリアルには、APIの基本的な使用方法だけでなく、高度な設定や一般的な問題解決方法も含まれており、CapSolverのテクノロジーをプロジェクトに効率的に適用するのに役立ちます。 -
拡張サービス
CapSolverは、APIサービスを提供するだけでなく、プログラミングを知らなくても使える拡張機能も提供しています。これは、非技術的な担当者にとって、CAPTCHAの課題に対処するためのより便利な方法となります。ブラウザ拡張機能は、最も一般的なCAPTCHAの認識をサポートしています。
CapSolverをSeleniumとNode.jsに統合する方法
CapSolverをSeleniumとNode.jsのプロジェクトに統合するのは簡単です。私のプロセスから、ステップバイステップで説明すると次のようになります。
-
CapSolver SDKをインストールする: まず、プロジェクトディレクトリで次のコマンドを実行して、CapSolver Node.js SDKをインストールします。
bashnpm install capsolver-node
-
APIキーを設定する: SDKをインストールしたら、CapSolverからAPIキーを取得する必要があります。CapSolverのウェブサイトにアクセスしてアカウントを作成し、キーを取得します。
-
コード内のCAPTCHA処理: 私のプロジェクトでは、次のようにCapSolverを実装して、CAPTCHAの課題を解決しました。
javascript
// npm install axios
const axios = require('axios');
const api_key = "YOUR_API_KEY"; // 実際のAPIキーに置き換えてください
const site_key = "0x4XXXXXXXXXXXXXXXXX"; // サイトキーに置き換えてください
const site_url = "https://www.yourwebsite.com"; // ターゲットサイトのURLに置き換えてください
async function capsolver() {
const payload = {
clientKey: api_key,
task: {
type: 'AntiTurnstileTaskProxyLess',
websiteKey: site_key,
websiteURL: site_url,
metadata: {
action: '' // オプションのアクションメタデータ
}
}
};
try {
const res = await axios.post("https://api.capsolver.com/createTask", payload);
const task_id = res.data.taskId;
if (!task_id) {
console.log("Failed to create task:", res.data);
return;
}
console.log("Got taskId:", task_id);
while (true) {
await new Promise(resolve => setTimeout(resolve, 1000)); // 1秒間遅延
const getResultPayload = {clientKey: api_key, taskId: task_id};
const resp = await axios.post("https://api.capsolver.com/getTaskResult", getResultPayload);
const status = resp.data.status;
if (status === "ready") {
return resp.data.solution.token; // 解決されたトークンを返します
}
if (status === "failed" || resp.data.errorId) {
console.log("Solve failed! response:", resp.data);
return;
}
}
} catch (error) {
console.error("Error:", error);
}
}
capsolver().then(token => {
console.log(token); // 解決されたCAPTCHAトークンを出力します
});
-
CAPTCHA解決をSeleniumに統合する: CAPTCHAの解決策を取得したら、Selenium WebDriverを使用してブラウザに注入し、フォームを送信してCAPTCHAを解決できます。
-
スクレイパーを実行する: CapSolverをSeleniumスクリプトに統合したら、CAPTCHAの妨害を心配することなく、スクレイパーを実行できます。
CapSolverをスクレイピングプロジェクトに統合することで、簡単にCAPTCHAの課題を解決し、自動化をスムーズかつ効率的に実行できます。
まとめ
ウェブスクレイピング中にCAPTCHAを処理することは、私が直面した最大の課題の1つですが、適切なツールを使用することで、これらの障害を克服する方法を学びました。Undetected ChromeDriverを使用するか、より堅牢なソリューションを選択するかにかかわらず、ウェブスクレイピングの努力を中断することなく継続できます。
大規模にスクレイピングを行う場合は、CAPTCHA解決サービスに頼ることが賢明な投資だと考えています。このサービスは高速で効率的であり、スケーラビリティを考慮して設計されているため、スクレイパーはCAPTCHAに引っかかることなく、データ収集に集中できます。
もし、CapSolverの利点を自分で試してみたいなら、こちらからサインアップしてください。すぐにCAPTCHAを解決できるようになります!
コンプライアンス免責事項: このブログで提供される情報は、情報提供のみを目的としています。CapSolverは、すべての適用される法律および規制の遵守に努めています。CapSolverネットワークの不法、詐欺、または悪用の目的での使用は厳格に禁止され、調査されます。私たちのキャプチャ解決ソリューションは、公共データのクローリング中にキャプチャの問題を解決する際に100%のコンプライアンスを確保しながら、ユーザーエクスペリエンスを向上させます。私たちは、サービスの責任ある使用を奨励します。詳細については、サービス利用規約およびプライバシーポリシーをご覧ください。