Node.js未検出フィンガープリンター ブラウザ: Puppeteer & Playwright
Expert in Web Scraping Technologies
TL;DR:
- Node.jsでは、ブラウザが検出される要因であり、コードではありません。 PuppeteerとPlaywrightはどちらもDevToolsプロトコルを介してChromiumを操作し、リモートブラウザに1つのURLで接続するため、修正はブラウザの実行場所を変更することであり、スクリプトの書き換えではありません。
- ローカルNode.jsブラウザは、3つの軸で自動化を漏らします。
navigator.webdriverフラグ、ヘッドレスデフォルトのフィンガープリンティング、および自身の出口IPです。検出ツールはこれら3つを一緒にスコアリングするため、1つずつパッチを当てても効果が薄いのです。 - 1つのエンドポイントが両方のライブラリを提供します。
wss://browser.scrapeless.com/api/v2/browserはCDPエンドポイントであり、puppeteer.connect({ browserWSEndpoint })とchromium.connectOverCDP()の両方がそれに接続してリアルなChromium、クリーンなセッションごとのフィンガープリンティング、195か国以上の住宅用出口を得ます。 - 接続を1回書いて、どこでも再利用する。 エンドポイントを構築するシングルヘルパーが、すべてのスクリプト(PuppeteerまたはPlaywright)を同じ管理されたセッションを指すようにします。
- ライブの確認済み: PuppeteerとPlaywrightの両方の接続が
navigator.webdriverをfalseとして読み取り、ターゲットページの実際のタイトルを返し、Puppeteerの実行は米国の住宅用出口IPを報告しました。 - 無料で開始。 新しいScrapelessアカウントには無料のスクレイピングブラウザのランタイムが含まれます — app.scrapeless.comでサインアップしてください。
イントロダクション: ブラウザが決め手であり、スクリプトではない
Node.jsのスクレイピングスタックは通常、ローカルから始まります: PuppeteerまたはPlaywrightをインストールし、Chromiumを起動してページを操作します。ターゲットがブラウザをスコアリングし始めるまで機能します。そして、どのライブラリを選んでも同じ3つのシグナルが表示されます — スクリプトはnavigator.webdriverプロパティを通じて自動化を告知し、ヘッドレスビルドはデフォルトのフォントとキャンバスの動作を持ち込み、トラフィックはIPレピュテーションサービスがすでに知っているIPから出ます。
これはブラウザレベルおよびネットワークレベルの問題であり、論理的な問題ではありません。PuppeteerとPlaywrightは、起動していないブラウザに接続する方法をすでに知っており — Chrome DevToolsプロトコルを介して — Scrapelessスクレイピングブラウザはまさにそれで、1つのWebSocket URLを介してアクセスされるCDPエンドポイントです。どちらのライブラリもそれに向けられると、フィンガープリンティング、動作、出口IPはサーバー側に移動しながら、Node.jsコードはそのままです。
それで何ができるか
- ライブラリを維持する — PuppeteerとPlaywrightはどちらも同じエンドポイントに接続します。書き換えは不要です。
- アンチボット保護されたサイトに対して実行する — レンダリング中にチャレンジがクリアされるため、ナビゲーションがコンテンツに到達します。
- セッションをローカライズする — 1つの
proxyCountry値が住宅用の出口地域を選択します。 - 一貫したフィンガープリンティングを送信する —
fingerprintオブジェクトがユーザーエージェント、プラットフォーム、画面、タイムゾーンを一貫させます。 - 状態を持続させる —
profileIdがクロスランでクッキーとローカルストレージを保持します。 - ラップトップからスケールする — セッションはクラウド内で実行されるため、バッチは1つのローカルChromiumに束縛されません。
なぜScrapelessスクレイピングブラウザか
Scrapelessスクレイピングブラウザは、ウェブクローラーやAIエージェント向けに設計されたカスタマイズ可能な、アンチ検出クラウドブラウザです。Node.jsスタックに特化し、以下を提供します:
- 実際の自己開発ChromiumがページのJavaScriptをChromeとまったく同じように実行し、SPAやチャレンジを解決します。
- セッションごとの一貫したフィンガープリンティング —
navigator.webdriverのサインなし、ヘッドレスデフォルトの漏れなし。 - 195か国以上での住宅用出口が、1つの
proxyCountry値でセッションごとに選択できます。 - 両方のライブラリのための1つのCDPインターフェース — PuppeteerとPlaywrightは同じWebSocketエンドポイントに接続します。
profileIdを介したセッションの持続性により、認証されたフローはその状態を保ちます。
app.scrapeless.comの無料プランでAPIキーを取得してください。
前提条件
- Node.js 18以上
puppeteer-coreおよび/またはplaywright-core(両方ともローカルブラウザのダウンロードをスキップします — リモートに接続します)- ScrapelessアカウントとAPIキー — app.scrapeless.comでサインアップ
完全な接続詳細は、スクレイピングブラウザのドキュメントにあります。
インストール
プロジェクトですでに使用されているライブラリをインストールします — または両方をインストールします。
bash
npm install puppeteer-core playwright-core
export SCRAPELESS_API_KEY=your_api_token_here # https://app.scrapeless.comで無料のキーを取得
接続を1回書く
エンドポイントは両方のライブラリで同じですので、一箇所で作成してください。すべてのオプション — proxyCountry、fingerprint、profileId — はクエリパラメータです。
javascript
// scrapeless.js — プロジェクト全体のための一つのエンドポイントビルダー
import { URLSearchParams } from "node:url";
export function scrapelessEndpoint(extra = {}) {
const params = new URLSearchParams({
token: process.env.SCRAPELESS_API_KEY,
sessionTTL: "180", // 秒
proxyCountry: "US",
...extra,
});
return `wss://browser.scrapeless.com/api/v2/browser?${params}`;
}
パス A — Puppeteer
Puppeteerはpuppeteer.connect()で接続します。 W3C WebDriver仕様は、準拠した自動化がwebdriverフラグを公開することを要求しますが、クラウドブラウザはそれを持っていません。
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 browser = await puppeteer.connect({ browserWSEndpoint: endpoint });
const page = await browser.newPage();
await page.goto("https://www.scrapeless.com/en", { waitUntil: "domcontentloaded", timeout: 60000 });
console.log("puppeteer title:", await page.title());
console.log("puppeteer navigator.webdriver:", await page.evaluate(() => navigator.webdriver));
await browser.close();
ライブ実行では、puppeteer title: Effortless Web Scraping Toolkit - Scrapeless と puppeteer navigator.webdriver: false が、アメリカの住宅用IPアドレスで表示されました。
無料プランでAPIキーを取得してください: app.scrapeless.com
パス B — Playwright
Playwrightは同じエンドポイントにchromium.connectOverCDP()で接続します。以下のコードは標準的なPlaywrightのものです。
javascript
import { chromium } from "playwright-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 browser = await chromium.connectOverCDP(endpoint);
const page = await browser.newPage();
await page.goto("https://www.scrapeless.com/en", { waitUntil: "domcontentloaded", timeout: 60000 });
console.log("playwright title:", await page.title());
console.log("playwright navigator.webdriver:", await page.evaluate(() => navigator.webdriver));
await browser.close();
ライブ実行では、playwright title: Effortless Web Scraping Toolkit - Scrapeless と playwright navigator.webdriver: false が表示されました。
どちらを選ぶか
エンドポイントは同一なので、検出をクリアするかどうかではなく、それぞれのライブラリの利点で選んでください — クラウドブラウザは両方の対応を行います:
- すでにPuppeteerを使用していますか?
puppeteer.launch()をpuppeteer.connect({ browserWSEndpoint })に変更します。他は変更不要です。 - すでにPlaywrightを使用していますか?
chromium.launch()をchromium.connectOverCDP()に変更します。ロケーターと自動待機はそのままです。 - 新しく始める場合は? Playwrightのロケーターと自動待機は複雑なフローにエルゴノミクス設計されています。Puppeteerは主にナビゲートと読み込みを行うときに軽快です。どちらも同じセッションに接続します。
ローカルのNode.jsブラウザの限界
自分のマシン上でChromiumを実行するのは、オープンページには問題ありません。ターゲットがブラウザをスコアリングするところで摩擦が生まれます:データセンターIPで停止するチャレンジのインタースティシャル、ヘッドレスのデフォルトをフィンガープリンティングするページ、または訪問間で安定したアイデンティティを要求するログイン壁。これらはフィンガープリンティング、行動、IPの問題です — これらはすべてクラウドブラウザがサーバーサイドで処理します — PuppeteerとPlaywrightの両方に同様に作用します。Scrapelessに接続することで、これらのケースは管理されたセッションに任され、Node.jsコードはそのままです。
返ってくるもの
両方のパスは、それぞれのライブラリに対して通常のブラウザオブジェクトを返します — Puppeteerのページ、Playwrightのロケーター — そしてローカルセッションのように振る舞います。いくつかの正直な観察:
navigator.webdriverは両方でfalseです、したがって、サイトが最初に行うチェックは本物のChromeのように見えます。sessionTTLはここでは秒単位です — 全体のフローをカバーするように設定してください; セッションは期限切れになると閉じます。- 終了IPは
proxyCountryと一致します — 地理的に制約されたページは、地元の訪問者が見るように解決されます。 - 頑固なページのためにセッションを温めてください — 保護されたページの前にサイトのホームページを最初に読み込んで、行動の表面が通常の訪問のように読まれるようにします。
結論:一つのエンドポイント、どちらのライブラリでも
Node.jsにおいて、検出面はブラウザです。そのため、修正する必要があるのはブラウザであり、スクレイパーを再構築する必要はありません。一度エンドポイントを構築し、次にpuppeteer.connect()またはchromium.connectOverCDP()を使用して接続し、残りのコードはそのままにしておきます。proxyCountryを居住地域に固定し、一貫性のあるfingerprintを渡し、認証されたフローのためにprofileIdを再利用します。同じクラウドブラウザをPythonから実行する場合は、Scrapling製品スクレイパーガイドを参照し、Scrapeless料金ページでプランを比較してください。
Node.jsスクレイピングパイプラインを構築する準備はできましたか?
無料プランを獲得し、Node.jsスクレイピングパイプラインを構築している開発者とつながるためにコミュニティに参加してください: Discord · Telegram。
app.scrapeless.comにサインアップして、無料のスクレイピングブラウザランタイムを入手し、PuppeteerまたはPlaywrightをターゲットがフィンガープリンティングできないクラウドブラウザにポイントしてください。
よくある質問
Q: PuppeteerとPlaywrightのどちらかを選ぶ必要がありますか?
いいえ。どちらも同じScrapelessエンドポイントに接続します — puppeteer.connect({ browserWSEndpoint })またはchromium.connectOverCDP()。プロジェクトが既に実行している方、または両方を使用してください。
Q: スクレイピングのロジックを変更する必要がありますか?
いいえ。ブラウザを取得する方法を変更するだけで、ナビゲーション、セレクター/ロケーター、評価はそのままです。
Q: -coreパッケージはなぜ必要ですか?
puppeteer-coreやplaywright-coreは、クラウドブラウザに接続するため、バンドルされたブラウザのダウンロードをスキップします。
Q: プロキシが必要ですか?
いいえ。住宅用の出口が組み込まれています — proxyCountryを地域またはANYに設定します。
Q: Node.jsでのウェブスクレイピングは合法ですか?
公開データへのアクセスは一般的に許可されていますが、ルールは管轄区域やサイトによって異なります。対象の利用規約を確認し、ロボットディレクティブを尊重し、何かセンシティブなことについては弁護士に相談してください。
Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。



