Не-браузерная эмуляция JavaScript-возможно ли это?

У меня есть новый проект, над которым я работаю, который включает в себя извлечение веб-страницы (с использованием PHP и cURL), разбор HTML и javascript из него, а затем обработку данных в результатах.

в основном я попал в кирпичную стену, когда сайт использует javascript для получения своих данных AJAX. В этом случае исходные данные не будут отображаться на извлеченной странице, если javascript не запущен в браузере.

существуют ли библиотеки PHP для этого? (Я подозреваю, что нет, но я мог бы быть неправильный.)

Я бы предпочел построить это как серверное решение, иначе мне придется создать приложение для этого и использовать библиотеки Mozilla и/или IE runtime - что вроде побеждает цель.

8 ответов


вам понадобится:

  • один интерпретатор JavaScript
  • одно ядро DOM уровня 2 и реализация HTML
  • 500g нестандартных, но часто используемых расширений DOM
  • щепотка стиля DOM уровня 2 (что может означать также интерпретатор CSS и механизм компоновки)
  • йогуртовые горшки, круглые ножницы и липкий пластик

после того, как вы собрали свои компоненты (не забудьте получить взрослый, чтобы помочь вам с песочницей), вы найдете то, что у вас есть, по существу неотличимо от веб-браузера.

JAVA не является частью сборки оболочки на сервере. V8 / SquirrelFish-это код C++, который мне нужно будет преобразовать в PHP.

перенос движка JS на PHP будет огромной задачей, и результирующая производительность, вероятно, ужасна. Вы даже не можете уйти с почти решением на JavaScript больше, так как так много страниц используют ужасно сложные библиотеки, такие как jQuery, делают все, что потребует углубленной поддержки JS.

Я не думаю, что вы сможете сделать это исключительно на PHP. Вам придется подключить Java/Rhino / HTMLUnit или правильный веб-браузер, такой как Mozilla. Если ваша среда хостинга не дает вам гибкости, необходимой для компиляции и развертывания такого рода вещей, вам придется перейти к лучшей настройке хостинга с оболочкой (предпочтительно VPS).

Если вы можете избежать этой неприятности некоторые другие кстати, с помощью специального корпуса известных страниц AJAX access, сделайте это.


вам нужно на шаг дальше носорога Если вы хотите выполнить реальные живые веб-страницы, потому что JavaScript на этих страницах будет ожидать, что сможет использовать объекты, которые являются родными для среды браузера. Серверный движок JavaScript, такой как Rhino, не будет иметь этих объектов.

Джон Resig (создатель jQuery) начал проект под названием Env.js пару лет назад; это может быть то, что вы ищете, но я подозреваю, что ты имейте трудное время получать последовательные результаты от большого разнообразия веб-страниц. Вот его первоначальный пост в блоге об этом:

http://ejohn.org/blog/bringing-the-browser-to-the-server/

некоторые подобные проекты названы в комментариях к этому сообщению.


вы можете запустить движок JavaScript, такой как Rhino, на сервере.

вот несколько альтернатив:

  • Rhino (на основе Java)
  • V8 (используется Chrome, C++)
  • SquirrelFish (C++)

хотя они могут запускать JS, я не уверен, что то, что вы делаете, является лучшим подходом. Однако, поскольку вы не указали purprose вашей программы, я не могу предложить никаких предложений в этом отношении.


ранее спрашивал здесь: безголовый интернет-браузер?

в Mozilla мы получаем этот вопрос много. Хорошего ответа нет. Вам нужна библиотека программного обеспечения, которая реализует практически все, что нужно браузеру (по крайней мере, в отношении сети, JavaScript, синтаксического анализа HTML и DOM), но без отображения.

самое близкое, что я знаю HTMLUnit (в Java).


Я знаю, что вы сказали, нет Java, но для справки вам может быть интересно QT Jaambi. У них есть реализация webkit, которую вы можете запустить в безголовый режим.


все эти ответы, похоже, предполагают, что нет возможности эмуляции PHP JavaScript, но здесь есть почти полностью совместимый эмулятор php JavaScript с открытым исходным кодом:

http://www.sitepoint.com/blogs/2006/01/19/j4p5-javascript-for-php5/

в сочетании с Env.js, вы можете приблизиться к полному серверному решению для выполнения js.


вы могли бы взглянуть в носорог. Он использует java, никогда не слышал о PHP-порту.

вы обязаны запускать фактический javascript?


Tbh вам будет сложнее просто использовать JS-движок, так как вам также нужно создать среду скриптового движка браузера, такого как объекты DOM и window. Если вы работаете на сервере Windows, то вы можете довольно легко использовать объекты IE COM для загрузки и выполнения веб-страницы, доступ к DOM программно и вытащить содержимое обратно. Что касается вашего сервера Linux и/или Mozilla, у меня, к сожалению, нет опыта.

но на самом деле, что ты пытаешься сделать?