2012-07-22 76 views
2

我使用WebBrowser.Document.DomDocument,發現它有不同的DOM模型,我可以在IE調試工具中看到。爲什麼WebBrowser.Document.DomDocument不包含實際的DOM模型?

IE調試工具包含有效的實際DOM模型,而WebBrowser.Document.DomDocument不包含通過JavaScript動態添加的一些元素。

其實WebBrowser控件顯示所有元素,即使是動態添加的元素,但WebBrowser.Document.DomDocument包含過時的DOM模型。

IE調試工具可以顯示當前狀態下的實際修改DOM模型,如何使用WebBrowser組件獲取當前DOM模型?

這絕對應該是一種方法。

回答

1

這個問題可以使用更好的文檔。但這是一個非常經典的問題,這是一個計時問題。毫無疑問,你可以在瀏覽器的DocumentCompleted事件中訪問DomDocument屬性太早。這大致是javascript代碼開始執行的時間。因此,您將在腳本進行更改之前獲取DOM的版本。

有沒有體面的方式來處理這個問題。 Javascript的執行完全是異步的,沒有任何事件可以表明任何腳本代碼已經啓動或停止運行。你可以做的唯一體面的事情是「等一會兒」,用一個計時器。最好反覆進行,直到您看到DOM中的一個好跡象表明腳本已完成更改。

+0

是的,這是正確的答案。我仍在尋找如何更好地等待並檢查Ajax添加的所需元素何時出現。對於沒有我用 'ThreadPool.QueueUserWorkItem(新WaitCallback(O => { 了Thread.Sleep(2000); webBrowser1.Invoke(新的行動(()=> { //做一些事情 }) ); }));' – Zelid 2012-07-23 06:41:32

相關問題