DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Forms[0].InvokeMember("Submit")が動かない。

環境/言語:[C# NetFrame(3.5,4)]
分類:[.NET]

VS2010 C#を使っています。
クロネコメンバーズのログインを自動化したいのですが。
FormにwebBrowserコントロールと、ボタンを貼り、
下記のように記述しました。
しかし、ボタンを押しても全く動きません。エラーにもなりません。
HTML中にFormがひとつしかないことや、Forms[0]が対象のFormを示していることは確認しました。
https:が問題なのかとも思うのですが、対策がわかりません。
どうすればよいのか教えてください。

public Form1()
{
InitializeComponent();
submit.Click += new EventHandler(submit_Click);
webBrowser1.Navigate("https://cmypage.kuronekoyamato.co.jp/portal/entrance?id=kojintop");
}

void submit_Click(object sender, EventArgs e)
{
HtmlDocument Doc = webBrowser1.Document;
Doc.Forms[0].InvokeMember("Submit");
}
■No27372に返信(藍さんの記事)
> Doc.Forms[0].InvokeMember("Submit");

Submit メソッドではなく、
submit メソッドなのでは? (未検証)
■No27373に返信(魔界の仮面弁士さんの記事)
> ■No27372に返信(藍さんの記事)
>> Doc.Forms[0].InvokeMember("Submit");
>
> Submit メソッドではなく、
> submit メソッドなのでは? (未検証)

submit,Submit,SUBMIT
一通りやってみましたが変化はありません。
■No27374に返信(藍さんの記事)
> submit,Submit,SUBMIT
> 一通りやってみましたが変化はありません。

では、試しに
 webBrowser1.Navigate("javascript:alert(document.forms[0].submit())");
としてみたらどうなりますか?

プログラムを書いて試してはいないのですが、IE7 環境で
 https://cmypage.kuronekoyamato.co.jp/portal/entrance?id=kojintop
を表示してから
 javascript:alert(document.forms[0].submit())
をアドレスバーから指定したところ、
 『クロネコIDを入力してください。』
 『パスワードを入力してください。』
という画面に遷移したので、一応 submit されたようです。
私の手元でも現象は再現しました。
// Win7(x86) + C# + .NET 4

■No27375に返信(魔界の仮面弁士さんの記事)
> では、試しに
>  webBrowser1.Navigate("javascript:alert(document.forms[0].submit())");
> としてみたらどうなりますか?

私の環境では、undefined とは帰ってくるが、画面には変化を起こさないようでした。
原因は調べていません。

> プログラムを書いて試してはいないのですが、IE7 環境で
>  https://cmypage.kuronekoyamato.co.jp/portal/entrance?id=kojintop
> を表示してから
>  javascript:alert(document.forms[0].submit())
> をアドレスバーから指定したところ、
>  『クロネコIDを入力してください。』
>  『パスワードを入力してください。』
> という画面に遷移したので、一応 submit されたようです。

IE8(iexplorer.exe)では submit されるようです。


ちなみに、以下のコードだと変化がありました。
(参照元: http://www.atmarkit.co.jp/fdotnet/dotnettips/860controlwb/controlwb.html )

HtmlElementCollection all = webBrowser1.Document.All;
HtmlElementCollection forms = all.GetElementsByName("Submit");
forms[0].InvokeMember("click"); // ボタンのクリック
> HtmlElementCollection all = webBrowser1.Document.All;
> HtmlElementCollection forms = all.GetElementsByName("Submit");
> forms[0].InvokeMember("click"); // ボタンのクリック

上記 記述でうまく動作しました。
ただ、これはformのsubmitメソッドを呼び出したのではなく、submitボタンをクリックしたということですよね。
疑問は残りますが、当面の問題は解決しました。
ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板