2009-10-31 1 views
0

Я пытаюсь получить данные из веб-страницы с помощью C#Извлечение веб-документ с помощью C#

До сих пор это мой код:

WebBrowser wb = new WebBrowser(); 

wb.Url = new Uri("http://www.microsoft.com"); 
HtmlDocument doc = wb.Document; 

MessageBox.Show(doc.ToString()); 

К сожалению термометру остается пустой и свойство Url никогда не будет установлен ,

Может ли кто-нибудь мне помочь?

Благодаря

ответ

0

я думаю, что вы забываете, чтобы начать навигацию к странице. См here

а ...

навигации является процесс асинхронной. Вы должны поместить объект веб-браузер в области видимости класса, а затем обращаться с навигацией событие так:

private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e) 
    { 
     HtmlDocument doc = webBrowser1.Document; 
     doc = webBrowser1.Document; 
    } 

Вы увидите, что документ будет не нулевым в обработчике.

+0

NOP e:/i добавил, что перед частью wb.Url и до сих пор нет прогресса:/ – Lilz

+0

Я добавил дополнительную информацию. Я использовал его в своем локальном тестовом prj. Это решит вашу проблему. –

-1

Оцените объект DocumentText объекта HtmlDocument, а не позвоните ToString().

5

Я бы использовал класс WebClient вместо веб-браузера. Класс веб-браузера больше подходит для взаимодействия с пользовательским интерфейсом, в то время как WebClient более ориентирован на программное взаимодействие со страницей. Вот несколько примеров кода:

private void sendMessage(JaxtrSmsMessage message) 
{ 
    HttpWebRequest request; 
    HttpWebResponse response; 
    CookieContainer cookies; 
    string url = "http://www.jaxtr.com/user/login.jsp"; 

    try 
    { 
     request = (HttpWebRequest)WebRequest.Create(url); 
     request.AllowAutoRedirect = true; 
     request.CookieContainer = new CookieContainer(); 
     response = (HttpWebResponse)request.GetResponse(); 
     if (response.StatusCode == HttpStatusCode.OK) 
     { 
      StringBuilder sb = new StringBuilder(); 
      StreamReader reader = new StreamReader(response.GetResponseStream()); 
      while (!reader.EndOfStream) 
      { 
       sb.AppendLine(reader.ReadLine()); 
      } 

      //Get the hidden value out of the form.     
      String fp = Regex.Match(sb.ToString(), "\"__fp\"\\svalue=\"(([A-Za-z0-9+/=]){4}){1,19}\"", RegexOptions.None).Value; 
      fp = fp.Substring(14); 
      fp = fp.Replace("\"", String.Empty); 


      cookies = request.CookieContainer; 
      //response.Close(); 
      String requestString = "http://www.jaxtr.com/user/Login.action?tzOffset=6&navigateURL=&refPage=&jaxtrId=" + HttpUtility.UrlEncode(credentials.Username) + "&password=" + HttpUtility.UrlEncode(credentials.Password) + "&Login=Login&_sourcePage=%2Flogin.jsp&__fp="+HttpUtility.UrlEncode(fp); 
      request = (HttpWebRequest)WebRequest.Create(requestString); 
      request.CookieContainer = cookies; //added by myself 

      response = (HttpWebResponse)request.GetResponse(); 
      Console.WriteLine("Response from login:" + response.StatusCode); 

      String messageText = (message.TruncateMessage && message.MessageText.Length > JaxtrSmsMessage.MAX_MESSAGE_LENGTH ? message.MessageText.Substring(JaxtrSmsMessage.MAX_MESSAGE_LENGTH) : message.MessageText); 

      String messageURL = "http://www.jaxtr.com/user/sendsms?CountryName=" + HttpUtility.UrlEncode(message.CountryName) + "&phone=" + HttpUtility.UrlEncode(message.DestinationPhoneNumber) + "&message=" + HttpUtility.UrlEncode(messageText) + "&bySMS=" + HttpUtility.UrlEncode(message.BySMS.ToString().ToLower()); 

      request = (HttpWebRequest)WebRequest.Create(messageURL); 
      request.CookieContainer = cookies; 
      response = (HttpWebResponse)request.GetResponse(); 

      Console.WriteLine("Response from send SMS command=" + response.StatusCode); 

      StringBuilder output = new StringBuilder(); 

      using (Stream s = response.GetResponseStream()) 
      { 
       StreamReader sr = new StreamReader(s); 
       while (!sr.EndOfStream) 
       { 
        output.AppendLine(sr.ReadLine()); 
       } 
      } 
      response.Close(); 
     } 
     else 
     { 
      Console.WriteLine("Client was unable to connect!"); 
     } 
    } 
    catch (System.Exception e) 
    { 
     throw new SMSDeliveryException("Unable to deliver SMS message because "+e.Message, e); 
    } 
} 
1

Во-первых, вы должны вызвать метод Navigate с URL-путь, и вы должны зажать документа полного события из-под контроля

webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser_DocumentCompleted); 
webBrowser.Navigate("http:\\www.microsoft.com"); 

веб-браузера, а затем использовать документ полностью событие получить загруженную веб-страничного документ

void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    {    
      MessageBox.Show(webBrowser.DocumentText.ToString()); 
    } 

Надеется, что это помогает ...

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

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