2011-01-11 2 views
1

Я хочу проанализировать html-страницу, которая, к сожалению, требует JavaScript для отображения любого содержимого. Для этого я использую небольшой скрипт python, который вытаскивает html-код страницы, но после этого мне нужно выполнить JavaScript в DOM-контексте, который кажется довольно сложным.Выполнение JavaScript с помощью Python без X

Чтобы сделать это еще сложнее, я хочу использовать его в серверной среде, где нет X11-сервера.

Примечание: Я уже читал около http://code.google.com/p/pywebkitgtk/, но, похоже, X-сервер.

ответ

3

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

2

Вы можете попробовать использовать Xvfb, чтобы иметь поддельный буфер кадров, поэтому вам не нужно будет запускать X11 (хотя это может быть зависимость Xvfb от вашей системы). У большинства движков рендеринга нет режима безглавых, поэтому для их запуска требуется что-то вроде Xvfb. Я успешно использовал эту технику, используя XULRunner для навигации по веб-страницам, но не от python.

0

Я использую VNC или Xvfb для этой цели в сочетании с Firefox. После экспериментов с этими двумя я остановился на XTightVNC. Мы используем его для создания скриншотов по запросу для различных целей тестирования. Приятно использовать один из них, потому что вы выполняете его в реальном браузере, как и пользователь (хотя большинство пользователей, вероятно, не будут использовать ту же ОС, что и ваш сервер).

Удобная возможность использования VNC заключается в том, что вы можете подключаться удаленно, чтобы настроить и протестировать браузер, когда это необходимо.

+0

Я не являюсь графическим выходом, мне просто нужно получить HTML-код после выполнения JS. –

+0

@ Томас это не имеет значения. В моем тестировании VNC эквивалентен Xvfb, за исключением того, что у вас есть возможность графического вывода. – JAL

1

Я все еще пытаюсь понять это сам, так возьмите мой ответ с зерном соли.

До сих пор я нашел http://blog.motane.lu/2009/06/18/pywebkitgtk-execute-javascript-from-python/, в котором описывается использование и причуды Pywebkitgtk тем, у кого есть аналогичные потребности в том, что мы делаем.

Позже, однако, автор этого blogpost обнаружил, что он не может заставить его работать с Xvbf, поэтому он охотился еще немного и нашел Qt-webkit (возможно, сам Qt, если я правильно понял) http://blog.motane.lu/2009/07/07/downloading-a-pages-content-with-python-and-webkit/. По-видимому, это гораздо лучшее решение, чем PywebkitGTK.

Естественно, я буду изучать другие предлагаемые здесь решения, но я хотел поднять решение Qt, потому что для меня это самый вероятный кандидат на то, что я хочу сделать ... и если нет, тогда, возможно, это будет для кого-то другого, ища ответа на этот вопрос! :-)

Смежные вопросы