【问题标题】:WPF .GetElementById()WPF .GetElementById()
【发布时间】:2013-03-20 17:49:44
【问题描述】:

我在 VS2012 中使用 WPF (C#) 编程

我试过用这个:

How do you click a button in a webbrowser control?

点击浏览器上的按钮,但是

  1. .GetElementById 给我一个错误。

    我添加:using System.Windows.Forms; 并组装它们,但这对我没有任何改变。

  2. 我想我也会有这个问题:.InvokeMember("click");

我在网上找到的是:

http://www.telerik.com/help/wpf/m_telerik_windows_documents_formatproviders_html_parsing_dom_idocument_getelementbyid.html

但我不知道如何将它组装到 VS2012,因为 VS2012 中没有内置 API 引用。

【问题讨论】:

  • 你使用的是WPF而不是Winforms该方法在Control的WPF version中不可用。

标签: c# wpf button click


【解决方案1】:

您可以在 WPF 应用程序的 WindowsFormHosted 控件中使用 Windows Forms WebBrowser 而不是 WPF WebBrowser 主机,然后您可以访问这些成员。

【讨论】:

  • 您肯定不需要添加对“System.Windows.Forms”的引用
  • 好的,但是当我这样做时,它实际上不是 System.Windows.Forms.WebBrowser 对象,它的 System.Windows.Forms.Integration.WindowsFormsHost 并且我实际上无法对它们做一些有用的事情
  • 我解决了 Xaml 问题:xmlns:my="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration" 代码后面:System.Windows.Forms.WebBrowser Browser = new System.Windows .Forms.WebBrowser(); windowsFormsHost.Child = 浏览器;
【解决方案2】:
// reference :
/// https://gist.github.com/sphingu/5781036
----------------------------------------------------
// Using WebBrowser for Crowling in WPF
----------------------------------------------------
<WebBrowser Cursor="Arrow" Name="MyBrowser" LoadCompleted="MyBrowser_OnLoadCompleted" />
----------------------------------------------------
// useful methods of WebBrowser
----------------------------------------------------
MyBrowser.Navigate(new Uri("http://google.com"));

private void MyBrowser_OnLoadCompleted(object sender,NavigationEventArgs e)
{
        ...
        // return source of loaded page in WebBrowser
        var document=(IHTMLDocument3) MyBrowser.Document;

        //Get Element and set its value
        document.getElementById("userName").setAttribute("value","myusername");

        //get Button on page and fire its click event
        document.getElementById("btnSubmit").click();

        // Invoke javascript function on page loaded on WebBrowser
        MyBrowser.InvokeScript("submitform",param1,param2,...);

        //get data from table in page
         _innerHtmldata =
                ((IHTMLDocument3) MyBrowser.Document).getElementById("datatable")
                                                     .innerHTML;

}

【讨论】:

  • 请添加一些有关您的解决方案如何工作的信息。
猜你喜欢
  • 1970-01-01
  • 2010-10-08
  • 2011-08-19
  • 1970-01-01
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多