2015-12-20 4 views
1

Дело в том, что я пытаюсь получить html-документ с классом Jsoup, и я понимаю, что документ, который я получаю с использованием Jsoup.connect, не совсем похож на документ, который я получаю, если я напрямую загружаю это с веб-браузером.Получить html документ programmaticaly, имитирующий веб-браузер

Пример:
Я хочу контролировать цены на статью. Я получаю HTML документы «Icecat» с помощью:

Jsoup.connect("http://icecat.es/es/p/sony/mdr-as200-blk/auriculares-0027242861022-Sony-MDR-AS200-18145805.html?ti=offers") 
    .userAgent(userAgentString).timeout(5000) 
    .followRedirects(true).execute(); 

(userAgentString: Я попытался с различными из них)

Но документ я не располагает информацией о ценах, вкладка с информация появляется «неактивно».
В противном случае, если я попытаюсь загрузить его с помощью любого веб-браузера, на странице будет показана таблица цен.

Bonus вопрос

Я получаю такое же поведение, пытаясь получить результат страницы Google. Ввод непосредственно в веб-браузере https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#tbm=shop&q=Sony+MDR-AS200 в порядке, но, получив его с помощью java, я перенаправлен на домашнюю страницу google. Я знаю TOS Google, но я не хочу делать массивный синтаксический анализ.

ответ

3

Jsoup не выполняет JavaScript. Если сайт, который вы пытаетесь получить, использует некоторые вызовы AJAX и создает (часть) DOM динамически, вам не повезло с Jsoup.

Для этого вы можете использовать selenium webdriver или попытаться найти вызовы AJAX и вызвать их напрямую.

+1

Возможно, стоит упомянуть HtmlUnit (у которого есть драйвер Selenium). – chrylis

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