2016-04-12 5 views
0

私はこのpageを使って次のコードを考え出しました。私の目的は、スクリプトがロードされた後、ウェブページの完全なHTMLを取得することです。このコードは、winformsアプリケーションではなくasp.net MVC Webサイトから実行されています。スクリプトが実行された後にウェブページから完全なHTMLを取得する

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); 
     } 
    } 
} 

上記は、すべてのスクリプトがビットマップ生成のために読み込まれたウェブサイトのビットマップを正常に作成します。しかし、私はビットマップを望んでいません - 私はHTMLが欲しいです。 HTMLをビットマップコードの上に置くという私の最近の試みを見ることができます。 HTMLには常にjavascriptが含まれており、ページの半分だけがHTMLとして返されます。

ここでどこが間違っているのか誰にでも見られますか?私は2日間このままで立ち往生しました!

+1

[this](http://stackoverflow.com/a/20934538)と[this](http://stackoverflow.com/a/21828265)を参照してください。 – Noseratio

答えて

0

この関数を使用して、ページのURLを渡してページのhtmlを取得します。

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

これはhtmlをつかむ前にスクリプトを実行しません。 '

関連する問題