最新のWebサイトの70%以上は、コンテンツのレンダリングをJavaScriptに依存しています。標準的なHTTP requestで取得できるのは初期のHTMLシェルのみです。実際のデータはJavaScript実行後に読み込まれるため、従来のスクレイピングツールでは空のページが返されます。
FourAのブラウザタスクは、requestごとに実際のheadless Chromeインスタンスを実行することでこの問題を解決します。
動作原理
type: "browser"を指定してタスクを送信すると、FourAは次の処理を実行します。
- headless Chromeブラウザを起動
- 対象のURLへナビゲート
- JavaScriptの実行とDOMの安定化を待機
- 必要に応じて特定のCSSセレクターの出現を待機
- 完全にレンダリングされたHTMLを返却
すべての処理はFourAのインフラストラクチャ上で完結します。ブラウザのインストール、Puppeteerの設定、Chromeのアップデート管理を一切行うことなく、クリーンなHTMLを取得できます。
ブラウザタスクの使い所
ブラウザタスクを使用すべきケース:
- シングルページアプリケーション (React, Vue, Angular)
- 遅延読み込みコンテンツを含むページ (無限スクロール、「さらに読み込む」ボタン)
- Cookie同意や初期JSセットアップが必要なサイト
- クライアント側の認証フローの背後にあるコンテンツ
singleタスクを使用すべきケース:
- サーバーサイドレンダリングされたHTMLページ (ニュースサイト、ブログ、Wiki)
- JSONを直接返すREST API
- 速度を最優先する場合 (ブラウザタスクの所要時間は2〜10秒、単一タスクは1秒未満)
例: Reactアプリのスクレイピング
curl -X POST https://eu.api.foura.ai/api/v1/tasks \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/dashboard",
"type": "browser",
"options": {
"waitFor": ".dashboard-content",
"timeout": 15000
}
}'
waitForセレクターは、ページをキャプチャする前にDOM内に.dashboard-contentが表示されるまで待機するようFourAに指示します。これにより、すべての非同期データが読み込まれた状態を保証します。
パフォーマンス向上のヒント
- 固定のタイムアウトに頼るのではなく、常に特定のセレクターを指定して
waitForを使用してください。その方が高速かつ確実です。 - 適切なタイムアウトを設定してください。ほとんどのSPAでは15秒で十分です。バックエンドが極端に遅い場合にのみ増やしてください。
- デフォルトには
singleを使用し、responseに必要なコンテンツが含まれていない場合にのみbrowserに切り替えてください。
今後の展開
現在、スクリーンショットの取得、PDF生成、複数ステップのナビゲーション (クリック、スクロール、フォーム入力) など、追加のブラウザ機能を開発中です。これらの追加機能がなくても、ブラウザタスクはすでに最も一般的な課題である「空のシェルではなく、JavaScriptでレンダリングされたページから実際のコンテンツを取得すること」に対応しています。
タスクタイプの完全な比較については、ドキュメントをご確認ください。