我正在使用Awesomium 1.7.0.5来加载页面,填充一些文本框并单击按钮。我正在尝试使用此主题中的示例填充文本框:http://answers.awesomium.com/questions/857/webcontrol-type-in-webbrowser.html
这是我的代码(我正在使用WPF控件):
private void WbAwsOnDocumentReady(object sender, UrlEventArgs urlEventArgs)
{
if (wbAws == null || !wbAws.IsLive)
return;
//Thread.Sleep(555);
dynamic document = (JSObject)wbAws.ExecuteJavascriptWithResult("document");
if (document == null)
return;
using (document)
{
dynamic textbox = document.getElementById("email");
if (textbox == null)
return;
using (textbox)
{
textbox.value = "gaaffa";
}
}
}
它只能使用Thread.Sleep 0.1-0.5秒。否则,文档为空(非空)和/或文本框为空。 我该怎么办?为什么它没有在DocumentReadyEvent中准备好?
答案 0 :(得分:5)
以下是我解决它的方法:
WbAws.LoadingFrameCompleted += OnLoadingFrameCompleted;
WbAws.Source = new Uri("http://google.com");
private void OnLoadingFrameCompleted(...)
{
if (webView == null || !webView.IsLive ||
webView.ParentView != null || !e.IsMainFrame)
return;
LoadingFrameCompleted -= OnLoadingFrameCompleted;
// do something
}
LoadingFrameCompleted而不是DocumentReady,因为它不仅在我需要它时触发,而且在应用程序启动时触发我在导航之前订阅它并在之后取消订阅。还要检查它是IsMainFrame。
编辑:但是使用此解决方案,它有时会抛出文档尚未就绪的异常。所以我也在使用Thread.Sleep等待它。
答案 1 :(得分:0)
很老的问题。但对于像我这样的人来说,面对这个问题 -
使用LoadingFrameCompleted
和WebControl.IsNavigating == false
条件的e.IsMainFrame == true
事件。
如果在这个事件中这些条件成立,则页面加载完毕,您就可以获得HTML内容了。