c# WebBrowser- 我如何等待 javascript 完成在文档加载完成时运行的运行?

标签 c# javascript .net webbrowser-control

我正在从事一个项目,该项目涉及从 vendor 的网站上抓取一些产品数据(在他们的祝福下,但没有他们的帮助)。我在 C# 商店工作,所以我使用的是 .NET Windows 窗体 WebBrowser 控件。

我正在响应文档完成事件,但我发现我必须让线程休眠一会儿,否则数据不会显示在 DOM 中我期望的位置。

在查看页面上的 javascript 时,我可以看到它在页面加载完成后动态更改现有的 DOM 内容(设置 someDomElement.innerHTML)。它没有进行任何 ajax 调用,它使用的是原始页面加载中已有的数据。 (我可以尝试解析该数据,但它嵌入在 javascript 中并且有点混淆。)所以显然我在 javascript 完成运行之前以某种方式获取文档完成事件。

最终可能会有很多页面需要抓取,所以等待半秒或其他任何时间都远不理想。在我检查页面之前,我只想等到所有在文档就绪/页面加载时启动的 JavaScript 都完成运行。有谁知道这样做的方法吗?

我想 document completed 事件应该在那之前触发,对吧?但看起来确实如此。也许页面 javascript 在某处使用了 setTimeout。有没有办法判断是否有任何超时未决?

感谢您的帮助!

最佳答案

你可以

  1. 假设数据的解析永远不变,看看 Javascript 如何处理数据,并在您的一端执行相同的操作以在页面加载时立即检索数据
  2. 将 javascript 注入(inject)网页并检测 DOM 修改以了解何时从 C# 获取数据
  3. 使用 PhantomJS 编写纯 javascript 解决方案

关于c# WebBrowser- 我如何等待 javascript 完成在文档加载完成时运行的运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20693266/

相关文章:

c# - CAPICOM 与 P/Invoke

.net - 简单的 T4 模板在 Visual Studio 2010 中不起作用,但在 MonoDevelop 中起作用吗?

c# - C#6 中的长字符串插值行

c# - ASP.NET MVC3 调试 Application_Start

javascript - AJAX 请求 - 获取成功请求的 HTTP 代码/响应 header

javascript - 与 Vite 捆绑的 React 应用程序中的 Socket.IO 不起作用(与 Webpack 捆绑时会起作用)

c# - 使用 C# 从 Outlook 中检索特定于用户的任务

c# - 强制对所有成员进行 xml 注释

javascript - 无法使用 Mongoose 从对象数组中删除元素

c# - 如何使用 GUI 在 Visual Studio 项目中添加和编译 Windows 窗体,而不是直接从 Visual Studio?