2
private void button1_Click(object sender, EventArgs e)
{
    string url = urlTextBox.Text;
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    StreamReader sr = new StreamReader(response.GetResponseStream());
    richTextBox1.Text = sr.ReadToEnd();
    webBrowser1.DocumentText = richTextBox1.Text;
    HtmlElement htmlElement = webBrowser1.Document.GetElementById("name");
    string data = htmlElement.InnerText;
    label1.Text = data;
    sr.Close();
}

phpファイルのid要素内のテキストを読みたいのですが、この行で少し問題がありました

string data = htmlElement.InnerText;

VisualStudio2010から警告が表示されます

NullReferenceExpectionは
、オブジェクトのインスタンスに設定されていない未処理のオブジェクト参照でした。

誰か助けてくれませんか?ありがとうございました :)

4

2 に答える 2

2

ここでの問題は、コントロールがドキュメントを非同期WebBrowser的にロードすることにあると思います。そのため、直後にアクセスしようとすると、問題が発生します。webBrowser1.Document

DocumentTextMSDNのプロパティ:

このプロパティの値を設定してすぐに再度取得すると、WebBrowser コントロールが新しいコンテンツを読み込む時間がない場合、取得される値は設定された値とは異なる場合があります。DocumentCompleted イベント ハンドラーで新しい値を取得できます。または、DocumentText プロパティが最初に設定した値を返すまでループ内で Thread.Sleep メソッドを呼び出して、ドキュメントが読み込まれるまでスレッドをブロックすることもできます。

DocumentCompletedイベントも参照してください。

于 2012-06-24T17:30:58.920 に答える
0

ほとんどの場合、メソッドは ID "name" を持つ要素を見つけることができないため、変数 htmlElement は null です。取得しようとしている Web サイトに、その ID を持つ要素があるかどうかを確認してください。

于 2012-06-24T17:28:04.790 に答える