C# WebBrowser Control.NET-什么';与此控件交互的预期方式是什么?

C# WebBrowser Control.NET-什么';与此控件交互的预期方式是什么?,c#,.net,winforms,webbrowser-control,C#,.net,Winforms,Webbrowser Control,我正在尝试掌握WebBrowser控件,以便在我正在构建的数据提取应用程序中使用 这里的要求之一是能够记录用户操作并回放它们。虽然我取得了一点成功,但我对我是否以正确的方式进行这件事感到困惑 web上似乎有一些代码示例以非常不同的方式使用控件。更不用说有WinForms实现、WPF实现和Silverlight实现 有人能证实: 到目前为止,我的发现是否正确,该控件的WPF版本没有与WinForms版本相同的功能,并且在响应某些事件方面有一定的限制 为什么有人在使用控件时选择使用基于mshtml的

我正在尝试掌握
WebBrowser
控件,以便在我正在构建的数据提取应用程序中使用

这里的要求之一是能够记录用户操作并回放它们。虽然我取得了一点成功,但我对我是否以正确的方式进行这件事感到困惑

web上似乎有一些代码示例以非常不同的方式使用控件。更不用说有WinForms实现、WPF实现和Silverlight实现

有人能证实:

  • 到目前为止,我的发现是否正确,该控件的WPF版本没有与WinForms版本相同的功能,并且在响应某些事件方面有一定的限制

  • 为什么有人在使用控件时选择使用基于
    mshtml
    的类,而至少在WinForms中,Windows窗体类中似乎存在执行相同任务的等效方法

  • 例子 Winforms单击事件句柄

    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);
       }
    }
    

    我很久以前就写过一些关于韦伯的东西。如果需要,您可以尝试以下方法:


    谢谢

    几年前,我用WinForms的WebBrowser实现了一个有点复杂的WYSIWYG编辑器,当时的浏览器是IE7(我不记得有IE7或Firefox1或2)。如果您只在浏览器中加载页面,您将看到MSHTMLPIA是一个需要处理的难题

    IE 7中浏览器组件的行为不是100%确定的(希望IE 9中的情况有所改变,但更糟糕的是,您可能需要处理不同版本的Microsoft浏览器)。然而,设计良好的OO层将为您的生产力创造奇迹

    我将尝试回答您关于使用web浏览器的疑问:

  • 根据以下链接,在WPF的WebBrowser中,您将获得与JavaScript相同的功能。正如以前在浏览器中使用宏一样,您肯定会有足够的事件来执行您想要的操作

  • 如果您觉得不需要WebBrowser控件,请尽可能使用它。桌面GUI中的浏览器可以提供很多帮助,但需要付出代价


  • 但是,如果您想使用一个浏览器,您可能希望尝试使用不同的浏览器。例如,MonoDevelop的ASP.NET设计器是在不久前用Mozilla Composer(Gecko engine)开发的,在WebForms变得如此不受欢迎之前,有一个项目使用WebKit引擎从头开始开发它。

    FWIW,围绕MSHTML的.NET包装并没有公开所有功能。有时候你需要花更少的钱来完成一些事情。有没有一个很好的教程介绍如何使用这个更深层的功能?谢谢,你的帖子证实了我到目前为止的很多经验。这一项目暂时搁置,但很快可能会重新启动。我很想了解更多关于基于javascript的宏的知识。认为前进的道路可能只是学习C++和使用一个流行的开源浏览器!我对此一无所知,但您可以告诉我,您可能希望记录哪些在标准DOM事件中未捕获的用户操作?而且你总是可以选择使用.NET的其他浏览器,不需要C++。