我有一个ASP.NET页和一些自定义类,这些类可获取指定的网页,并返回此页面主体。
protected String GetHtml() { Thread thread = new Thread(new ThreadStart(GetHtmlWorker)); thread.SetApartmentState(ApartmentState.STA); thread.Start(); thread.Join(); return docHtml; } protected void GetHtmlWorker() { using (WebBrowser browser = new WebBrowser()) { browser.ScriptErrorsSuppressed = true; browser.Navigate(_url); // Wait for control to load page while (browser.ReadyState != WebBrowserReadyState.Complete) Application.DoEvents(); docHtml = browser.DocumentText; }
但是我需要的-它是DOM html而不是源代码,因为我通过jQuery在DOM上做了一些额外的操作。
这是我发现在运行javascript之后进入呈现的HTML(DOM)的一种解决方案:
将一个名为webBrowser1的WebBrowser控件放在Form1类的Form上。
[Form1.cs [设计]]
然后用于代码使用:
[Form1.cs]
using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace WebBrowserTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); this.webBrowser1.ObjectForScripting = new MyScript(); } private void Form1_Load(object sender, EventArgs e) { webBrowser1.Navigate("http://localhost:6489/Default.aspx"); } private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { webBrowser1.Navigate("javascript: window.external.CallServerSideCode();"); } [ComVisible(true)] public class MyScript { public void CallServerSideCode() { var doc = ((Form1)Application.OpenForms[0]).webBrowser1.Document; } } } }
将Form1_Load中的webBrowser1.Navigate(“ http:// localhost:6489 / Default.aspx ”)参数更改为您希望获取javascript处理后的DOM页面。
您可以在CallServerSideCode()方法中访问修改后的DOM,例如:
doc.GetElementById("myDataTable");
或者,您可以像这样访问呈现的HTML:
var renderedHtml = doc.GetElementsByTagName("HTML")[0].OuterHtml;