Как получить содержимое сайта, загруженного с помощью javascript / ajax? - PullRequest
7 голосов
/ 02 сентября 2011

У меня есть PHP-скрипт, который загружает содержимое страницы с другого сайта, используя CURL и PHP-библиотеку simple_html_dom. Это прекрасно работает. Если я выведу возвращенный HTML-код, я смогу увидеть там содержимое div.

Однако, если я пытаюсь выбрать только этот div с помощью simple_html_dom, div всегда возвращается пустым. Сначала я не знал почему. Теперь я знаю, что это потому, что его содержимое, по-видимому, заполнено javascript / ajax.

Как я могу получить содержимое сайта и затем выбрать div-контент ПОСЛЕ того, как javascript заполнил его правильным содержанием?

Возможно ли это вообще? Спасибо!

Ответы [ 5 ]

2 голосов
/ 06 ноября 2011

Да, это кусок пирога, если вас интересует только тот конкретный html, который возвращает ajax.

  1. Соберите информацию, такую ​​как url, параметры и тип запроса (post / get) из этого запроса ajax.
  2. Создайте тот же запрос из вашего php / curl-кода, и вы его получили.
  3. И надеюсь, что логика сервера не проверит, кто отправил запрос.
1 голос
/ 24 октября 2011

Да, это возможно.

Вам необходимо сделать следующее:

  1. Создать вызов CURL для этой веб-страницы, чтобы получить любой параметр, используемый в Ajax.вызов, который загружает контент, который вы ищете.
  2. Создайте еще один вызов CURL для файла, вызываемого этой веб-страницей Javascript, используя параметры, полученные вами с помощью шага номер 1.

ех.Скажем, вы хотите получить содержимое http://www.domain.com/page.html, и этот page.html извлекает некоторые другие данные, используя Ajax, скажем, $ ("# div"). Load ("http://www.domain.com/ajax/data.php?time=48484&c=487387").

)сначала сделайте запрос CURL к page.html и получите полный URL-адрес вызова Ajax с помощью функции PHP preg_match () или любой эквивалентной функции на любом другом языке. После этого создайте еще один запрос CURL для этого URL - http://www.domain.com/ajax/data.php?time=48484&c=487387 - и получите его содержимое.

Все готово!

1 голос
/ 03 сентября 2011

Для такого рода скрепирования экрана вы можете попробовать phpQuery или Snoopy .

phpQuery имеет плагин для веб-браузера и подлое заявлениесмоделировать один

1 голос
/ 03 сентября 2011

вы всегда можете привязать к событию, которое запускается, когда xhr возвращает данные в браузер и выполняет ваши операции там.

 var xhReq = createXMLHttpRequest();
 xhReq.open("GET", "ur_php_url.php");
 xhReq.onreadystatechange = onResponse;
 xhReq.send(null);

 function onResponse()
 {
 // do the necessary
 }
0 голосов
/ 03 сентября 2011

К сожалению, Javascript запускается на стороне клиента в браузере, поэтому, если страница не загружена в веб-браузер, не существует простого способа сделать это.

Единственный способ, о котором я могу подумать, - это запустить браузер в фоновом режиме сервера, перезагрузить и автоматически сохранить сгенерированную страницу в файл, который будет доступен для извлечения PHP-скрипта. Ну ... я не знаю никого, кто бы реализовал такую ​​идею.

Лучше попытаться получить URL-адрес, с которого заполняется div. Если содержимое div генерируется, например, через AJAX, возможно, если вы извлекаете URL источника данных с помощью cURL, данные также будут доступны для вас.

...