2008-11-27 30 views
1

這是問題:如何使用mshtml獲取框架的內容?

我在IE中有一個掛鉤,它對WebBrowser.OnNavigateComplete2事件作出反應,以解析文檔的內容以獲取一些精確的信息。

該文件包含框架,所以我看看HTMLDocument.frames。對於每一個,我看着document.body.outerHTML屬性來檢查內容。

問題是,我正在查找的字符串從未在那裏顯示,而它顯示在結局頁面中。那麼,我看錯了地方?如果在頁面完全加載時顯示它,那麼它在某個時間點被下載,對吧?但我應該看哪個物體?

順便說一句,我不知道這是否是重要的,但我正在尋找的頁面來自ASP.NET應用程序。

public void OnNavigateComplete2(object pDisp, ref object url) 
{ 
    document = (HTMLDocument)webBrowser.Document; 

    mshtml.FramesCollection frames = document.frames; 
    for (int i = 0; i < frames.length; i++) 
    { 
     object refIdx = i; 
     IHTMLWindow2 frame = (IHTMLWindow2)frames.item(ref refIdx); 
     string frameContent = frame.document.body.outerHTML; 
    } 
} 

感謝您的幫助。


@rams 此事件是推出了許多次,每次頁面,所以我想這是每一個框架被加載時,即使我沒有得到趕上一個我要找的。如果不是,那麼捕捉幀內容的事件是什麼?

我想要做的是在精確幀上檢測一些精確的信息,然後保存。後來,一個網頁被加載觸發某些用戶操作,我需要從解析框架獲得的信息。

回答

1

你知道你正在尋找內容的框架的名稱/編號嗎?如果是這樣,在你navigateComplete2事件,你能得到的幀的參考樣

iFrame frm = document.frames(<your frame id>); 

int readyState=0; 

while(frm.readystate !=4){ 
// do nothing. be careful to not create an endless loop 
} 

if(frm.readyState==4){ 
    // get your content now 
} 

HTH

+0

我看着這個,thx。 – Antoine 2008-12-05 14:29:08

0

你在使用某種螺紋嗎?在單獨的線程中運行瀏覽器確實會弄亂一些東西。嘗試在STAThread中執行它,並檢查是否得到正確的結果。

+0

我不使用任何線程,至少明確地。有沒有辦法在同一個線程中檢查這個/強制執行? – Antoine 2008-11-27 17:25:29

0

你的字符串沒有顯示的原因是由於框架。 Web瀏覽器控件在加載主文檔後觸發文檔導航完成事件。在這一點上,幀還沒有要求他們的來源。在Web瀏覽器控件解析文檔之後,對幀源的請求將被髮布並下載。

您能否描述一下您正在努力完成的任務?