2010-06-17 1 views
1

У меня есть веб-страница, загруженная в объект WebBrowser. Я хочу сделать доступ к элементам на этой странице для ввода данных. Например, введите имя пользователя и пароль и отправьте форму.Могу ли я установить значения для ввода внутри моего элемента управления WebBrowser?

Как это возможно? Есть идеи?

Могу ли я использовать HTMLAgilityPack для доступа к элементам и их значений?

+0

Если форма передает через GET, то это просто вопрос построения URL с? Имя = BlaBla и пароль = BlaBla параметров, а затем обжиг URL. –

+0

Да, Джон, я действительно. Нет biggie, я нашел метод, который я использовал для предыдущих ботов. Не закодированы на C# почти год. –

+0

Sergio Tapia, нет, это POST-запросы. –

ответ

0

Существует множество решений. Два из них, которые я использовал, являются:

WaitN - http://watin.sourceforge.net/ WebAii - очевидно, приобретенный Telerik? Раньше была свободная версия, но не уверен, что ее больше нет - http://www.artoftest.com/index.html

Затем используется только автоматизация против элемента управления WebBrowser. Рамка автоматизации делает ее намного проще.

+0

Я смутно помню WaitiN. Я почти уверен, что это то, что я использовал в прошлом году при создании веб-бота. Я проверю это. Спасибо, что освежил мою память. –

+0

Да, похоже, он доступен на SourceForge. Когда я просто обыскал свой компьютер, я нашел .dll. Некоторое время на этом ПК не было. Еще раз спасибо. –

2

проверить эту документацию, например: http://msdn.microsoft.com/en-us/library/system.windows.forms.htmldocument.aspx

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

HTH.

0

Я использую комбинацию HtmlAgilityPack и скрипача смотреть трафик. С помощью скрипача вы можете видеть сообщение, которое делается на сервере, и просто копировать его. Затем вы можете захватить данные cookie, чтобы сохранить сеанс входа в систему. Оттуда его просто нормальная прогулка по сайту.

Несколько вещей, на которые нужно обратить внимание, если вы используете логин для получения данных, может быть файл cookie. Если это так, вам нужно установить его в cookieContainer. Это выборочная функция, которую я использую для отправки данных в URL-адрес.

private string PostWebRequestContent(Uri uri, string postData) 
    { 
     CookieContainer cookies = LoggedInCookie(); 
     foreach (Cookie c in cookies.GetCookies(uri)) 
     { 
      int i = 0; 
     } 

     HttpWebRequest req = GetWebRequest(uri); 
     req.CookieContainer = cookies; 


     req.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, application/vnd.xfdl; version=7.5.0.51, application/x-shockwave-flash, */*"; 


     req.Method = "POST"; 
     req.Headers.Add("Accept-Language: en-us"); 
     //req.Headers.Add("Accept-Encoding: gzip,deflate"); 
     //req.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"); 
     req.KeepAlive = true; 
     req.ContentType = "application/x-www-form-urlencoded"; 

     StreamWriter requestWriter = new StreamWriter(req.GetRequestStream()); 
     requestWriter.Write(postData); 
     requestWriter.Close(); 


     string sid = ""; 

     try 
     { 
      using (HttpWebResponse res = (HttpWebResponse)req.GetResponse()) 
      { 
       using (StreamReader sr = new StreamReader(res.GetResponseStream())) 
       { 
        sid = sr.ReadToEnd().Trim(); 
       } 
      } 
     } 
     catch (WebException e) 
     { 
      Console.WriteLine(e.Message); 
     } 

     return sid; 
    } 

функция Cookie сеанса

private CookieContainer GetSessionCookie(Uri uri) 
    { 
     HttpWebRequest req = GetWebRequest(uri); 

     CookieContainer cookies = new CookieContainer(); 
     req.CookieContainer = cookies; 

     req.GetResponse().Close(); 

     return cookies; 
    } 
Смежные вопросы