2012-06-24 2 views
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 요소 내부의 텍스트를 읽을 수 있지만,이 줄C#으로 위해 StreamReader에서 텍스트를 얻는 방법

string data = htmlElement.InnerText; 

에 문제가 좀 있었죠 내가 시각에서 몇 가지 경고가 스튜디오 2010

NullReferenceExpection는 처리되지 않은 개체의 인스턴스로 설정되지 않았습니다
개체 참조했다.

아무도 도와 줄 수 없습니까? 고맙습니다 :)

+1

발생하는 오류는 ID가 'name'인 요소가 없음을 나타냅니다. – Oded

+2

@ Smi의 답변을보고 WebBrowser 컨트롤 대신 [Html Agility Pack] (http://htmlagilitypack.codeplex.com/)을 사용하십시오. –

답변

0

대개이 메서드는 ID가 "name"인 요소를 찾을 수 없으므로 변수 htmlElement가 null입니다. 가져 오기를 시도하는 웹 사이트에 해당 ID가있는 요소가 있는지 확인하십시오.

2

WebBrowser 컨트롤이 비동기로 문서를로드 할 수 있다고 생각합니다. 따라서 즉시 webBrowser1.Document에 액세스하려고하면 문제가 발생합니다.

MSDN에서 DocumentText 특성 :이 속성의 값을 설정 한 다음 즉시 다시 검색 할 경우

는, 검색 값이 WebBrowser 컨트롤을로드 할 시간이되지 않은 경우 설정 값과 다를 수 있습니다 새로운 내용 DocumentCompleted 이벤트 처리기에서 새 값을 검색 할 수 있습니다. 또는 DocumentText 속성이 원래 설정 한 값을 반환 할 때까지 루프에서 Thread.Sleep 메서드를 호출하여 문서가로드 될 때까지 스레드를 차단할 수 있습니다.

또한 DocumentCompleted 이벤트를 참조하십시오.