1

WebBrowserオブジェクトにWebページをロードしています。私がやりたいのは、そのページの要素にアクセスしてデータを入力することです。たとえば、ユーザー名とパスワードを入力してフォームを送信します。

これはどのように可能ですか?何か案は?

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

解決策はたくさんあります。私が自分で使用した2つは次のとおりです。

WaitN- http: //watin.sourceforge.net/ WebAii-どうやらTelerikが購入したのですか?以前は無料バージョンがありましたが、もうあるかどうかはわかりません-http://www.artoftest.com/index.html

次に、WebBrowserコントロールに対して自動化を使用するだけです。自動化フレームワークにより、非常に簡単になります。

于 2010-06-17T18:39:23.597 に答える
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;
    }

クッキーセッション機能

    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 に答える
0

また、HtmlAgilityPack を使用してユーザー名とパスワードのフィールドで POST 要求を実行するこの例も確認してください。

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

于 2010-06-25T19:50:28.700 に答える