6

javascriptポストレンダリングを使用してページから完全にレンダリングされたhtmlを取得する方法はありますか? curl を使用すると、単純にベース html が取得されますが、iframe のポスト レンダリング、JavaScript 処理などが欠けています。

これを達成するための最良の方法は何ですか?

4

6 に答える 6

3

他の誰も答えていないので(上記のコメントを除いて、後でそれについて説明します)、私は可能な限り手助けしようとします。

「簡単な」答えはありません。PHPはjavascriptを処理/DOMをネイティブにナビゲートできないため、できるものが必要です。

私が見ているあなたのオプション:

  1. 画面を取得した後(Flashもロードしたいので、これを望んでいます)、これを行うためにそこにある商用APIの1つを使用することをお勧めします。このリストhttp://www.programmableweb.com/apitag/?q=thumbnail、たとえばhttp://www.programmableweb.com/api/convertapi-web2imageでいくつか見つけることができます。

  2. それ以外の場合は、サーバー上で、またはサーバーに接続されたJavascriptとDOMを処理できる何かを自分で実行する必要があります。このためには、サーバーサイドで実行して必要な情報を取得できる自動ブラウザが必要です。上記のBergiのコメントのリストに従ってください。適切なソリューションをテストする必要があります。メインのソリューションは、既知のWebサイトでの「単体テスト」に最適ですが、ランダムに処理するためにスクリプトを作成する方法がわかりません。たとえば、サイト。(おそらく)「自動ブラウザ」は1つしかなく、各ページの読み込みにかかる時間がわからないため、リクエストをキューに入れて一度に1つずつ処理する必要があります。また、ポップアップアラートが処理され、すべてのサードパーティライブラリ(フラッシュが必要ですか?!)がインストールされ、リダイレクトが処理されることを確認する必要があります。タイムアウトと潜在的なメモリの浪費(これをノンストップで実行している場合は、定期的にブラウザを強制終了して再起動し、メモリをクリーンアップする必要があります!)。また、ウイルス攻撃、ポップアップウィンドウ、およびブラウザを完全に閉じる要求を処理します。

  3. 第三に、VBにはWebブラウザコンポーネントがあります。私は昔、似たようなことをするためにそれをプロジェクトに使用しましたが、既知のサイトで使用しました。.NETでそれが可能かどうか(私にとっては、それは大きなセキュリティリスクです)、そして未知のもの(ポップアップやFlashなど)をどのようにプログラムするかはわかりません。しかし、もしあなたが必死なら、冒険好きな.NET開発者はもっと提案できるかもしれません。

要約すると、スクリーングラブ以上のものが必要で、オプション1を選択できる場合は、幸運を祈ります;)

于 2012-05-30T11:15:41.347 に答える
1

w3m や lynx などの「端末」ブラウザを使用します。アクセスしたいサイトにログインが必要な場合でも、これは可能です。次に例を示します。

curl [-u login:pass] http://www.a_page.com | w3m -T text/html -dump

また

curl [-u login:pass] http://www.a_page.com | lynx -stdin -dump

これにより、すべてのフレームなどを含むhtml全体が得られるはずです。

于 2016-01-07T15:12:36.953 に答える
1

GUI なしでスクリプト可能なものを探している場合は、ヘッドレス ブラウザを使用できます。同様のタスクに PhantomJSを使用しました。

于 2014-05-27T17:16:36.520 に答える
1

それでも関連性がある場合は、PhantomJs as a Service を使用するのが簡単な方法であることがわかりました。

public string GetPagePhantomJs(string url)
        {
            using (var client = new System.Net.Http.HttpClient())
            {
                client.DefaultRequestHeaders.ExpectContinue = false;
                var pageRequestJson = new System.Net.Http.StringContent(@"{'url':'" + url + "','renderType':'plainText','outputAsJson':false }");
                var response = client.PostAsync("https://PhantomJsCloud.com/api/browser/v2/SECRET_KEY/", pageRequestJson).Result;
                return response.Content.ReadAsStringAsync().Result;

            }
        }

とてもシンプルで、サービスに加入すると1日500ページまで使える無料プランがあります。SECRET_KEY は、取得する独自のキーに置き換えます。

于 2019-01-01T09:20:54.500 に答える
-2

JavaScript はサポートされていませlynxんが、Web ページのデータを処理する必要がある場合に役立ちました。このようにして、(プレーンテキストの) レンダリングを取得し、生の html タグをフィルタリングする必要はありませんでしたcurl

lynx -nonumbers -dump -width=9999999 ${url} | grep ...  et cetera.
于 2014-05-27T16:53:16.423 に答える
-2

このコマンドラインIECapt.exeを見てください

于 2013-06-03T02:52:39.717 に答える