【问题标题】:Get the final generated html source using c# or vb.net使用 c# 或 vb.net 获取最终生成的 html 源
【发布时间】:2013-01-28 15:37:33
【问题描述】:

使用 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>

【问题讨论】:

  • 使用WEB浏览器控件。
  • 你有例子吗?你之前有没有做过,我试过但无法让它工作?
  • 你有没有想过@Hello-World?我遇到了同样的问题并尝试使用 MS 的新 WebView2 控件,但仍然没有爱!

标签: c# vb.net


【解决方案1】:

你可以使用WebKit.NET

Look here官方教程

这样不仅可以抓取源码,还可以通过pageload事件处理javascript。

webKitBrowser1.Navigate(MyURL)

然后,处理 DocumentCompleted 事件,然后:

private documentContent = webKitBrowser1.DocumentText

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

【讨论】:

  • +1,我也觉得这里的“需要”太强了——内置的WebBrowser甚至PhantomJS都可以用来做同样的事情。
  • webkit 给我的是源 HTML,而不是最终生成的。
【解决方案2】:

只需将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
        }

已编辑

要获取由 java 脚本代码动态生成的 html 代码,您有两种方法:

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

【讨论】:

  • 谢谢,太好了,但它返回源而不是生成的源
  • 为了获得动态生成的代码,如果你添加更多你想做的事情的细节,你必须使用额外的 JavaScript 代码,它会显示解决方案(或添加一些额外的代码)
  • 嗨 - WebBrowser.DocumentText 需要返回生成的 html 代码,其中注入了 javascript。你认为这可能需要异步完成吗?感谢您的帮助。
  • @Hello-World 答案已编辑
  • 返回的字符串只是 javascript 运行前的 HTML。
【解决方案3】:

您可以使用此代码:

webBrowser1.Document.Body.OuterHtml

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多