Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > Как залогиниться на сайт?


Автор: Dean 1.2.2010, 17:37
Всем привет.
Моя задача такая: залогиниться на сайт,  перейти по паре ссылок, ввести данные для поиска в форму и скачать документ, который вернут по результатам поиска.
У меня пока получилось только зайти на первую страницу сайта, но как вбить туда логин, пароль и нажать кнопку "login" я не знаю, и как потом пойти по нужной мне ссылке тоже.   smile  
Для этого надо выполнить несколько GET/POST запросов или можно объединить некоторые действия? И как послать несколько запросов серверу подряд?
Протокол HTTP 1.1.
Может кто подскажет? Если можно по-проще, для чайника  smile 

Автор: LSD 1.2.2010, 20:55
Цитата(Dean @  1.2.2010,  17:37 Найти цитируемый пост)
Для этого надо выполнить несколько GET/POST запросов или можно объединить некоторые действия?

В простейшем случа будет так:
1. Анализируем форму логина и выясняем какие поля (имена) и каким образом (GET/POST/AJAX) отправляются на сайт.
2. С помощью http://hc.apache.org/httpclient-3.x/ отправляем запрос с логином и паролем на сайт, в ответ мы получим страничку и куку с сессией.
2а. Возможно надо будет выставить правильный UserAgent. 
3. Дальше скачиваем нужные HTML странички, парсим и ищем нужные ссылки, потом по ним опять скачиваем  HTML или файлы, смотря что там надо.

Хотя в принципе возможно еще придется с JavaScript-ом повозиться или еще с чем-то таким же приятным, если сайт защищается от ботов.

Автор: Akeem 2.2.2010, 22:07
Я бы посоветовал использовать селениум (Selenium) и не парится. Пару строк кода и все. 

Автор: SergeyFromUkraine 3.2.2010, 01:25
Dean , у тебя есть несколько возможностей , которые отличаются трудоемкостью.

1) наиболее трудоемкий способ - эмулировать действия на уровне HTTP протокола, то есть отсылать HTTP GET POST запросы, помнить про Cookies и Referer хеадеры.
2) Есть библиотека HtmlUnit  - эмулирует действия на уровне пользователя http://htmlunit.sourceforge.net/gettingStarted.html , тоесть предоставляет API для загрузки страницы , поиска элементов интерфеса(input , anchors, buttons)  И нажатие на них (click, submit) . Частично поддерживает JavaScript.
3) Есть еще Selenium - аналогичен HtmlUnit  , но действия навигации и прочего выполняют уже не java классы, а настоящий браузер ,которым управляет Selenium . Полностью поддерживает JavaScript, ибо браузер.   Selenium  чуть медленнее HtmlUnit  из-за того, что нужно запускать браузер.

Также хорошо бы установить Firebug (аддон для Firefox) или его аналоги для других браузеров.
Во первых, в нем есть вкладка Network - в которой будет показан HTTP обмен между браузером и сервером. Во вторых используя Inspect Element и вкладку HTML - можно легко подобрать признаки, по которым искать элементы если будешь использовать HtmlUnit  или  Selenium  (имя , атрибуты, id, xpath).

Автор: Dean 5.2.2010, 17:34
Спасибо всем за советы  smile  
С GETами и POSTами не совсем понятно что и как делать.
Пока получилось сделать с помощью WebDriver. 
Только можно ли сделать чтоб окно браузера не выскакивало каждый раз при запуске?

Автор: Akeem 5.2.2010, 20:24
Dean
Как с WebDriver так и с Selenium (так как первый уже включен в новую версию второго) такое не получится.  Так как оба спроектированы чтобы броузер выскакивал. Такое можно было провернуть с HttpUnit. Либо поробывать использовать WEbDriver как:
Код

WebDriver driver = new HttpUnitDriver();



Сам такого не делал, точно не скажу. 

Автор: Dean 8.2.2010, 11:03
Akeem, получилось - окно браузера больше не выскакивает  smile
только не 
Код

WebDriver driver = new HttpUnitDriver();

а 
Код

WebDriver driver = new HtmlUnitDriver();

хотя может твой вариант тоже возможен, но у меня эклипс на него ругался.

Автор: Akeem 11.2.2010, 23:05
Dean
Я по пам"яти писал, так что мог и ошибится в названии класса  smile  (Есть только HttpCommandExecutor и HttpCommandProcessor )

*возможен если самому имплементировать интерфейс WebDriver  smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)