一部のWebページURIに対してHTML(つまり、ページのロードが完了したときに最初に表示されるもの)を取得しようとしています。静的なHTMLをチェックし、想定し、すべてのエラーを除くと、それは単一のコード行です:PHPのHTMLページのOnLoad HTML/DOMを取得する
function GetDisplayedHTML($uri) {
return file_get_contents($uri);
}
これは、静的なHTMLのために正常に動作し、そのページが静的ファイルの依存関係/参照を持っている場合は、簡単な解析により拡張が容易です。したがって、<script src="XXX">, <a href="XXX">, <img src="XXX">, and CSS
のようなタグも検出でき、依存関係が問題であれば配列に返されます。
しかし、イベント/ AJAXを使用してHTMLが動的に作成されるウェブページはどうですか?たとえば、WebページのHTMLが、目に見えるWebページを構築する簡単なAJAXベースまたはOnLoadスクリプトであるとします。その後、解析だけでは機能しません。
私が必要とするのは、PHPの中から、HTTPレスポンス(すなわち、私たちが最初に取得するHTML)を、いくつかのjavascriptエンジンやブラウザを介してレンダリングし、一旦安定化すると、または静的なDOM?)が存在します。これはユーザーが実際に見ているものになります。
このようなWebページは絶えず変化する可能性があるので、「安定」(OnLoadまたはX秒後?)を定義する必要があります。また、タイマーや非同期のイベント状態(つまり、将来的にWebページの更新を引き起こす可能性のあるもの)をキャプチャする必要はありません。私は、その時点でユーザーが見ることができる静的な外観を表現するのに十分なDOMだけが必要です。
これをPHPでプログラムで実現するには、何が必要ですか?
ページにプロキシし、JavaScriptを処理し、レンダリングされたhtmlを提供する事前レンダリングサービスがあります。 javascriptを多用するアプリを使用する多くの開発者は、これらのサービスを使用して、レンダリングされたコンテンツをGoogleやその他の検索エンジンに出力します。あなたはそのようなアプローチを取る必要があるように思えます。 https://github.com/prerender/prerender – skrilled
私はサードパーティのオンラインサービスに頼りたくありません。しかし、プリレンダーは、多くのプラットフォームで動作する[PhantomJS](http://phantomjs.org)のシムであり、使用例があります。私はそれがPHPコード内から実行することができ、問題を解決する可能性があります推測?あなたはそう思いますか? – Stilez