在C#中,使用System.Windows.Forms.HtmlDocument类(或另一个允许DOM解析的类),是否可以等到网页完成对HTML的javascript操作之后再检索该HTML?某些站点通过javascript将innerhtml添加到页面中,但是当我解析HtmlDocument的HtmlElements时,这些更改不会显示。

一种可能性是在一秒钟后更新页面的HtmlDocument。有人知道怎么做这个吗?

最佳答案

有人通过发布我认为不正确的答案来解决了这个问题。因此,这是我要解决的想法。

不确定地,有可能接近找出页面是否已完成其AJAX内容。但是,它完全取决于特定页面的逻辑:某些页面是永久性的。

为此,可以首先处理DocumentCompleted事件,然后异步轮询WebBrowser.IsBusy属性并监视页面的当前HTML快照以进行更改,如下所示。

完整的样本可以是found here

// get the root element
var documentElement = this.webBrowser.Document.GetElementsByTagName("html")[0];

// poll the current HTML for changes asynchronosly
var html = documentElement.OuterHtml;
while (true)
{
    // wait asynchronously, this will throw if cancellation requested
    await Task.Delay(500, token);

    // continue polling if the WebBrowser is still busy
    if (this.webBrowser.IsBusy)
        continue;

    var htmlNow = documentElement.OuterHtml;
    if (html == htmlNow)
        break; // no changes detected, end the poll loop

    html = htmlNow;
}

关于c# - javascript操作后获取HtmlDocument,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7757106/

10-10 13:00