Автоматизировать вход на сайт и заполнение форм?

Asked
Viewd27441

5

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

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

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

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

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

  • Я рекомендую попробовать AutoHotkey для автоматизации веб-страниц.Синтаксис временами бывает непоследовательным, но я считаю, что язык очень гибкий.

    Stevoisiak29 августа 2017, 16:50

6 ответов

10

По моему опыту, самый надежный способ - использовать 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 с помощью элемента управления веб-браузер, сделайте следующее:

 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 Loop может работать вечно, если страница не загружается, поэтому в целях автоматизации есть счетчик, который будет отключаться, скажем, через 60 секунд.

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

  • Вы, наверное, правы.Я использую другую ветку в своем проекте.

    Eyal16 декабря 2009, 15:20
  • Как написано, это не работает - вероятно, потому, что элемент управления WebBrowser выполняется в том же потоке.Но если вызовы Navigate разделены, скажем, на три события нажатия кнопки, это легко проверить.Еще раз спасибо.

    darda16 декабря 2009, 04:31
1

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

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

0

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

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

0

«Я пытаюсь войти на веб-сайт и автоматически сохранить 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 и устанавливать различные веб-сайты в макросе.

2

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

  • Звучит как жизнеспособное решение, но анализ пакетов выходит далеко за рамки моих возможностей.

    darda13 ноября 2009, 21:09
0

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

  • Если в «сбор данных» вы включаете «сохранение итоговой HTML-страницы», то это не то, что я хочу.

    darda13 ноября 2009, 20:55