料金とトラフィック
ホスト型ブラウザの料金は、プリペイド残高からトラフィック 1 GB 単位で支払います。料金に含まれるもの、トラフィックとして数えられるもの、使用量を減らす方法を説明します。
料金
- 1 GB あたり €1.00、住宅用プロキシ込み。デフォルトでは、すべてのセッションが住宅用 IP からインターネットに出ます。これは一般消費者向けインターネットプロバイダーの実在する家庭用回線で、データセンターやホスティングのアドレスではありません。€1.00 で支払うのはこのトラフィックの料金であり、プロキシ代が別途請求されることはありません。
- トラフィックはブラウザとインターネットの間で計測し、アップロードとダウンロードを合算します(1 GB = 109 バイト)。詳しくは「トラフィックに含まれるもの」を参照してください。
- 利用時間、セッション数、CDP メッセージには課金されません。
- 当社のキーで使うチャレンジ解決サービス(使わない限りオフ):解決したチャレンジごとに、解決サービス自体の料金 × 1.5 を残高から差し引きます。
- プリペイド制です。残高はダッシュボードでチャージします。ブラウザの起動には最低 €0.50 の残高が必要です。各セッションの上限は起動時点の残高でまかなえる額で、実行中のブラウザ全体で共有されます(自分で指定した
maxGbのほうが低ければ、そちらが適用されます)。残高がゼロになると、実行中のブラウザは停止されます(使用量の報告はおよそ 15 秒ごとのため、最後の報告で残高がわずかにマイナスになることがあります)。
トラフィックに含まれるもの
ブラウザが Web サイトとの間で送受信するすべてのバイトを、プロキシ事業者と同じく実際の通信経路上で計測します。一般的なページでいえば、内訳は次のとおりです。
- カウントされるもの:ページ本体と、そのページが読み込むすべてのもの(スクリプト、スタイルシート、画像、フォント、動画、API 呼び出し、広告やトラッカー、WebSocket)に加え、リクエストヘッダー、Cookie、各接続の暗号化(TLS)のオーバーヘッド。待っている間もページは読み込みを続けるため、バックグラウンドのポーリングやアナリティクスもカウントされます。
- カウントされないもの:コードとブラウザの間の CDP 接続(コマンド、結果、スクリーンショット、PDF、読み出したページ内容)、ダッシュボードのライブビュー、そしてブラウザが実際には取得しないもの(ブロックしたリクエスト、ブラウザ自身のキャッシュから返されるファイル)。
おおよその目安として、軽いテキストページは 1 MB を大きく下回り、一般的なニュースサイトや EC サイトのページは 2〜5 MB、重いシングルページアプリや動画を含むページは 10 MB 以上になります。1 GB あたり €1.00 の場合、3 MB のページ 1,000 件でおよそ 3 GB です。実際の数値は自分のセッションで確認できます。ダッシュボードには各セッションのトラフィックとバイト数上位 20 サイトが表示されます。また、maxGb でセッションに上限をかければ、暴走したページに残高を食いつぶされることはありません。
トラフィックを減らす
ページの容量の大半は、たいていスクリプトにとって不要なものです。削減効果の大きい順に挙げます。
- 画像・メディア・フォントをブロックする。これだけでページの半分以上を占めることもよくあります。ブラウザ内で URL パターンによってブロックすれば、リクエストはブラウザの外に出ないため課金されません。しかも、ブラウザのキャッシュはそのまま使えます。
// Playwright: block by URL pattern over CDP (keeps the browser cache on)
const cdp = await context.newCDPSession(page);
await cdp.send("Network.enable");
await cdp.send("Network.setBlockedURLs", {
urls: ["*.png", "*.jpg", "*.jpeg", "*.gif", "*.webp", "*.svg", "*.woff", "*.woff2", "*.ttf", "*.mp4", "*.webm"],
});
// Puppeteer: the same, through its CDP session
const client = await page.createCDPSession();
await client.send("Network.enable");
await client.send("Network.setBlockedURLs", { urls: ["*.png", "*.jpg", "*.jpeg", "*.gif", "*.webp", "*.woff2"] });リクエストを破棄するだけの目的で page.route() / context.route() や Puppeteer のリクエストインターセプトを使うのは避けてください。これらを使うとブラウザのキャッシュが無効になり、ページごとにスクリプトやスタイルを再ダウンロードするため、節約した画像の分よりも高くつきます。使うのは、リクエストを書き換える必要がある場合だけにしましょう。なお、adblock オプションを使えば、広告やトラッカーのブロックも任せられます。
- 広告・アナリティクス・トラッカーをブロックする。不要なサードパーティドメインへのリクエストは中止します。どのドメインに最もコストがかかっているかは、ダッシュボードにあるセッションの上位サイト一覧でわかります。
- 必要以上に待たない。
waitUntil: "networkidle"は、広告も含めてページが読み込むすべてを待ちます。"domcontentloaded"を使い、そのうえで本当に必要な要素 1 つだけを待つようにしましょう。 - 終わったらすぐにブラウザを閉じる。開いたままのページはバックグラウンドでポーリングを続けます。
idleTimeoutSecを短くしておけば、閉じ忘れたセッションも自動的に終了します。 - 1 つのブラウザで多くのページを回る。キャッシュが効くため、同じサイト内のページ間で共通するスクリプトやスタイルは、ページごとではなく 1 回だけダウンロードされます。URL ごとに新しいセッションを起動するのではなく、同じセッション内でページを移動しましょう。
- 可能ならサイトの API を直接呼ぶ。ブラウザがサイトとの有効なセッションを確立したら、必要な JSON をページ内から
fetch()で取得しましょう。ページを読み込み直すのに比べて、ごくわずかなデータ量で済みます。 - 上限を設ける。すべてのセッションに
maxGbを設定しておけば、予想外に重いページがあっても、残高を使い切る前に停止します。
ブロックはほとんどのサイトで問題なく機能しますが、画像やフォントが実際に読み込まれたかを確認するサイトも一部あります。ブロックを有効にするとサイトの挙動が変わる場合は、そのサイトに限って該当する種類を再び許可してください。
まず実際に動かしてみたい場合は、Playground を使ってください。ダッシュボードから直接クラウドブラウザでスクリプトを実行でき、ライブビュー、コンソール出力、スクリーンショットを並べて確認できます。