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

Я действительно не соглашаюсь на набор глобальных переменных в маскарадном костюме идея. Одиночные элементы действительно полезны, когда используется решить правильную проблему. Позвольте мне дать Вам реальный пример.

я когда-то разработал маленькую часть программного обеспечения к месту, я работал, и некоторые формы должны были использовать некоторую информацию о компании, ее сотрудниках, сервисах и ценах. В ее первой версии система продолжала загружать те данные из базы данных каждый раз, когда форма была открыта. Конечно, я скоро понял, что этот подход не был лучшим.

Тогда я создал singleton-класс, названный компания , который инкапсулировал все о месте, и это было абсолютно заполнено данными к тому времени, когда система была открыта.

Это не был просто набор переменных в маскарадном костюме, потому что это имелось десятки обязанностей, как связь со слоем персистентности для сохранения/получения данных о компании, соглашении с сотрудниками и ценовыми наборами, и т.д.

Плюс, это была фиксированная, легкодоступная точка в масштабе всей системы для имения данных компании.

5
задан darda 13 November 2009 в 20:38
поделиться

4 ответа

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

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

9
ответ дан 13 December 2019 в 05:37
поделиться

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

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

1
ответ дан 13 December 2019 в 05:37
поделиться

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

2
ответ дан 13 December 2019 в 05:37
поделиться

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

0
ответ дан 13 December 2019 в 05:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: