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 файла, но это была проблема немного в этой линииКак получить текст из StreamReader в C#

string data = htmlElement.InnerText; 

и я получить предупреждение от Визуальное студия 2010

NullReferenceExpection был необработанное
ссылка объект не указывает на экземпляр объекта.

Может ли кто-нибудь мне помочь? Спасибо :)

+1

Ошибка, которую вы получаете, указывает, что нет элемента с идентификатором 'name'. – Oded

+2

См. Ответ @ Smi и лучше использовать [Html Agility Pack] (http://htmlagilitypack.codeplex.com/) вместо управления WebBrowser. –

ответ

0

Скорее всего, метод не может найти элемент с идентификатором «имя» и, следовательно, переменная htmlElement имеет значение NULL. Убедитесь, что на веб-сайте, который вы пытаетесь извлечь, есть элемент с этим идентификатором.

2

Я считаю, что проблема здесь в том, что управление WebBrowser загружает документ асинхронно. Поэтому, когда вы пытаетесь получить доступ к webBrowser1.Document сразу же, все идет не так.

DocumentText свойство от MSDN:

Если установить значение этого свойства, а затем сразу же получить его снова, значение, извлеченное может отличаться от значения, установленного, если элемент управления WebBrowser не имел времени для загрузки новый контент. Вы можете получить новое значение в обработчике событий DocumentCompleted. Кроме того, вы можете заблокировать поток до тех пор, пока документ не будет загружен вызовом метода Thread.Sleep в цикле, пока свойство DocumentText не вернет значение, которое вы изначально установили.

См. Также DocumentCompleted событие.

 Смежные вопросы

  • Нет связанных вопросов^_^