Как имитировать веб-браузер с Java с помощью jSoup - PullRequest
0 голосов
/ 17 октября 2011

Я использую такой запрос в jSoup:

Document doc = Jsoup.connect(urlString).timeout(1000).post();

Работает для некоторых сайтов, однако:

  • это не работает для поисковых запросов Google (например, urlString = "http://www.google.com/search?q=text") - я не знаю почему, как это особенное

  • итоговые документы содержат сообщения типа «JavaScript должен быть включен в вашем браузере», которых я бы лучше избегал

  • возможно, есть еще причуды, но я еще не проверил это полностью ...

Мой вопрос: можно ли избежать этих проблем, если бы мы могли более точно имитировать веб-браузер? Каков наилучший способ сделать это?

Каковы другие различия, с которыми можно столкнуться при получении страниц через веб-браузер и через Java (URLConnection или jSoup)?

Ответы [ 2 ]

2 голосов
/ 19 октября 2011

Я хотел бы ответить на ваш вопрос.В Google при поиске параметры передаются в URL, так что это запрос на получение.В этом случае вам следует использовать метод .get ().

Хотя существует много веб-сайтов, параметры передаются с помощью пост-запроса.На примере простой страницы входа в систему всех веб-сайтов имя пользователя и пароль передаются с помощью POST REQUEST. Кроме того, на этой странице есть много скрытых полей, которые также необходимо пропустить.Если мы пропустили эти параметры, это приведет к ошибке.

0 голосов
/ 18 октября 2011

Я понял, что проблема с некоторыми сайтами не отвечает на самом деле, что я использовал post () вместо get ().С get () он теперь работает нормально!

Также, вероятно, помогает добавить userAgent к запросу, например:

.userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")

Тем временем я также протестировал HtmlUnit длята же задача, и она сработала, но это кажется излишним для цели просто получить HTML-файл (для какой-то обработки).Для выполнения этой задачи в основном запускается целый невидимый веб-браузер.

...