2014-09-15 2 views
1

Я использовал HTTPBuilder как способ получения содержимого HTML сайта. В качестве примера, это, как я использовал его:HTTPBuilder Получить после выполненного Javascript

def http = new HTTPBuilder(url) 

def root = http.get([:]) 

// Really just the standard approach. 

Теперь это работало очень хорошо для статических HTML-сайтов, однако я теперь пытаюсь взять данные с сайтов, где Javascript выполняются на нагрузке, которая заполняет страницу. Например, this page.

Мой вопрос в том, имеет ли Grails/Groovy собственный способ ожидания, пока все Javascript не выполнит, прежде чем возвращать содержимое HTML. Если не родной, то третьей стороной?

Research Я уже пытался

  • Я имел взгляд на библиотеки, которые пытаются издеваться браузер. Я подумал, что если бы я мог получить библиотеку для выполнения Javascript и только вернуть результат, я мог бы имитировать поведение, которое я хотел. Мои исследования в этом были несколько ограничены, так как библиотеки, которые я нашел, дают вам контроль над такими вещами, как ваш User-Agent.
+0

Вы можете попробовать HtmlUnit/Selenium. На самом деле я использую это для тестирования, но он поддерживает Javascript. – wwarlock

ответ

1

Метод, который вы используете, получает только исходный HTML-контент с сервера. Так что ничего не загружать и не выполнять какой-либо код. Селен может работать (или Geb, Groovy обертка вокруг него), но getPageSource method говорит, что получение HTML-содержимого после JavaScript зависит от драйвера. Вы можете найти один из драйверов (хром, firefox и т. Д.), Чтобы вернуть результаты после JavaScript. Если это не сработает, попробуйте использовать PhantomJS (blog post on what you want).

+0

Ты на самом деле на что-то здесь. Я бы предпочел сохранить это на стороне сервера, чтобы проложить маршрут через Javascript. Как я могу указать правильный драйвер для * Geb *? – christopher

+0

Если вы используете это на сервере, вы должны проверить его в HTMLUnit или PhantomJS, так как оба безголовые. PhantomJS в основном безголовый Chrome (V8 + webkit). HTMLUnit (http://htmlunit.sourceforge.net/) полностью на Java, но не как «совместимый» с сайтами. Другие драйверы Geb фактически запускают и управляют экземпляром браузера GUI. Я бы попробовал сначала HTMLUnit остаться на Java, если это не работает, я бы попробовал Geb с драйвером PhantomJS и getPageSource; если это не возвращает результаты после DOM, я бы попробовал обнулить командную строку phantomjs со сценарием для печати page.content. –

+0

Я рассмотрю эти предложения и вернусь к вам. Спасибо друг! – christopher

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