我正在尝试使用webbrowser创建一个C#windows窗体应用程序。
我正在使用webkit浏览器:Link to the browser
webbrowser我输入了一个类文件,所以我可以通过我将使用的所有表单访问它。
生成webbrowser的代码:
public static WebKit.WebKitBrowser mainBrowser = new WebKitBrowser();
我正在使用这段代码来解决一些问题:
globalVars.mainBrowser.Navigate("http://www.somesite.com/");
while (globalVars.mainBrowser.IsBusy)
{
System.Threading.Thread.Sleep(500);
}
globalVars.mainBrowser.Document.GetElementById("user").TextContent = "User Name";
但它不起作用。如果我在一段时间后做了一个消息框,它会在可以呈现页面之前显示...
那么等待网站完全加载的最佳方式是什么?
更新1
在一个独立的类文件中,我是这样制作webkit控件:
public static WebKit.WebKitBrowser mainBrowser = new WebKitBrowser();
在表格中,我现在有了这段代码(感谢Tearsdontfalls):
public void loginthen()
{
globalVars.mainBrowser.DocumentCompleted += mainBrowser_DocumentCompleted;
globalVars.mainBrowser.Navigate("http://www.somesite.com/");
}
void mainBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var send = sender as WebKit.WebKitBrowser;
if (send.Url == e.Url)
{
MessageBox.Show("Inloggen");
globalVars.mainBrowser.Document.GetElementById("user").TextContent = "User Name";
}
}
但是没有消息框出现。但是,如果我使用本地(在相同的表单上)webkit浏览器,我将获得消息框。但是后来没有填写用户字段。
即使是documentCompleted事件中的断点,也不会触发。所以看起来事件列表器不起作用......
那么为什么它不起作用?
答案 0 :(得分:2)
您可以在Webbrowser上的Document Completed Event上创建一个事件监听器,也可以像这样动态创建它:
globalVars.mainbrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(mainbrowser_DocumentCompleted);
mainbrowser_DocumentCompleted
是你可以这样做的空的名字(我使用了你提供的代码的名字):
void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
var send = sender as WebKit.WebKitBrowser;
if (send.Url == e.Url) {
globalVars.mainBrowser.Document.GetElementById("user").TextContent = "User Name";
}
}
答案 1 :(得分:0)
添加以下代码可让浏览器处于隐身模式时触发事件。
using (Bitmap bmp = new Bitmap(webKitBrowser.Width, webKitBrowser.Height))
{
webKitBrowser.DrawToBitmap(
bmp,
new Rectangle(
webKitBrowser.Location.X,
webKitBrowser.Location.Y,
webKitBrowser.Width,
webKitBrowser.Height
)
);
}