使用C#或VB.NET获取最终生成的HTML源代码

9
使用VB.net或C#,如何获取生成的HTML源代码?
要获取页面的HTML源代码,可以使用以下代码,但这不会获取生成的源代码,它不包含浏览器中通过JavaScript动态添加的任何HTML。如何获取最终生成的HTML源代码?
谢谢
WebRequest req = WebRequest.Create("http://www.asp.net"); 
WebResponse res = req.GetResponse(); 
StreamReader sr = new StreamReader(res.GetResponseStream()); 
string html = sr.ReadToEnd();

如果我尝试以下操作,则返回的文档不包含注入的JavaScript代码。
Public Class Form1

    Dim WB As WebBrowser = Nothing

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        WB = New WebBrowser()
        Me.Controls.Add(WB)
        AddHandler WB.DocumentCompleted, AddressOf WebBrowser1_DocumentCompleted


        WB.Navigate("mysite/Default.aspx")

    End Sub

    Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs)


        'Dim htmlcode As String = WebBrowser1.Document.Body.OuterHtml()
        Dim s As String = WB.DocumentText

    End Sub
End Class

HTML返回

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>

</head>
<body>
    <form id="form1" runat="server">
    <div id="center_text_panel">
    //test text  this text should be here
    </div>
    </form>
</body>
</html>

    <script type="text/javascript">

        document.getElementById("center_text_panel").innerText = "test text";


    </script>

1
使用WebBrowser控件。 - KF2
你有示例吗?你以前做过这个吗?因为我尝试过,但无法使其工作。 - Hello-World
你解决了这个问题吗,@Hello-World?我也遇到了同样的问题,尝试使用微软的新WebView2控件,但仍然没有解决! - Mike Hawk
3个回答

2
您可以使用 WebKit.NET
请参考官方教程:这里
除了获取源代码,还可以通过pageload事件处理javascript。
webKitBrowser1.Navigate(MyURL)

然后,处理DocumentCompleted事件,并执行以下操作:
private documentContent = webKitBrowser1.DocumentText

编辑 - 这可能是更好的开源WebKit选项:http://code.google.com/p/open-webkit-sharp/


+1,我认为“需要”在这里太强了 - 可以使用内置的WebBrowser甚至PhantomJS来完成相同的任务。 - Alexei Levenkov
1
Webkit 给我提供的是源 HTML,而不是最终生成的。 - Mohanad S. Hamed

1
只需在您的表单中放置一个webbrowser控件,然后输入以下代码即可:
 webBrowser1.Navigate("YourLink");

     private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
           string htmlcode= webBrowser1.Document.Body.InnerHtml;//Or Each Filed Or element..//WebBrowser.DocumentText
        }

编辑

如果您想获取由JavaScript代码动态生成的HTML代码,有两种方法:

  1. webBrowser1_DocumentCompleted事件之后运行以下代码
 StringBuilder htmlcode = new StringBuilder();
            foreach (HtmlElement item in webBrowser1.Document.All)
            {
                htmlcode.Append( item.InnerHtml);
            }
  1. 编写JavaScript代码以返回document.documentElement.innerHTML并使用InvokeScript函数返回结果:
   var htmlcode = webBrowser1.Document.InvokeScript("javascriptcode");

谢谢,那很好,但它返回的是源代码而不是生成的源代码。 - Hello-World
获取动态生成的代码,您必须使用额外的JavaScript代码。如果您添加更多有关想要执行的操作的详细信息,它将显示解决方案(或添加一些额外的代码)。 - KF2
嗨 - WebBrowser.DocumentText 需要返回注入了 JavaScript 的生成 HTML 代码。您认为这可能需要异步完成吗?感谢您的帮助。 - Hello-World
返回的字符串只是在 JavaScript 运行之前的 HTML。 - nguyenhoai890

0
你可以使用这段代码:
webBrowser1.Document.Body.OuterHtml

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接