2

我正在尝试使用 webbrowser 制作一个 C# windows 窗体应用程序。

我正在使用 webkit 浏览器: 链接到浏览器

网络浏览器我是否放入了一个类文件,所以我可以通过我将要使用的所有表单来访问它。

生成网络浏览器的代码:

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 事件中的断点,也不会被触发。所以看起来事件监听器不起作用......

那么为什么它不起作用呢?

4

2 回答 2

2

您可以简单地在 Web 浏览器上的 Document Completed Event 上创建一个事件侦听器,或者您可以像这样动态创建它:

globalVars.mainbrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(mainbrowser_DocumentCompleted);

void 的名称在哪里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";
    }
}
于 2013-01-07T18:05:49.410 回答
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
        )
    );
}
于 2016-06-08T15:01:07.250 回答