javascript - WebBrowser. 使用 JavaScript 导航
问题描述
我在 System.Windows.Forms 中使用 WebBrowser 组件。该代码从网站加载内容并正确返回。在页面完全加载后,有一个 JavaScript 会执行并加载一些 DOM。
在 .Navigate 方法完成执行时,JavaScript 尚未完成加载。如果我在调试模式下在 .Navigate 上设置断点,显然因为 .Navigate 是异步的,它会运行整个加载页面的过程,包括脚本。
void LoadPageWithScripts() {
Browser.Navigate("mypagewithscriptsurl");
// whatever comes next prevents the DOM generated by the script from beeing loaded
// ... e.g.:
Console.WriteLine("whatever");
// use Browser.Document later
}
我知道,这个问题类似于此处提供的问题:JavaScript only works...
不幸的是,我对加载的页面没有影响,所以我在那里看到的方法不适合我的需要。
正如许多论坛所建议的那样,我试图简单地使用 Thread.Sleep。但即使这样也行不通。只要代码继续运行通过 .Navigate 方法,JavaScript 就会丢失。目前只有在其上设置断点才有效。
Browser.Navigate("pageUrl");
Browser.Navigate("pageurl");
// Very bad solution
Thread.Sleep(2000);
while (true)
{
if (Browser.ReadyState == WebBrowserReadyState.Complete)
{
// do something
break;
}
else
{
Application.DoEvents();
}
}
使用 DocumentCompleted 事件将不起作用,因为在文档处于完成状态之前未加载脚本。
Browser.Navigate("pageUrl");
Browser.DocumentCompleted += (o, e) =>
{
var text = Browser.DocumentText;
Console.WriteLine(text);
};
希望能找到一些帮助。
解决方案
推荐阅读
- c# - 如何在 3D 中两点之间的线上找到一些额外的点?
- django - 在 Django 中实现 DB Router 的最佳方法是什么?
- email - 使用魅力报告发送失败的测试用例详细信息的电子邮件
- jupyter-notebook - Jupyter notebook 无法启动内核
- vb.net - 列表视图中选中/未选中复选框的索引
- c - 是否有一个技巧来测试一个非特定位是否设置在 int 的任何地方?
- itext - 从 PDF 中提取标题和子标题
- mule - 如何在 mule dataweave 中通过更改 json 中的键名来删除先前映射的字段
- azure - 一个消费计划中的多个功能应用程序?
- python - 在 PyCharm/CLion 中运行脚本之前激活 conda env