2012-05-04 3 views
4

Фон: Я создаю приложение Windows Form, которое автоматизирует запись заказа в веб-приложении интрасети. У нас есть большой объем заказов, который нужно сделать, что будет стоить нам больших денег, поэтому я хотел бы автоматизировать задачу.C# Webbrowser Automation

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

+0

певца, вероятно, лучше использовать WebClient, чтобы отправить окончательный запрос с полной формой на вебе-сервер сразу –

+3

ли эти бланки заказов простого HTTP POST, либо вам нужно ждать AJAXified запросов к вернуть? – user7116

ответ

4

У вас есть два варианта, в зависимости от уровня сложности вам нужно:

  1. Используйте HTTP Debugger как Fiddler, чтобы выяснить, данные POST вы нужно отправить на каждой странице и имитировать его через HttpWebRequest.
  2. Используйте Browser Automation Tool как Selenium и выполните эту работу.

Примечание: Ваши действия могут рассматриваться как спам на веб-сайте, поэтому будьте готовы к блокировке IP, капчи ...

0

Вы могли бы дать Селен идти: http://seleniumhq.org/ автоматизации UI является гораздо более интуитивный подход к этим задачам.

4

У вас есть несколько вариантов. Для того, чтобы расширить ответы от других и добавить новую идею ...

Делают это с помощью элемента управления WebBrowser: Это технически возможно либо инъекционного JavaScript в целевую страницу как demonstrated here или создание объекта JavaScript и использовать его как мост через имущество webbrowser.objectforscripting. Это очень хрупок - что-то простое, как изменение сайта Идентификатором элемента может сломать его. Вам также необходимо убедиться, что ваш код не мешает функционированию формы (имена функций объединения и т. Д.)

Сделайте это с помощью обратной передачи: Отслеживайте связь между веб-браузером и сервером (Я лично предпочитаю Firfox/Firebug, но то есть/Fiddler или Chrome/F12 тоже хороши). Пока вы можете точно воспроизвести действия браузера, сервер не может знать разницу. Проблема в том, что браузеры сложны, и чем более безопасна форма, тем более требовательны серверы. Это означает, что вам, возможно, придется подделывать логин, получать файлы cookie, отправлять их обратно на запросы подсетей, обрабатывать данные ViewState и переменные предотвращения xss. Это возможно, и это гораздо более надежный, чем первый вариант, но может быть болью для работы. Если это не очень безопасная форма, это ваш лучший выбор. More information here

Сделай автоматизации браузера:Selenium, вероятно, лучший вариант здесь (как уже отмечалось другими), но страдает от подобного недостатка в контроле WebBrowser в том, что он чувствителен к изменениям на самой форме (но не как mcuh, так как управление веб-браузером).

Кстати, если у вас есть версия Visual Studio Ultimate/Test (и некоторые другие, не уверенные), она включает в себя набор инструментов для тестирования, включая отличный механизм для автоматизации нагрузочного тестирования веб-сайта. Это также превосходно для отслеживания того, что именно делает форма, как вы можете видеть каждый шаг эмуляции.

Надеется, что это помогает