我正在尝试掌握WebBrowser
控件,以便在我正在构建的数据提取应用程序中使用。
此处的一个要求是能够记录用户操作并进行回放。虽然我取得了一些成功,但我对是否以正确的方式解决这个问题感到困惑。
网上似乎有以非常不同的方式使用控件的代码示例。更不用说有 WinForms 实现, WPF 实现和 Silverlight 实现。
有人可以确认:
到目前为止,我的调查结果是否正确,WPF版本的控件与WinForms版本的功能不同 - 并且在对某些事件做出反应方面有些限制?
为什么有人会在使用控件时选择使用基于mshtml
的类,至少在WinForms中,在Windows窗体类中存在执行相同任务的等效方法?
Winforms Click Event Handle
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
foreach (HtmlElement ele in uc_webBrowser.Document.All)
{
HtmlElementEventHandler eventhandler = new HtmlElementEventHandler(documentClickHandler);
if (ele.TagName.ToLower() == "a" || ele.TagName.ToLower() == "input" || ele.TagName.ToLower() == "select" || ele.TagName.ToLower() == "img")
{
ele.Click -= eventhandler;
ele.Click += eventhandler;
}
}
}
点击使用mshtml
类的事件句柄
void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
// Add doc null check otherwise the event handlers are assigned multiple times
// http://stackoverflow.com/questions/5400020/how-come-htmldocumentevent-onclick-fires-up-multiple-times
if (doc == null)
{
var eventHdlr = new mshtml.HTMLDocumentEvents2_onclickEventHandler(ClickEventHandler);
doc = (mshtml.HTMLDocument)webBrowser1.Document.DomDocument;
mshtml.HTMLDocumentEvents2_Event iEvent = (mshtml.HTMLDocumentEvents2_Event)doc;
iEvent.onclick -= eventHdlr;
iEvent.onclick += eventHdlr;
//iEvent.oncellchange += new HTMLDocumentEvents2_oncellchangeEventHandler(iEvent_oncellchange);
//iEvent.oncontrolselect += new HTMLDocumentEvents2_oncontrolselectEventHandler(iEvent_oncontrolselect);
//iEvent.onselectionchange += new HTMLDocumentEvents2_onselectionchangeEventHandler(iEvent_onselectionchange);
}
}
答案 0 :(得分:1)
多年前,我使用WinForms的WebBrowser实现了一个有点复杂的WYSIWYG编辑器,当时浏览器是IE 7(有那个或Firefox 1或2,我不记得了)。如果您继续在浏览器中加载页面,您将看到MSHTML PIA是痛苦可以使用。
IE 7的浏览器组件的行为并非100%确定(希望IE 9可能已经改变,但更糟糕的是,您可能不得不处理不同版本的Microsoft浏览器)。然而,精心设计的OO层首先会为您的生产力创造奇迹。
我将尝试回答您对使用网络浏览器的疑虑:
根据以下链接,在WPF的WebBrowser中,您将获得与JavaScript相同的功能。由于之前已经在浏览器中完成了宏,因此您肯定会有足够的事件来执行您想要的操作。
What functional differences exist between WPF and WinForms WebBrowser control?
如果您觉得不需要WebBrowser控件,请尽可能从中运行。桌面GUI中的浏览器可以提供很多帮助,但需要付出代价。
但是,如果你想使用它,你可能想尝试不同的浏览器。例如,MonoDevelop的ASP.NET设计人员是在不久之前使用 Mozilla Composer (Gecko引擎)开发的,之前WebForms非常不受欢迎,有一个项目要从头开始使用 WebKit 引擎。
答案 1 :(得分:0)
我已经写过一些关于WebBrowser的文章了。你可以试试这个: http://www.dotnetfunda.com/articles/article840-working-with-webbrowser-in-wpf-.aspx
由于