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