我在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