後,我需要得到web瀏覽器的更新HTML它被用AJAX功能更新web瀏覽器的HTML阿賈克斯
例如更新後,我瀏覽到「Page1.asp的」,但「Page1.asp的」包括一個iframe從另一個頁面加載內容。它還有一個jQoery功能,在xx秒後顯示一個提交按鈕。
我的問題是如何從webBrowser獲取最新的html?
我嘗試更新,但沒有運氣,
webBrowser.Update();
後,我需要得到web瀏覽器的更新HTML它被用AJAX功能更新web瀏覽器的HTML阿賈克斯
例如更新後,我瀏覽到「Page1.asp的」,但「Page1.asp的」包括一個iframe從另一個頁面加載內容。它還有一個jQoery功能,在xx秒後顯示一個提交按鈕。
我的問題是如何從webBrowser獲取最新的html?
我嘗試更新,但沒有運氣,
webBrowser.Update();
使用WebBrowser.DocumentText()
。
此屬性包含當前文檔的文本,即使另一個文件已請求。如果您設置此屬性的值,然後立即再次檢索它,則檢索到的值可能與WebBrowser控件沒有時間加載新內容的值集不同。您可以在DocumentCompleted事件處理程序中檢索新值。或者,您可以通過在循環中調用Thread.Sleep方法來阻止該線程,直到DocumentText屬性返回最初設置爲的值。
嘗試在DocumentCompleted()事件處理函數內運行調用DocumentText()。如果你不能這樣做,因爲iFrame不會拋出這個事件,只需設置一個計時器並每隔幾秒就檢索一次文本。
好吧,它有點棘手的問題,你需要按照以下準則正確地實現你的目標。
寫這段代碼在timer_tick事件:
如果(browser.ReadyState == WebBrowserReadyState.Complete)
一旦你找到了,然後完成了準備狀態您要查找的HTML元素,你認爲會在完成ajax請求後更新。
你可以做到這一點的方法來檢查任何元素:
HtmlElementCollection forms = browser.Document.GetElementsByTagName("form");
HtmlElement form = null;
foreach (HtmlElement el in forms)
{
string name = el.GetAttribute("name");
if (name == "DATA")
{
form = el;
break;
}
}
4)一旦你得到了你的元素你可能對你的工作開展。
更新:這裏是計時器滴答代碼,你可以按照你的需要擴展 確保您已設置您的Timer1.Inverval = 100
(100毫秒)
private void Timer1_Tick(sender, args)
{
Application.DoEvents();
// make sure your are pulling right element id
HtmlElement cTag = webBrowser.Document.GetElementById("myelement");
if(cTag != null) // if elemnt is found than its fine.
{
cTag.SetAttribute("value", "Eugene");
Timer1.Enabled = false;
}
else
{
// dont worry, the ajax request is still in progress... just wait on it and move on for the next tick.
}
Application.DoEvents(); // you can call it at the end too.
}
,但這並沒有解決框架問題? documentText仍未填充? – EGN 2013-03-09 05:06:12
不可能!您必須啓用計時器,並且在執行ajax瀏覽器仍然繁忙時查找瀏覽器狀態爲「完成」。您需要在計時器滴答聲內調用App.DoEvents()函數,以便獲得最新的Web瀏覽器聲明。多德。我寫了很多很多的刮板,我知道它的工作原理。 – KMX 2013-03-11 17:23:33
讓我告訴你一件事,documentText永遠不會給你寫最近的內容。您必須手動查找元素,然後選擇其html,然後圍繞它完成工作。 – KMX 2013-03-11 17:24:41