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

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

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

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

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

Тебе понадобится:

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

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

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

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

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

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

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

Джон Ресиг (создатель 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, которую yo ucan работает в режиме безголового .

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

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

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

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

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

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

Но на самом деле, что вы пытаетесь сделать?