矛盾の原因は何ですか - HTMLInputElementのMSHTML
質問
私の要件は、 - 私は、プログラムのInternet Explorerのインスタンスを開きます。その後、私はHTMLDocumentのを取得し、入力フィールド(テキストボックス)を探してその値を設定します。
HTMLDocument oDoc = new mshtml.HTMLDocumentClass();
oDoc = (HTMLDocument)oBrowser.Document;
HTMLInputElement txtbox1 = (HTMLInputElement)oDoc.all.item("login",0);
txtbox1.setAttribute("value", "test_user_name", 0);
//txtbox1.value = "test_user_name";
入力フィールドが探している刚性私のコードは正常に動作します。問題は、どこかに私は上記の投稿ahveのコードです。私はその後、私は名前を「ログイン」してHTMLInputElementのを探し、のHTMLDocumentオブジェクトを取得します。ここで、私は矛盾に直面している - テキストボックスは時々認識されないので、それがtxtbox1.SetAttribute
またはtxtbox1.value
に達した場合、その後NullReferenceException
がスローされます。しかし、これは常に発生しません。時々、例外がスローされ、コードがうまく機能していません。
私はコードをデバッグを試してみましたが、私はコードをデバッグするときにエラーが現れることはありません!
私は理由があることができるものを見つけることができませんか?何がこの矛盾の原因は?任意のアイデア?
解決
あなたはあなたのコードが実行されるときに、ページが完全にロードされている特定のか?そうでない場合、DOMはあなたのコードを実行時にコントロールが含まれない場合があります。
あなたはwebBrowser1.DocumentCompletedイベントを追加して、DOMが完全に作成されていることを確認するために完了したイベントハンドラにコードを実行する必要があります。
私はまた、代わりにaxwebbrowserとMSHTMLののSystem.Windows.FormsからWebBrowserコントロールを使用することをお勧めします。あなたがあなた自身のウィンドウ内で、ブラウザをホストしている場合それはあります。私は特にイベントにフックに関連し、過去にMSHTMLでいくつかの問題を経験してきました。
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted)
.
.
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var doc = webBrowser1.Document;
var txtBox1 = doc.All["login"];
txtBox1.SetAttribute("value", "test_user_name");
}