Могу ли я установить значения для входов внутри моего элемента управления WebBrowser? - PullRequest
1 голос
/ 17 июня 2010

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

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

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

Ответы [ 4 ]

2 голосов
/ 17 июня 2010

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

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

НТН.

0 голосов
/ 09 июля 2010

Я использую комбинацию HtmlAgilityPack и fiddler для наблюдения за трафиком.С помощью fiddler вы можете увидеть сообщение, которое отправляется на сервер, и просто скопировать его.Затем вы можете захватить данные 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;
    }
0 голосов
/ 25 июня 2010

Также проверьте этот пример, который использует HtmlAgilityPack для выполнения запроса POST с полями имени пользователя и пароля:

http://refactoringaspnet.blogspot.com/2010/04/using-htmlagilitypack-to-get-and-post.html

0 голосов
/ 17 июня 2010

Есть много решений.Два, которые я использовал сам:

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

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

...