我在StackOverflow上看到了关于这个主题的几个线程,但是他们都没有提供答案。C#WPF - 等待页面加载
我有一个按钮,点击后会打开一个不可见的网页,导航到一个URL,输入信息到一个框中,按下一个按钮,然后刮擦屏幕上的信息。
基本上在点击中我的代码骨头:
WebBrowser wb = new WebBrowser;
wb.Visibility = System.Windows.Visibility.Hidden;
wb.Navigate("http://somepage.com");
这是它得到棘手。
我正在寻找一种方法,以确保该页面加载之前,试图进入数据或刮屏幕。我看到了几个线程,谈论Navigated
,IsLoaded
,LoadCompleted
以及BackgroundWork
的东西,但我不能得到任何这些工作。
哪一个是最好的选择来确定页面已完全加载?你将如何让选择的方法工作?
我也无法从屏幕获取数据,因为WPF不使用相同的GetElementByID
。
编辑:
每下面的评论,下面是我碰到的错误:
- 导航中第一个只要页面已经被导航也是一样,不一定等到所有对象被加载。这按预期工作,但不能用于我的目的。
IsLoaded
从未返回trueprivate void GetData_Click(object sender, RoutedEventArgs e) { int x=0; HTMLDocument doc; wb = new WebBrowser(); wb.Visibility = System.Windows.Visibility.Visible; wb.Navigate("somesite.com"); doc = wb.Document as mshtml.HTMLDocument; while(!wb.IsLoaded) { //Wait } doc.getElementById("txt_One").innerText = "It Worked"; }
把它放在一个无限循环的wb
没有以前任何时候都加载。
- 这与LoadCompleted版本
'System.Windows.Controls.WebBrowser.LoadCompleted' 的事件只能出现在的+ =或左手侧 - =
private void GetData_Click(object sender, RoutedEventArgs e)
{
int x=0;
HTMLDocument doc;
wb = new WebBrowser();
wb.Visibility = System.Windows.Visibility.Visible;
wb.Navigate("somesite.com");
doc = wb.Document as mshtml.HTMLDocument;
wb.LoadCompleted += wb_LoadCompleted;
doc.getElementById("txt_One").innerText = "It Worked";
}
void wb_LoadCompleted(object sender, NavigationEventArgs e)
{
}
产生错误
在{文件名}中发生未处理的“System.NullReferenceException”类型异常
附加信息:未将对象引用设置为对象的实例。
请详细说明“不能得到任何这些工作”。展示你的代码,更详细地描述每次尝试的问题。没有看到任何代码,我们不能告诉你为什么它不起作用。 – tnw
感谢您的编辑......但请**显示您的代码**。 – tnw