台灣最大程式設計社群網站
線上人數
764
 
會員總數:241870
討論主題:187137
歡迎您免費加入會員
討論區列表 >> C# >> webbrowser跑完後再執行某個function(如何判斷網頁載入完成)
[ 變換順序 ]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
webbrowser跑完後再執行某個function(如何判斷網頁載入完成)
價值 : 50 QP  點閱數:11677 回應數:20

樓主

豌豆
門外漢
0 1
84 10
發送站內信

我的程式的一部份是寫 按下介面上的button模擬網頁上搜尋按鈕的click

但是,當他執行click的動作之後

網頁還尚未載入完成,我的程式就繼續執行下一行了

因為程式的下一個步驟是處理搜尋到的網頁的頁面上的資料

所以如果網頁還沒載入完成就無法繼續執行

想請問,要如何判斷它網頁已經載入完成,再繼續執行下去呢?

有用過Thread.Sleep();

也有設旗標在webBrowser1_ProgressChanged裡記錄progressBar1.Value是否等於100

但都沒成功...

搜尋相關Tags的文章: [ webbrowser ] , [ button ] , [ click ] ,
本篇文章發表於2009-07-11 11:03
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

sparkdeng
檢舉此回應
用ReadyState 判斷吧


本篇文章回覆於2009-07-11 15:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

sparkdeng
檢舉此回應

本篇文章回覆於2009-07-11 15:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

豌豆
檢舉此回應
還是不行耶...

本篇文章回覆於2009-07-12 09:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

豌豆
檢舉此回應
還是不行耶...

本篇文章回覆於2009-07-12 09:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

豌豆
檢舉此回應
上面的複製錯了


還是網頁尚未載入完成就繼續執行下面的function了
然後因為原始碼還沒完成(或是還是上一頁的原始碼,就無法在該原始碼中做處理)
本篇文章回覆於2009-07-12 09:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

gipi
檢舉此回應
這樣改吧,在您的Browser控制項的DocumentCompleted去做這個判斷,因為您上頭的寫法程式並沒有等待頁面載完,所以if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)應該永遠都是false。

本篇文章回覆於2009-07-12 13:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

sparkdeng
檢舉此回應
改成這樣吧

本篇文章回覆於2009-07-12 13:34
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

豌豆
檢舉此回應
我說明清楚一點我的程式好了
1.程式開啟時,先載入某搜尋頁面,載入完成後,在介面上的textbox輸入查詢之關鍵字,接著按下button
2.按下這個button會將介面上的textbox裡的文字傳到該網頁的搜尋文字方塊
3.並模擬該網頁上的搜尋按鈕,按下按鈕後進入搜尋到該關鍵字的頁面
4.接著處理搜尋到的頁面的原始碼
目前試過好多方法都不成功的部份是3.,因為當按下button後,該網頁尚未載入完成,程式就繼續執行下去了
之前有加入
DialogResult result;
result = MessageBox.Show("搜尋完成", "搜尋完成", MessageBoxButtons.OK, MessageBoxIcon.Information);
if (result == DialogResult.OK)
{
//要執行的function
}
它會一按下button就馬上跳出MessageBox,需要等progressBar跑完後再按下確定才不會出錯
不過,如果不要加MessageBox,則程式會跑得比網頁快,就是現在遇到的問題,曾經試過一開始提問時所說的方法,但都沒成功

如果像gipi版友所建議的寫法,是不是和progressBar1.Value==100一樣呢?
不過,我要執行的function不能放在這個判斷裡面耶,因為一開始程式執行時所載入的初始網頁,就會影響到這個function

謝謝以上各位這麼用心的回答,不過目前還是沒有合適的解答
本篇文章回覆於2009-07-12 18:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

豌豆
檢舉此回應
倒數第二句話有點沒說清楚
應該說 我要執行的function不能放在這個判斷裡面,因為一開始程式執行時所載入的初始網頁,就會影響到webBrowser1_ProgressChanged()

本篇文章回覆於2009-07-12 18:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

gipi
檢舉此回應
您有試過我#6的做法嗎?
本篇文章回覆於2009-07-12 18:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

豌豆
檢舉此回應
有試過

這樣寫,因為我的程式開啟時,就會先載入某搜尋頁面
這一個步驟就會跳到這個判斷裡,但還沒在介面中輸入要查詢的關鍵字等等
本篇文章回覆於2009-07-13 13:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

gipi
檢舉此回應
您在加上一個變數用來記錄是不是第一次載入,如果是第一次就不要執行您的動作,下面請參考。

本篇文章回覆於2009-07-14 00:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
回應

sparkdeng
檢舉此回應
#7不是符合你的功能嗎??
本篇文章回覆於2009-07-14 07:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
作者回應

豌豆
檢舉此回應
To sparkdeng:
我的webBrowser1.Navigate("http://........");是寫在public Form1()裡面
我也有嘗試過你建議的寫法,不過行不通耶

To gipi:
用你#12的方法有成功呢,不過它出現了另一個問題
找了很久還是不清楚為什麼
(我之前也有試過用一個bool的變數來記錄,判斷search_button是否click,不過沒成功)
本篇文章回覆於2009-07-14 16:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
回應

gipi
檢舉此回應
#14,是什麼樣的問題呢?
本篇文章回覆於2009-07-14 20:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   

回覆
如要回應,請先登入.