Получить контент (текст) URL-адреса после запуска Javascript с помощью PHP

Возможно ли получить контент URL с PHP (используя какую-то функцию, например file_get_contents или header ), но только после выполнения какого-либо кода JavaScript?

Пример:

mysite.com имеет скрипт, который выполняет loadUrlAfterJavascriptExec('http://exampletogetcontent.com/') и печатает / перекликается с контентом. представьте, что некоторые jQuery запускаются на http://exampletogetcontent.com/ что изменяет DOM, а loadUrlAfterJavascriptExec получит полученный HTML- loadUrlAfterJavascriptExec

Можем ли мы это сделать?

Чтобы быть ясным, я хочу, чтобы содержимое страницы отображалось по URL-адресу, но только после того, как JavaScript запускается на целевой странице (один PHP получает его содержимое).

Мне известно, что PHP работает до того, как страница будет отправлена ​​клиенту, а JS – только после этого, но подумал, что, возможно, существует экспертное решение.

Обновление 2 Добавляет более подробную информацию о том, как использовать phantomjs из PHP.

Обновление 1 (после выяснения того, что javascript на целевой странице нужно запустить в первую очередь)

Способ 1: использовать phantomjs (будет выполнять javascript);

1. Загрузите phantomjs и поместите исполняемый файл в путь, к которому может обратиться ваш двоичный файл PHP.

2. Разместите следующие 2 файла в одном каталоге:

получить-website.php

 <?php $phantom_script= dirname(__FILE__). '/get-website.js'; $response = exec ('phantomjs ' . $phantom_script); echo htmlspecialchars($response); ?> 

получить-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 и целевой сайт, содержимое http://google.com вернется после выполнения встроенного javascript. Вы также можете вызвать это из командной строки, используя php /path/to/get-website.php .

Способ 2. Использовать Ajax с PHP (никаких фантомов не запускать javascript);

/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> 

Все PHP запускается до отправки информации клиенту. Все JavaScript запускается после отправки информации клиенту.

Чтобы сделать что-то с PHP после загрузки страницы, страница должна будет либо

  1. перезагрузить, сохранить информацию, сгенерированную JavaScript, в файле cookie или как данные POST (не идеально) ИЛИ
  2. сделайте вызов Ajax другому файлу 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 в парах ключ / значение.