C# で初めて WebBrowser コントロールを使い始めました。テキストボックスにテキストを書き込んでから、ログイン用のボタンをクリックするという、非常に単純なことをしようとしています。
WebContest wc_class = new WebContest();
...
wc_class.wbThread1.Navigate("http://www.mysite.com");
while (wc_class.wbThread1.ReadyState != WebBrowserReadyState.Complete) Application.DoEvents();
ここで、ログインページの ReadyState は完全に機能します。次に、テキストボックスにテキストを書き続けてからボタンをクリックします
wc_class.wbThread1.Document.GetElementById("field_email").SetAttribute("value", tbLogin.Text);
wc_class.wbThread1.Document.GetElementById("field_password").SetAttribute("value", tbPassword.Text);
wc_class.wbThread1.Document.GetElementById("field_remember").InvokeMember("click");
wc_class.wbThread1.Document.GetElementById("hook_FormButton_button_go").InvokeMember("click");
今回は、ログイン後にページからリンクを抽出する必要があります。このようなことをしてください:
...
foreach (HtmlElement link in wc_class.wbThread1.Document.Links)
{
string href = link.GetAttribute("HREF");
string fileName = "links.txt";
using (FileStream fs = new FileStream(fileName, FileMode.Append, FileAccess.Write))
using (StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine(href);
}
そして問題は、DocumentComplete イベントを期待することです。ログイン後のページはロード待ちではありません。なんで?ログインボタンをクリックした後、ページの ReadyState を確認するにはどうすればよいですか?
そして、ページナビゲーションのすべてのイベントに対してそれを行う方法は?