web-dev-qa-db-ja.com

JavaScriptがPHPで実行された後、URLのコンテンツ(テキスト)を取得します

PHP(_file_get_contents_やheaderなどの関数を使用))でURLのコンテンツを取得することは可能ですか?ただし、JavaScriptコードの実行後にのみ?

例:

mysite.comには、loadUrlAfterJavascriptExec('http://exampletogetcontent.com/')を実行してコンテンツを出力/エコーするスクリプトがあります。 DOMを変更する一部のjQueryが_http://exampletogetcontent.com/_で実行され、loadUrlAfterJavascriptExecが結果のHTMLを取得するとします

できますか?

明確にするために、私が望んでいるのは、URLを介してページのコンテンツを取得することですが、JavaScriptがターゲットページで実行された後のみです(PHPがコンテンツを取得しています)。

私は承知していますPHPページがクライアントに送信される前に実行され、その後JSが実行されるのはその後のみですが、エキスパートによる回避策があると考えていました。

13
Victor Ferreira

Update 2PHPからphantomjsを使用する方法の詳細を追加します。

Update 1targetページのJavaScriptを最初に実行する必要があることを明確にした後)

方法1: phantomjs (javascriptを実行する)を使用します。

1。phantomjs をダウンロードして、実行可能ファイルをPHPバイナリが実行できるパスに配置しますリーチ。

2。次の2つのファイルを同じディレクトリに配置します。

get-website.php

<?php

    $phantom_script= dirname(__FILE__). '/get-website.js'; 


    $response =  exec ('phantomjs ' . $phantom_script);

    echo  htmlspecialchars($response);
    ?>

get-website.js

var webPage = require('webpage');
var page = webPage.create();

page.open('http://google.com/', function(status) {
 console.log(page.content);
  phantom.exit();
});

3。get-website.phpとターゲットサイトを参照します。インラインJavaScriptを実行すると、http://google.comのコンテンツが返されます。コマンドラインからphp /path/to/get-website.phpを使用して呼び出すこともできます。

方法2:PHP(phantomjsがないため、javascriptを実行しない)でAjaxを使用します);

/ get-website.php

<?php

    $html=file_get_contents('http://google.com');
    echo $html;
    ?>

test.html

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>on demo</title>
<style>
p {
color: red;
}
span {
color: blue;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<button id='click_me'>Click me</button>
<span style="display:none;"></span>
<script>

$( "#click_me" ).click(function () {
    $.get("/get-website.php", function(data) {
        var json = {
            html: JSON.stringify(data),
            delay: 1
        };
        alert(json.html);
        });
});
</script>
</body>
</html>
15
AndrewD

私はこれで素晴らしいページを見つけました、それはページのDOMを処理する方法に関するチュートリアル全体ですPHPこれは完全にJavaScriptを使用して作成されています。

https://www.jacobward.co.uk/using-php-to-scrape-javascript-jquery-json-websites/ 「PhantomJSの開発は、今後通知されるまで中断される」ため、オプションは無効になりますいいもの。

1
Adamantus

すべてのPHPは、情報がクライアントに送信される前に実行されます。すべてのJavaScriptは、情報がクライアントに送信された後に実行されます。

ページの読み込み後にPHPで何かを行うには、ページで次のいずれかを行う必要があります。

  1. リロード、JavaScriptで生成された情報をcookieに、またはPOSTデータとして保存(理想的ではない)または
  2. 別のPHPファイルをAjaxで呼び出してデータを取得します。 (ずっといい)

いずれにせよ、データはPHPとは異なるファイルにあるように見えるので、これはかなり良い解決策です。あなたはそれにjQueryをタグ付けしたので、あなたはそれを使っていると思います。

jQueryには、Ajaxの実装方法に関する一連のページがあります

ただし、jQueryを使用する最も簡単な方法は 。post です。

例:

_$.post( "http://example.com/myDataFile.txt", function( data ) {
    //do more JavaScript stuff with the data you just retrieved
});
_

$.post()は、その名前が示すように、データファイルのリクエストとともにデータを送信できるため、そのリクエストがPHPファイルに対するものである場合、PHPファイルはそのデータを使用できます。

例:

_$.post( "http://example.com/myDataFile.txt",
    { foo: "bar"; yabba: "dabba" },
    function( data ) {
       //do more JavaScript stuff with the data you just retrieved
});
_

データは、キー/値ペアのJSON形式である必要があります。

0
The E