1

我有一个网页加载到 WebBrowser 对象中。我想要做的是访问该页面上的元素以输入数据。例如,输入用户名和密码并提交表单。

这怎么可能?有任何想法吗?

我可以使用 HTMLAgilityPack 访问元素并设置它们的值吗?

4

4 回答 4

2

查看此文档示例:http: //msdn.microsoft.com/en-us/library/system.windows.forms.htmldocument.aspx

通过 web 浏览器控件,有一个 HtmlDocument 类型的 Document 属性,它使您能够影响页面。我个人不知道它是否可以做你想做的一切,但这将是一个很好的起点。

HTH。

于 2010-06-17T18:46:36.100 回答
0

另请查看使用 HtmlAgilityPack 使用用户名和密码字段执行 POST 请求的示例:

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

于 2010-06-25T19:50:28.700 回答
0

有很多解决方案。我自己用过的两个是:

WaitN - http://watin.sourceforge.net/ WebAii - 显然是由 Telerik 购买的?以前有免费版,不知道还有没有 - http://www.artoftest.com/index.html

然后就是对 WebBrowser 控件使用自动化。自动化框架使它变得如此简单。

于 2010-06-17T18:39:23.597 回答
0

我使用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;
    }
于 2010-07-09T15:25:10.840 回答