FessのPlaywrightクロールで動的ページの取得範囲と転送を確認する

FessでJavaScriptを使うページをクロールするとき、ブラウザで見える内容がすべて検索対象になるわけではありません。Playwrightクローラーは、取得時点のDOMをHTMLとして取り出し、その本文とリンクを処理します。待機を延ばせば解決する場合と、ページ側の構造を見直す必要がある場合を分けて確認します。

導入とNode.jsの確認

Fess 15.9以降ではPlaywrightクローラーを追加プラグインとして導入します。ZIP構成ではFessの配置先で次を実行し、Fessを再起動します。利用するFessと対応するプラグインの版をそろえてください。

bin/fess-setup install plugin fess-crawler-playwright
bin/fess-setup install nodejs

Webクロール設定のパラメーターで、対象URLにPlaywrightを割り当てます。例えばHTTPSの対象では次のように指定します。

client.crawlerClients=playwright:https://.*

プラグインのJava API・JavaScriptドライバーとは別に、実行用のNode.jsが必要です。自前のNode.jsを使う場合は、Fessを起動する環境のPLAYWRIGHT_NODEJS_PATHにその実行ファイルのパスを設定します。ブラウザは初回利用時にPlaywrightがダウンロードするため、取得先への通信と実行環境のOS依存ライブラリーも必要です。

PR #81はNode.js不足で初期化に失敗した場合に、上記の導入コマンドと環境変数を案内する提案です。ブラウザ起動など他の段階の失敗を自動修復する変更ではありません。ジョブの成功表示だけで判断せず、失敗URLとfess-crawler.log、検索に入った本文を確認してください。

取得するのは待機後のDOM

待機状態を決めるrenderedStateの初期値はNETWORKIDLE、その後に追加で待つcontentWaitDurationの初期値は0ミリ秒です。追加待機を設定する場合、例えば3000は3秒であり、初期値でも推奨値でもありません。サイトで本文が出る時刻に合わせて調整します。

ネットワークが落ち着いた後にタイマーで本文が追加されるページは、初期設定の取得時点に間に合わない場合があります。一方、追加待機だけで無限スクロールやボタン操作が実行されるわけではありません。

ページの仕組み取得範囲・制限
JavaScriptが通常のDOMへ追加した本文やリンク取得時点に存在すれば本文・リンクの処理対象
開いたShadow DOMの内部シリアライズした通常のDOMに含まれず、本文に入らない
iframeの内部外側のページの本文には入らない。srcは別ページとしてたどるため、URLフィルターなどの条件が適用される
スクロールで追加する一覧スクロール前に存在する内容まで
onclickだけで移動するボタンリンクとしてたどらない。hrefを持つリンクなど別の到達経路が必要
#/aboutなどフラグメントだけのリンク独立した文書として登録されない

この整理はPR #82の文書追加に基づきます。表の制限をすべて解消する新機能が入る、という提案ではありません。

自動転送と同じ転送先の重複を切り分ける

PR #80はlocation.replace()やmeta refreshでページ自身が移動した場合に、最初のページの応答本文を読もうとして失敗する問題への修正案です。最新のメインフレームの応答を使い、移動先のURLで登録するようにします。移動先にもURLフィルターが適用され、対象外への移動はクロール対象外として扱います。PRの説明によれば15.9.0にも同じ問題があります。

転送が取得待機の終了後に発生する場合は、元のページの状態を取得することがあります。contentWaitDurationはこの待機時間の調整に使えますが、あらゆるタイミングの転送を保証するものではありません。

別のPRであるfess-crawler #227は、複数の旧URLが同じページへ転送される際の[CONFLICT] Failed to insertを扱います。ブラウザ側で転送を追跡し、要求URLと応答URLが異なり、redirectLocationがなく、同じクロールセッションで転送先のアクセス結果が保存済みの場合、その応答の処理をスキップしてINFOログへ記録する提案です。初回の転送先や通常の同一URLの応答は対象外で、新しい設定スイッチもありません。アクセス結果の保存済み確認なので、並行実行を含むすべての重複を防ぐ保証ではありません。

動作確認では、通常の動的本文、自動転送、対象外への転送、遅延転送、同じ転送先へ集まる複数URLを分けて試し、検索結果のURL・本文と失敗URLを照合します。本記事では実環境での再検証は行っておらず、PRの説明・差分・テストと公式ソースを確認しています。採用版が配布された後、適用されたプラグインとクローラーの両方を確認してください。

関連PR

既存のPlaywrightを利用したクロールは導入の背景、Fess 15.9.0の移行チェックは配布構成を扱っています。今回は動的ページの取得範囲と失敗の切り分けに絞っています。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です