1

私の要件 - 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";

入力フィールドが検索されるまで、私のコードは正常に動作します。問題は、私が上に投稿したコードのどこかにあります。HTMLDocument オブジェクトを取得し、「login」という名前の HTMLInputElement を探します。ここで、矛盾に直面していtxtbox1.SetAttributeます。しかし、これは常に起こるわけではありません。例外がスローされず、コードが正常に機能する場合があります。コードをデバッグしようとしましたが、コードをデバッグしてもエラーは表示されません!!txtbox1.valueNullReferenceException

原因がわかりません。この不一致の原因は何ですか? 何か案は?

4

1 に答える 1

2

コードの実行時にページが完全に読み込まれていることを確信していますか? そうでない場合、コードの実行時に DOM にコントロールが含まれていない可能性があります。

DOM が完全に作成されていることを確認するには、webBrowser1.DocumentCompleted イベントを追加してから、completed イベント ハンドラーでコードを実行する必要があります。

また、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");
}
于 2009-12-21T22:24:03.367 に答える