gpt4 book ai didi

c# - 将当前 WebBrowser DOM 获取为 HTML

转载 作者:太空狗 更新时间:2023-10-30 01:05:24 25 4
gpt4 key购买 nike

我想在 WebBrowser 上使用 HTML 功能包,它已经加载了我需要的所有东西(它单击一个带有代码的按钮来加载 channel 上的每个视频)(它加载一个 YouTube channel ,然后加载该 channel 上的所有视频。)现在,如果我尝试获取所有视频的详细信息(我有一个工作代码可以将 channel 的前 30 个视频放入 ListView 中),它仍将仅显示前 30 个,但我已将所有视频加载到 WebBrowser 页面上(它显示所有视频)我正在使用它来获取当前从 WebBrowser 加载的内容

enter image description here

但它仍然只加载前 30 个视频,而不是从 WebBrowser 加载的所有视频。

最佳答案

如果目标网站大量使用 AJAX(如 Youtube),则很难甚至不可能确定页面何时完成加载并执行所有动态脚本。但是您可以通过处理 window.onload 事件并为非确定性 AJAX 调用允许额外的一两秒来接近。然后通过 dynamic 调用 webBrowser.Document.DomDocument.documentElement.outerHTML 以获取当前呈现的 HTML。

例子:

private void Form1_Load(object sender, EventArgs e)
{
DownloadAsync("http://www.example.com").ContinueWith(
(task) => MessageBox.Show(task.Result),
TaskScheduler.FromCurrentSynchronizationContext());
}

async Task<string> DownloadAsync(string url)
{
TaskCompletionSource<bool> onloadTcs = new TaskCompletionSource<bool>();
WebBrowserDocumentCompletedEventHandler handler = null;

handler = delegate
{
this.webBrowser.DocumentCompleted -= handler;

// attach to subscribe to DOM onload event
this.webBrowser.Document.Window.AttachEventHandler("onload", delegate
{
// each navigation has its own TaskCompletionSource
if (onloadTcs.Task.IsCompleted)
return; // this should not be happening
// signal the completion of the page loading
onloadTcs.SetResult(true);
});
};

// register DocumentCompleted handler
this.webBrowser.DocumentCompleted += handler;

// Navigate to url
this.webBrowser.Navigate(url);

// continue upon onload
await onloadTcs.Task;

// artificial delay for AJAX
await Task.Delay(1000);

// the document has been fully loaded, can access DOM here
return ((dynamic)this.webBrowser.Document.DomDocument).documentElement.outerHTML;
}

[已编辑]这是帮助解决 OP 问题的最后一段代码:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(((dynamic)this.webBrowser1.Document.DomDocument).documentElement.ou‌​terHTML);

关于c# - 将当前 WebBrowser DOM 获取为 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18808990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com