2016-04-12 6 views
0

Ich habe diesen page verwendet, um den folgenden Code zu erstellen. Mein Ziel ist es, den vollständigen HTML-Code einer Webseite zu erhalten, nachdem alle Skripte geladen wurden. Dieser Code wird von einer asp.net MVC-Website ausgeführt - keine Winforms-App.Den vollständigen HTML-Code von einer Webseite abrufen, nachdem alle Skripts ausgeführt wurden

private void GetHtmlTest() 
{ 
    string url = "http://www.bicesteradvertiser.net/sport/13951060.Michael_Appleton_ready_to_make_decision_on_Jake_Wright_participation/"; 


    Thread thread = new Thread(delegate() 
    { 
     using (WebBrowser browser = new WebBrowser()) 
     { 
      browser.ScrollBarsEnabled = false; 
      browser.AllowNavigation = true; 
      browser.Navigate(url); 
      browser.Width = 1024; 
      browser.Height = 4768; 
      browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(Ggg_DocumentCompleted); 
      while (browser.ReadyState != WebBrowserReadyState.Complete) 
      { 
       System.Windows.Forms.Application.DoEvents(); 
      } 
     } 
    }); 
    thread.SetApartmentState(ApartmentState.STA); 
    thread.Start(); 
    thread.Join(); 


    string test = ""; 

} 

private void Ggg_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    WebBrowser webBrowser = (WebBrowser)sender; 
    if (webBrowser.ReadyState != WebBrowserReadyState.Complete) 
    { 
     return; 
    } 

    _html = webBrowser.Document.Body.OuterHtml; 
    _testHtmlDocument = webBrowser.Document; 
    _htmlElement = webBrowser.Document.GetElementsByTagName("html")[0]; 
    var ggg = webBrowser.Document.GetElementsByTagName("HTML")[0].OuterHtml; 

    WebBrowser browser = sender as WebBrowser; 
    using (Bitmap bitmap = new Bitmap(browser.Width, browser.Height)) 
    { 
     browser.DrawToBitmap(bitmap, new Rectangle(0, 0, browser.Width, browser.Height)); 
     using (MemoryStream stream = new MemoryStream()) 
     { 
      bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png); 
      byte[] bytes = stream.ToArray(); 

      File.WriteAllBytes("c:\\temp\\img.bmp",bytes); 
      //imgScreenShot.Visible = true; 
      //imgScreenShot.ImageUrl = "data:image/png;base64," + Convert.ToBase64String(bytes); 
     } 
    } 
} 

Die oben wird eine Bitmap der Website erfolgreich erstellen - alle Skripten für die Bitmap-Generation geladen. Ich möchte jedoch keine Bitmap - ich möchte das HTML. Sie können meine letzten Versuche sehen, den HTML-Code direkt über dem Bitmap-Code zu erhalten. Das HTML enthält immer etwas Javascript, nur die Hälfte der Seite wird als HTML zurückgegeben.

Kann jemand sehen, wo ich hier falsch liege? Ich stecke jetzt seit 2 Tagen fest!

+1

Überprüfen Sie [diese] (http://stackoverflow.com/a/20934538) und [diese] (http://stackoverflow.com/a/21828265). – Noseratio

Antwort

0

Verwenden Sie diese Funktion, um den HTML-Code der Seite abzurufen, indem Sie die URL der Seite übergeben.

public string readPage(string url) 
{ 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
    request.UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"; 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    string data = string.Empty; 

    if (response.StatusCode == HttpStatusCode.OK) 
    { 
     Stream receiveStream = response.GetResponseStream(); 
     StreamReader readStream = null; 

     if (response.CharacterSet == null) 
     { 
      readStream = new StreamReader(receiveStream); 
     } 
     else 
     { 
      readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet)); 
     } 

     data = readStream.ReadToEnd(); 
     response.Close(); 
     readStream.Close(); 
    } 
    return data; 
} 
+0

Dies führt keines der Skripts vor dem Ergreifen des HTML. Sie enden mit dieser Art von Sache: '

Verwandte Themen