Я хотел бы иметь возможность запускать JavaScript и получать результаты с помощью PHP и задается вопросом, есть ли библиотека для PHP, которая позволяет мне разбирать ее. Моя первая мысль заключалась в использовании node.js, но поскольку node.js имеет доступ к сокетам, файлам и вещам, я думаю, что я предпочел бы избежать этого.
Обоснование. Я делаю скрипинг экрана в PHP и столкнулся со многими сценариями, в которых данные создаются JavaScript во внешнем интерфейсе, и я хотел бы избежать создания специализированных функций фильтрации для работы с JavaScript в каждом случае, поскольку занимает много времени. Более общим случаем будет анализ JavaScript непосредственно.
Downvoting: Я действительно не понимаю, что так противоречиво в этом вопросе, современные веб-сканеры, как известно, делают это, единственное отличие состоит в том, что они, как правило, не написаны на PHP. [1]
[1] http://blogs.forbes.com/velocity/2010/06/25/google-isnt-just-reading-your-links-its-now-running-your-code/
Это интересный вопрос, и нисходящие избиратели невообразимы в отношении возможных вариантов использования. Инструменты архивации страниц, сценарии печати, изображения предварительного просмотра – все обоснованные причины, позволяющие манипулировать документом с помощью JavaScript, включенного в страницу.
Я не знаю каких-либо существующих реализаций PHP, но вы, вероятно, могли бы использовать SpiderMonkey Mozilla как PHP-модуль или как отдельный инструмент для манипулирования DOMDocument и возврата результата.
У меня не было опыта работы с серверным JavaScript, но некоторые проблемы, которые, как я полагаю, могут потребоваться:
document
и window
, не являются частью спецификации ECMAScript (это объекты, предоставляемые браузером-исполнителем), поэтому вам нужно убедиться, что библиотека предоставляет эквивалентные объекты хоста. Другой (возможно) более безопасный и простой в реализации вариант может заключаться в использовании модифицированного экземпляра FireFox или WebKit, который работает как браузер, загружает целевые страницы и возвращает измененный источник в ваше приложение.
Из PHP 5.3 вы можете использовать расширение V8JS с PHP . Это родная библиотека, которая использует новый механизм Javascript Google V8 для выполнения JS и возврата результата.
Это хорошо, потому что вы можете передавать vars в массивах PHP и интерпретироваться очень хорошо
NodeJS (или какая-то другая производная от google v8) на самом деле может быть лучшим способом пойти сюда. Если вас беспокоят различные вещи, которые может выполнять nodejs (например, сокеты и т. Д.), Вы, вероятно, можете «разбить его», удалив модули и / или аддоны – я думаю, что даже встроенный материал в конечном итоге реализован в таком что его можно было бы легко удалить.
Альтернативным подходом может быть просто замена, переопределение или удаление require
функции из node.js
Есть также envjs, которые должны облегчить запуск js, который был разработан для запуска браузера.