我需要在AJB函数更新后获取webBrowser的更新html
例如,我导航到“page1.asp”,但“page1.asp”包含一个从另一个页面加载内容的iframe。它还有一个jQoery函数,在xx秒后显示一个Submit按钮。
我的问题是如何从webBrowser获取最新的HTML?
我尝试过更新,但没有运气,
webBrowser.Update();
答案 0 :(得分:1)
这是一个有点棘手的问题,您需要正确遵循以下准则才能实现目标。
在timer_tick事件中编写此代码:
if(browser.ReadyState == WebBrowserReadyState.Complete)
一旦找到就绪状态已完成,那么您将查找在完成ajax请求后您认为将更新的html元素。
您可以这样检查任何元素:
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.
}
答案 1 :(得分:0)
使用WebBrowser.DocumentText()
。
此属性包含当前文档的文本,即使已请求其他文档也是如此。如果设置此属性的值,然后立即再次检索它,则检索到的值可能与WebBrowser控件没有时间加载新内容时设置的值不同。您可以在DocumentCompleted事件处理程序中检索新值。或者,您可以通过在循环中调用Thread.Sleep方法来阻止线程直到加载文档,直到DocumentText属性返回您最初设置它的值。
尝试在DocumentCompleted()事件处理程序中运行调用DocumentText()。如果你不能这样做,因为iFrame不会抛出这个事件,只需设置一个计时器并每隔几秒检索一次文本。