特定のサイトへのログインを自動化しようとしています。これは、2 つのテキスト入力 (ユーザー名、パスワード) と「送信」タイプのボタンを備えた典型的なフォームのようです。3 つすべてに ID があるため、それぞれに対して GetElementById を簡単に呼び出すことができます。
私のコードは次のようになります。
webBrowser1.Document.GetElementById("username").SetAttribute("Value", "myUser");
webBrowser1.Document.GetElementById("password").SetAttribute("Value", "myPass");
webBrowser1.Document.GetElementById("submitButton").InvokeMember("Click");
これは(ちょっと)うまくいきます。値が設定され、フォームが送信/リクエストされてサーバーに送信されます。しかし、すぐにJavaScriptエラーが発生します。「クリック」行を削除し、プログラムにページをロード/ユーザー名/パスワードを入力させ、ボタンを手動でクリックすると、すべてが 100% 機能します。
わかりました....クリックする必要はありません。キーボードがそのまま使える!3つのタブに続いてEnterキーを押すと、正常にログインできます。そのため、 SendKeys.Send() を使用しようとしました
Thread.Sleep(250);
SendKeys.Send("{TAB}");
Thread.Sleep(250);
SendKeys.Send("{TAB}");
Thread.Sleep(250);
SendKeys.Send("{TAB}");
Thread.Sleep(250);
SendKeys.Send("{ENTER}");
もともと1行だったので、デバッグ中に遅延を導入しましたが、役に立ちませんでした。上記のコードは、自動クリックを行った場合とまったく同じ結果を生成します。JavaScript エラーが発生し、次のページが読み込まれません。
しかし、タブ、タブ、タブ、エンターを押すと、機能します。
SendKeys.Send("{TAB}") コードを保持すると、自動化プログラムがユーザー名/パスワードを入力し、送信ボタンにフォーカスを移動します。キーボードで Enter キーを押しても、JavaScript エラーは発生せず、すべて問題ありません。しかし、SendKeys.Send("{ENTER}") を使用すると、何も機能しません。
Windows OSに関する限り、SendKeys.Sendが「実際の」キープレスを生成したという印象を受けましたか?
何が起こっているのか、このログインを WebBrowser コントロールで動作させる方法を誰か教えてもらえますか?