14

JavaScriptを実行して結果をPHPで取得したいと思っています。PHP用のライブラリがあれば、それを解析することができますか?私の最初の考えはnode.jsを使うことでしたが、node.jsはソケット、ファイル、そして物事にアクセスできるので、避けたいと思っています。PHPでJavaScriptを解釈する

理由:私はPHPでスクリーンスクレイピングを行っていますが、データがフロントエンドでJavaScriptによって生成されている多くのシナリオに遭遇しています。それは多くの時間がかかるので、ケースごとに行う必要があります。より一般的な場合は、JavaScriptを直接解析することです。

下り:私は実際にこの質問について議論の余地があるとは思えません。現代のWebクローラーはそれを行うことが知られていますが、唯一の違いはPHPで書かれていない傾向があることです。 [1]

を[1] http://blogs.forbes.com/velocity/2010/06/25/google-isnt-just-reading-your-links-its-now-running-your-code/

+6

はなぜ世界であなたがそれをやりたいと解釈されているので、それは良いことですか?!?!? *する必要がある場合は、CLI JavaScriptインタプリタ(http://code.google.com/p/v8/)をコンパイルして実行することができます。どのような目的のために – Blender

+3

? PHPにはすでに多数の日付機能があります。 – stillstanding

答えて

5

これは興味深い質問です。下手な投票者は、潜在的なユースケースについて想像力を欠いています。ページアーカイブツール、スクリプトの印刷、イメージのプレビュー - ページ内に含まれるJavaScriptを使用してドキュメントを操作する有効な理由。

私はPHPの既存の実装について知らないが、おそらくMozillaのSpiderMonkeyをPHPモジュールとして、あるいはDOMDocumentを操作して結果を返すスタンドアロンツールとして適合させることができます。

私は、サーバー側のJavaScriptの経験があったが、私はに対処する必要があるかもしれないと考えているいくつかの問題されていない:documentwindowなどの

  • ホストオブジェクトは、ECMAScript仕様の一部(これらではありません実装するブラウザが提供するオブジェクトなので)、ライブラリが同等のホストオブジェクトを提供していることを確認する必要があります。
  • サーバーサイド環境内でクライアントサイドスクリプトを実行する際にセキュリティ上の問題が発生することがあります。これは、ユーザが評価するPHPスクリプトを提出できるようにするため、セキュリティサンドボックスがきちんとしていることを確認する必要があります。

別の(おそらく)より安全で、ターゲットページをロードし、アプリケーションに修正ソースを返す、ブラウザとして実行修正FirefoxやWebKitのインスタンスを使用するかもしれないオプションを実装しやすいです。

+0

ドキュメントとウィンドウの問題を指摘してくれてうれしいです。その特定の問題はクリックされていませんでした。私はこの問題を解決したいと思ったら、あなたが示唆したようにPHPモジュールを書く道を進んでいくと思います。 –

+0

@KitSundeセレンを見てください。それはあなたが任意の言語からブラウザを制御することができます。 node.jsの場合、ノード開発者はnode.jsをあきらめ、代わりにphantom.jsを使用して、ノード開発者さえもこの問題に直面します。 Phantom.jsはnode.jsでも、node.jsのライブラリでもありません(ただし、ノードがファントムを制御できるライブラリがあります)。 Phantomjsはインタプリタ(Google Chromeのフォーク)の代わりにブラウザで、ウィンドウ、タブなどを備えていますが、ウィンドウは決して画面上に描画されません。ヘッドレスブラウザです。 – slebetman

+0

@slebetmanありがとう、私はこの質問をしてから7年間でセレンを認識しています。 :p –

1

NodeJS(またはGoogleのV8のいくつかの他の誘導体)は、実際にここに行くための最善の方法かもしれません。 nodejsが(ソケットなどの)さまざまなことを心配しているなら、おそらくモジュールやアドオンを削除することで "削除"することができます。ビルドされたものも最終的にこのようなかなり簡単に取り除くことができます。

代わりの方法として、requireの機能をnode.jsから置き換えたり、上書きしたり、削除したりすることがあります。

また、ブラウザを実行するように設計されたjsを簡単に実行できるようにするenvjsもあります。

+0

私は前にenvjsを見たことがない、それは本当に面白いです。私はそれをさらに調べるつもりです、ありがとうございます。 :) –

+0

ようこそ。がんばろう。 (そして、落下者によって落胆しないでください)。 – Lee

4

PHP 5.3より、V8JS extention from PHPを使用できます。新しいGoogle V8 Javascriptエンジンを使用してJSを実行し、結果を返すネイティブライブラリです。

あなたがPHPの配列でVARSを渡すことができますし、非常によく

関連する問題