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が実行されるのはその後のみですが、エキスパートによる回避策があると考えていました。
Update 2PHPからphantomjs
を使用する方法の詳細を追加します。
Update 1(targetページの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
を使用して呼び出すこともできます。
/ 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>
私はこれで素晴らしいページを見つけました、それはページのDOMを処理する方法に関するチュートリアル全体ですPHPこれは完全にJavaScriptを使用して作成されています。
https://www.jacobward.co.uk/using-php-to-scrape-javascript-jquery-json-websites/ 「PhantomJSの開発は、今後通知されるまで中断される」ため、オプションは無効になりますいいもの。
すべてのPHPは、情報がクライアントに送信される前に実行されます。すべてのJavaScriptは、情報がクライアントに送信された後に実行されます。
ページの読み込み後にPHPで何かを行うには、ページで次のいずれかを行う必要があります。
いずれにせよ、データは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形式である必要があります。