Автоматизировать вход на сайт и заполнение форм? - PullRequest
5 голосов
/ 13 ноября 2009

Я пытаюсь зайти на сайт и автоматически сохранить HTML-страницу (я хочу делать это через регулярные промежутки времени). На первый взгляд, это типичный современный веб-сайт, на котором, если пользователь переходит непосредственно к «заблокированному» URL-адресу, появляется форма входа в систему и после входа пользователь перенаправляется на нужную страницу.

Я дал механизму выстрел (http://wwwsearch.sourceforge.net/mechanize/), но он не нашел некоторые элементы формы, которые были необходимы для входа в систему (скрытые элементы, которые имеют некоторые значения, введенные функцией javascript, которая запускается, когда пользователь нажимает " войти в систему ").

Я немного поиграл с элементом управления "веб-браузер" в .NET, но быстро потерял интерес, потому что даже не мог заставить его отправить запрос на странице Google.

Мне все равно, что это за язык; Я научусь этому, чтобы решить эту проблему. Как минимум, он должен работать в Windows.

Простой пример, скажем, ввод запроса в поле поиска Google будет отличным бонусом.

Ответы [ 6 ]

9 голосов
/ 14 декабря 2009

По моему опыту, самый надежный способ - использовать javascript. Хорошо работает в .Net. Для проверки перейдите по следующим адресам один за другим в Firefox или Internet Explorer:

http://www.google.com
javascript:function f(){document.forms[0]['q'].value='stackoverflow';}f();
javascript:document.forms[0].submit()

Выполняет поиск "stackoverflow" в Google. Чтобы сделать это в VB .Net с помощью элемента управления webbrowser, сделайте следующее:

WebBrowser1.Navigate("http://www.google.com")
Do While WebBrowser1.IsBusy OrElse WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
    Threading.Thread.Sleep(1000)
    Application.DoEvents()
Loop
WebBrowser1.Navigate("javascript:function%20f(){document.forms[0]['q'].value='stackoverflow';}f();")
Threading.Thread.Sleep(2000) 'wait for javascript to run
WebBrowser1.Navigate("javascript:document.forms[0].submit()")
Threading.Thread.Sleep(2000) 'wait for javascript to run

Обратите внимание, как пространство в URL преобразуется в% 20. Я не уверен, если это необходимо, но это не повредит. Важно, чтобы первый JavaScript был в функции. Вызовы Sleep () должны ждать загрузки Google, а также вещей javascript. Цикл Do While может выполняться вечно, если страница не загружается, поэтому для целей автоматизации имеется счетчик, который истекает через, скажем, 60 секунд.

Конечно, для Google вы можете просто перейти непосредственно на www.google.com?q=stackoverflow, но если на вашем сайте есть скрытые поля ввода и т. Д., То это путь. Работает только для сайтов HTML - флеш это совсем другое дело.

2 голосов
/ 13 ноября 2009

Если я вас правильно понял, вы хотите войти только на одну веб-страницу, и эта форма всегда остается неизменной. Вы можете либо перепроектировать java-скрипт, либо отладить его через отладчик javascript в браузере (например, firebug для firefox). Или вы можете заполнить форму в своем браузере и просмотреть запрос http через анализатор сетевых пакетов. Когда у вас есть все необходимые данные формы для отправки, вы можете сделать то же самое с вашей программой (это то, что я делал в прошлый раз, когда у меня была довольно похожая задача). Не забудьте сохранить все данные cookie, которые вы запросили, с веб-сервера и отправить их со следующим запросом, чтобы «оставаться в системе».

1 голос
/ 13 ноября 2009

Это уже обсуждается здесь .

По сути, вы можете использовать selenium , инструмент для веб-автоматизации с открытым исходным кодом, в котором есть библиотека api, доступная на различных языках, таких как java, ruby ​​и т. Д.

0 голосов
/ 23 января 2013

«Я пытаюсь зайти на сайт и автоматически сохранить HTML-страницу»

 SAVEAS TYPE=HTM FOLDER=C: FILE=page.html

https://addons.mozilla.org/en-US/firefox/addon/imacros-for-firefox/?src=search

Эти команды, воспроизводимые в аддоне iMacros, сохранят страницу на диске C: и назовут ее page.html

Кроме того,

URL GOTO=www.website.com

Переходит на конкретный веб-сайт, который вы хотите сохранить. Вы также можете использовать скрипты в iMacros и устанавливать различные веб-сайты в макросах.

0 голосов
/ 22 января 2013

Я использовал Ruby и Watir (набор для тестирования веб-приложений) для чего-то похожего, но это была очень маленькая задача (в основном просмотр URL-адресов из текстового файла и загрузка изображения).

Существует также расширение под названием iMacros, которое может выполнять некоторую автоматизацию, но я лично не знаком с ним (просто знаю об этом).

0 голосов
/ 13 ноября 2009

Neoload может обрабатывать заполнение формы с проверкой подлинности, если вы не хотите собирать данные, просто выполните действия. Это веб-инструмент для снятия стресса, поэтому он не предназначен для использования в качестве временной службы, но вы МОЖЕТЕ просто оставить его включенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...