如何在 WPF Web 浏览器中使用 C# 将字符串插入输入字段

本文关键字:字符串 插入 字段 输入 WPF Web 浏览器 | 更新日期: 2023-09-27 17:56:05

我在Stackoverflow上找到了很多关于这个问题的信息,但看起来我仍然缺少一些东西。使用Web浏览器,我想在某个网页的输入字段中填写一个字符串。通过单击按钮,我希望在输入字段中放置一些文本。

这是我的代码:

using System.Windows.Forms;

和功能:

    private void button2_Click(object sender, RoutedEventArgs e)
    {
        HtmlDocument doc = (HtmlDocument)webBrowser1.Document;
        doc.GetElementsByTagName("input")["username"].SetAttribute("Value", "someString");
    }

第二个按钮处理 webBbrowser1.Navigate 方法。

然后我得到这个错误:

{"无法强制转换类型为 'mshtml.HTMLDocumentClass"到类类型"System.Windows.Forms.HtmlDocument"。表示 COM 组件的类型实例不能强制转换为不表示 COM 组件的类型;但是,只要基础 COM 组件支持对接口的 IID 的 QueryInterface 调用,就可以将它们强制转换为接口。

有什么想法吗?谢谢。

如何在 WPF Web 浏览器中使用 C# 将字符串插入输入字段

错误发生在以下行中:

HtmlDocument doc = (HtmlDocument)webBrowser1.Document;

看看这个。 WPF 中的webBrowswer1.Document返回Microsoft.mshtml.HTMLDocuement因此 要么添加对 Microsoft.mshtml 的引用,然后:

private void button2_Click(object sender, RoutedEventArgs e)
{
    var doc = webBrowser1.Document as mshtml.HTMLDocument;
    var input = doc.getElementsByTagName("input");
    foreach (mshtml.IHTMLElement element in input)
    {
        if (element.getAttribute("name") == "username")
        {
            element.setAttribute("value", "someString");
            break;
        }
    }
}

private void button2_Click(object sender, RoutedEventArgs e)
{
    dynamic doc = webBrowser1.Document;
    dynamic input = doc.getElementsByTagName("input");
    foreach (dynamic element in input)
    {
        if (element.getAttribute("name") == "username")
        {
            element.setAttribute("value", "someString");
            break;
        }
    }
}

欲了解更多信息:

  • 如何从 WPF Web 浏览器获取 HtmlElementCollection。
  • 使用 HtmlElement(Collection) 和 Web 浏览器查找 html 中的特定数据