none
WebBrowserコントロールにYahoo!ログインページを表示し、自動的にID,パスワードを入力してログインが成功、失敗したか知りたい RRS feed

  • 質問

  • こんにちは。過去のスレッドにWebBrowserコントロールに表示しているホームページ上にあるフォームに値を自動入力する方法がありました。

     

     private void webBrowser1_DocumentCompleted(object sender, ebBrowserDocumentCompletedEventArgs e)
      {

             if (e.Url.AbsoluteUri == https://login.yahoo.co.jp/config/login?.src=www&.done=http://www.yahoo.co.jp)

              {

                  webBrowser1.Document.All.GetElementsByName("login")[0].InnerText = "ヤフーID";

                  webBrowser1.Document.All.GetElementsByName("passwd")[0].InnerText = "パスワード";

     

                  webBrowser1.Document.Forms[0].InvokeMember("submit");

              }

          } 

     

    しかし、これだけですと、ログインに成功したのか、失敗したのか、知るすべがありません。

    Yahooの仕組みとして

     

    ログインに成功:Yahooトップページが表示される

    ログインに失敗:ページはそのままで「パスワードが正しくありません」というメッセージが表示される

     

    ログイン成功後、WebBrowserコントロールのURI(Url.AbsoluteUri )を取得すると、URLは元のままで、Yahoo!トップページのURLが取得できません。

     

    フォームに自動入力後に表示されたページのURLを取得できれば、Yahoo!トップページなら成功、などの判定ができると思うのですが。。

     

    ログイン成功/失敗を取得する方法があれば教えてください。

    よろしくお願いします。

     

    2007年4月25日 9:28

回答

  • とりあえずこちらで試したところ、以下のコードでURLが変化しました。

     

            public AutoLogin()

            {

                InitializeComponent();

     

                webBrowser1.Navigate("https://login.yahoo.co.jp/config/login?.src=www&.done=http://www.yahoo.co.jp");

            }

     

            private void button1_Click(object sender, EventArgs e)

            {

                webBrowser1.Document.All.GetElementsByName("login")[0].InnerText = "hoge";

                webBrowser1.Document.All.GetElementsByName("passwd")[0].InnerText = "fuga";

                webBrowser1.Document.Forms[0].InvokeMember("submit");

           }

     

            private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

            {

                System.Diagnostics.Debug.WriteLine(this.webBrowser1.Document.Url.AbsoluteUri);

            }   

    2007年4月26日 10:24
    モデレータ

すべての返信

  •  daemon_kun さんからの引用

    フォームに自動入力後に表示されたページのURLを取得できれば、Yahoo!トップページなら成功、などの判定ができると思うのですが。。

    これは、webBrowser1.Document.Url.AbsoluteUri で取れると思います。

    あと、webBrowser1.Document.Cookie なんかでもひょっとすると判断できるかもしれません。

    2007年4月25日 15:19
    モデレータ
  • ご解答ありがとうございます。

    私示して頂いたプロパティwebBrowser1.Document.Url.AbsoluteUri からURLを取得して判定すればいいな、と思ったのですがログイン成功後もURIが変わりません。

     

    フォームにID用のテキストボックス(textbox1)とパスワード用のテキストボックス(textbox2)がある場合、ボタンを押すと次のようなコードでログインを実行します。

     

    また、フォームロード時にログインページを表示します。

     

          private void Form1_Load(object sender, EventArgs e)
            {
                //ログインページを開く
                webBrowser1.Navigate("https://login.yahoo.co.jp/config/login?.src=www&.intl=jp");
                

        //ページが読込まれるまで待機する
                while (webBrowser1.IsBusy == true || webBrowser1.ReadyState != WebBrowserReadyState.Complete)
                {
                    System.Threading.Thread.Sleep(50);
                    System.Windows.Forms.Application.DoEvents();
                }
            }

     

          private void button1_Click(object sender, EventArgs e)
            {

                    webBrowser1.Document.All.GetElementsByName("login")[0].InnerText = textBox1.Text;
                    webBrowser1.Document.All.GetElementsByName("passwd")[0].InnerText = textBox2.Text;
                    webBrowser1.Document.Forms[0].InvokeMember("submit");

     

        //ページが読込まれるまで待機する
                while (webBrowser1.IsBusy == true || webBrowser1.ReadyState != WebBrowserReadyState.Complete)
                {
                    System.Threading.Thread.Sleep(50);
                    System.Windows.Forms.Application.DoEvents();
                }

        

        //ここでログイン成功後、URLを取得しても元のままです。

        Console.WriteLine(webBrowser1.Document.Url.AbsoluteUri);
            }

     

    しかし、表示されているページはヤフートップページが表示されます。

    ページが読込まれるまで待機しても何故かURIは元のままなので、成功したのかどうか判定する事ができません。

    どうすればURIも変化するのでしょうか?

    2007年4月26日 6:47
  • とりあえずこちらで試したところ、以下のコードでURLが変化しました。

     

            public AutoLogin()

            {

                InitializeComponent();

     

                webBrowser1.Navigate("https://login.yahoo.co.jp/config/login?.src=www&.done=http://www.yahoo.co.jp");

            }

     

            private void button1_Click(object sender, EventArgs e)

            {

                webBrowser1.Document.All.GetElementsByName("login")[0].InnerText = "hoge";

                webBrowser1.Document.All.GetElementsByName("passwd")[0].InnerText = "fuga";

                webBrowser1.Document.Forms[0].InvokeMember("submit");

           }

     

            private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

            {

                System.Diagnostics.Debug.WriteLine(this.webBrowser1.Document.Url.AbsoluteUri);

            }   

    2007年4月26日 10:24
    モデレータ
  •  trapemiya

     

    何となく分かりました(>_<。)

     

    ページを読込まれるまで待つのではなくDocumentCompletedイベントで完全にページが読込まれた後のURIを取得するって事ですね。

     

    有難うございました。

    2007年4月27日 1:43