Node.jsを使用してCloudflareを解決する方法(Puppeteer + Scrapeless)
Advanced Bot Mitigation Engineer
TL;DR:
- **Cloudflareは訪問者ではなくブラウザをスコアリングします。**フィンガープリントの一貫性、行動の信号、出口IPを読み取り、信頼するブラウザに対して
cf_clearanceクッキーを設定します。Node.jsでそれをクリアするということは、パズルに答えるのではなく、信頼されるブラウザであることを意味します。 - ローカルのNode.jsブラウザは3つの軸でそのスコアリングに失敗します:
navigator.webdriverの明示、ヘッドレスのデフォルトフィンガープリント、データセンターの出口IPです。3つすべてを修正するためにステルスプラグインを重ねるのはメンテナンスの負担です。 - Scrapeless Scraping Browserはレンダリング中にチャレンジをクリアします — 本物の自己開発したChromium、一貫したセッションごとのフィンガープリント、195か国以上の住宅用出口を持ち、1つのWebSocketエンドポイントで接続に成功します。
- あなたのNode.jsは標準のPuppeteerのままです。
puppeteer.connect()で接続し、チャレンジ後のコンテンツを待ち、ページを読み取ります — 唯一の変更は接続URLです。 - 確認済みのライブ: クラウドブラウザを介したPuppeteerセッションはCloudflareのチャレンジページをクリアし、成功マーカー
You bypassed the Cloudflare challenge! :Dを読み取り、cf_clearanceクッキーを受け取りました。 - 無料で始められます。 新しいScrapelessアカウントには、無料のScraping Browserランタイムが含まれています — app.scrapeless.comでサインアップしてください。
はじめに: Node.jsでCloudflareをクリアするのはブラウザの問題です
Cloudflareのチャレンジは、デコードする画像CAPTCHAではありません。それはバックグラウンドで実行され、ページを読み込んだブラウザを評価します — フィンガープリントが内部的に一貫しているか、人間らしいインタラクション信号が見られるか、出口IPの評判が良好か。スコアが合格すると、Cloudflareはcf_clearanceクッキーを設定し、実際のページが読み込まれます。合格しない場合は、コンテンツの代わりに中間ページが表示されます。
これにより、Node.jsのタスクが再定義されます。提出する回答はありません — 仕事はCloudflareがすでに信頼しているブラウザを提示することです。Puppeteerによって駆動されるローカルのヘッドレスChromiumはできません: navigator.webdriverプロパティを通じて自動化を明示し、ヘッドレスデフォルトのフォントとキャンバス動作を有し、IPの評判サービスがすでに知っているIPから出ることになります。ステルスプラグインを装着し、その後Chromiumと検出ツールが進化するたびに修正し続けることができます。このガイドは短い道を選びます: Standard PuppeteerからScrapeless Scraping Browserを駆動し、フィンガープリント、行動、および出口IPをサーバー側で処理し、チャレンジが通常のレンダリング中にクリアされるようにします。
Cloudflareが実際に確認すること
Cloudflareのドキュメントは、訪問者の妨害なしに実行される検証ステップを説明しています。実際には、3つのことを評価し、合格するとcf_clearanceクッキーを授与します — 標準のHTTPクッキーです。合格する要素は次のとおりです:
| Cloudflareが読む内容 | ローカルのNode.jsブラウザがそれに失敗する理由 |
|---|---|
| フィンガープリントの一貫性 | ヘッドレスデフォルトとwebdriverフラグが本物のChromeと矛盾する |
| 行動信号 | 一貫性のないブラウザ表面によるスクリプトタイミング |
| 出口IPの評判 | データセンターIPは住宅用IPよりもスコアが悪い |
一貫して信頼できるブラウザが単一の回避手段よりも重要です — そのため、すべて3つをサーバー側に移すことが、ステルスプラグインを重ねるよりも耐久性があります。
なぜScrapeless Scraping Browserなのか
Scrapeless Scraping Browserは、ウェブクローラーやAIエージェント向けに設計されたカスタマイズ可能な、対検出のクラウドブラウザです。特にCloudflareに対して、以下の利点があります:
- 本物の自己開発したChromiumが、Chromeと同様にチャレンジ用のJavaScriptを正確に実行し、停滞せずに解決します。
- 一貫したセッションごとのフィンガープリント —
navigator.webdriverの明示はなく、ヘッドレスデフォルトは漏れません。 - 195か国以上の住宅用出口 — Cloudflareは出口IPのスコアを評価し、住宅用の地域はデータセンターIPがそうでない場所でクリーンに読み取られます。
- セッションの持続性により、同一セッション内でのリクエスト間で
cf_clearanceの承認を再利用できます。 - 一つの接続面 — すべてのオプションは同じWebSocketエンドポイント上のクエリパラメータです。
無料プランでAPIキーを取得するにはapp.scrapeless.comにアクセスしてください。
前提条件
- Node.js 18以上
puppeteer-coreがインストールされている(バンドルされたChromiumは必要ありません — リモートのものに接続します)- ScrapelessアカウントとAPIキー — app.scrapeless.comでサインアップしてください。
完全な接続詳細は、Scraping Browser ドキュメントにあります。
インストール
リモートブラウザに接続するため、puppeteer-core(バンドルされたChromiumは不要)だけが必要です。
bash
npm install puppeteer-core
export SCRAPELESS_API_KEY=your_api_token_here # 無料キーは https://app.scrapeless.com で取得
接続してチャレンジをクリアする
エンドポイントを構築し、puppeteer.connect()で接続し、ナビゲートし、チャレンジ後のコンテンツが添付されるのを待ちます。チャレンジはレンダリング中に解決されます — 別の解決呼び出しはありません。
javascript
import puppeteer from "puppeteer-core";
import { URLSearchParams } from "node:url";
const params = new URLSearchParams({
token: process.env.SCRAPELESS_API_KEY,
sessionTTL: "180",
proxyCountry: "US",
});
const endpoint = `wss://browser.scrapeless.com/api/v2/browser?${params}`;
const TARGET = "https://www.scrapingcourse.com/cloudflare-challenge";
const browser = await puppeteer.connect({ browserWSEndpoint: endpoint });
const page = await browser.newPage();
await page.goto(TARGET, { waitUntil: "domcontentloaded", timeout: 90000 });
// クラウドブラウザはレンダリング中にCloudflareをクリアします;本当のコンテンツが表示されるのを待ちます。
await page.waitForSelector("#challenge-title", { timeout: 90000 });
console.log("cleared:", await page.$eval("#challenge-title", (el) => el.innerText));
const cookies = await page.cookies();
console.log("cf_clearance:", cookies.some((c) => c.name === "cf_clearance"));
await browser.close();
このスクリプトのライブ実行は cleared: You bypassed the Cloudflare challenge! :D と cf_clearance: true を印刷しました — 標準のPuppeteerで、クラウドブラウザを通じて取得されています。
無料プランでAPIキーを取得する: app.scrapeless.com
合格を確認し、クリアランスを持ち運ぶ
信頼できる信号は、本当のコンテンツが添付されることです — チャレンジ後の要素が存在する場合、ページはクリアされます。Cloudflareは、合格したセッションにcf_clearanceクッキーも設定するため、同じセッション内の他のリクエストにクリアランスを持ち運ぶために読み取ることができます。W3C WebDriver仕様では、準拠する自動化がwebdriverフラグを公開することが求められていますが、クラウドブラウザはそれを持たないため、最初のチェックはクリーンに読み取られます。
javascript
const cookies = await page.cookies();
const clearance = cookies.find((c) => c.name === "cf_clearance");
console.log("cf_clearance present:", Boolean(clearance));
if (clearance) console.log("domain:", clearance.domain);
信頼できるクリアのための地域を固定する
Cloudflareは出口IPをスコアリングするため、proxyCountryを住宅地域に固定します。任意のISO国コードに変更できます。
javascript
const params = new URLSearchParams({
token: process.env.SCRAPELESS_API_KEY,
sessionTTL: "180",
proxyCountry: "US", // または "DE", "JP", "ANY"
});
ローカルNode.jsブラウザが停止する場所
ローカルのPuppeteerスクレイパーは、Cloudflareがブラウザをスコアリングするまで問題ありません。その後、ヘッドレスフィンガープリント、webdriverフラグ、データセンターIPがそれぞれ異なるチェックに失敗し、インタースティシャルがコンテンツを置き換えます。これらはフィンガープリンティング、行動、IPの問題です — クラウドブラウザがサーバー側で処理する三つの問題です。Scrapelessに接続すると、Puppeteerコードは標準のまま管理されたセッションにそれらを渡します。
返されるもの
セッションは通常のPuppeteerセッションのように動作します — page.goto、page.waitForSelector、page.content()、およびクッキーはすべて機能します。クラウドブラウザを介してCloudflareをクリアする際のいくつかの正直な観察:
navigator.webdriverは存在しません、そのためCloudflareの最初のチェックは本物のChromeのように読み取られます。- 出口IPは
proxyCountryと一致します — 住宅地域はデータセンターIPよりもはるかに確実にクリアされます。 - 合格後に
cf_clearanceが存在します — 同じセッションを再利用して、フォローアップリクエストに対して権利を持ち運びます。 - 頑固なページのためにセッションを温めます — 保護されたページの前に、同じセッションでサイトのホームページを先にロードすることで、行動表面が通常の訪問のように見えます。
結論: Cloudflareをクリアし、Node.jsを維持する
CloudflareをNode.jsでクリアすることは、チャレンジをデコードすることではなく、Cloudflareが信頼するブラウザを提示することです。Scrapeless Scraping Browserは、スコアリングされる3つの要素(フィンガープリンツ、行動、出口IP)をサーバーサイドで処理するため、Puppeteerコードは接続URLだけを変更します。proxyCountryを住宅地域に固定し、ポストチャレンジコンテンツを待ち、cf_clearanceを読み取って合格を確認します。同じクラウドブラウザをPythonから実行する場合は、Scrapling製品のスクレイパーガイドを参照し、Scrapeless料金ページでプランを比較してください。
Cloudflareをクリアするパイプラインを構築する準備はできましたか?
コミュニティに参加して無料プランを申し込み、Cloudflare保護サイトをスクレイピングする開発者とつながりましょう:Discord · Telegram。
app.scrapeless.comに登録して、Scraping Browserのランタイムを無料で利用し、Puppeteerをレンダリング中にCloudflareをクリアするクラウドブラウザに向けましょう。
FAQ
Q: 別のCAPTCHA解決サービスが必要ですか?
合格するブラウザでは不要です。Cloudflareは主にフィンガープリンツ、行動、IPをバックグラウンドでスコアリングし、cf_clearanceクッキーを発行します。クラウドブラウザは通常のレンダリング中にそのスコアリングを通過するように構築されているため、別のパズルステップを設定する必要はありません。
Q: puppeteerまたはpuppeteer-core?
puppeteer-coreを使用してください。ローカルのChromiumのダウンロードをスキップし、代わりにクラウドブラウザに接続します。
Q: プロキシは必要ですか?
いいえ。住宅の出口は組み込まれているので、proxyCountryを地域またはANYに設定します。Cloudflareは出口IPをスコアリングするため、住宅地域の方がデータセンターのアドレスよりも信頼性が高くクリアします。
Q: いくつかのページでまだチャレンジが表示されます — どうすればよいですか?
proxyCountryを住宅地域に固定し、保護されたページの前に同じセッションでサイトのホームページを最初に読み込んでセッションを温めることで、行動表面を通常の訪問のように読み取ることができます。
Q: Cloudflareをクリアすることは合法ですか?
一般に、公開されているデータへのアクセスは許可されていますが、ルールは管轄区域やサイトによって異なります。対象の利用規約を確認し、ロボット指令を尊重し、敏感な内容については法律相談を受けてください。
Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。



