【问题标题】:Webbrowser getelementbyname?网络浏览器按名称获取元素?
【发布时间】:2015-03-14 08:52:33
【问题描述】:
<input onfocus="showInfoBox(this, "Varchar(100) Latin capital letters only (A-Z) and spaces between surnames")" onblur="hideInfoBox()" value="" name="Surname"><input>

我需要通过网络浏览器填写输入。当我尝试填充时,我收到 System.ArgumentOutOfRangeException 错误。我该如何填写这个输入区域?

这是我的代码

webBrowser1.Document.GetElementsByTagName("Surname")[0].SetAttribute("MySurName", "true");

【问题讨论】:

  • 检查我的答案并告诉我是否对你有帮助
  • 不知道是不是来晚了,但你可以试试:webBrowser1.Document.Window.Document.GetElementsByTagName.....

标签: c# html input webbrowser-control


【解决方案1】:

异常的原因是函数GetElementsByTagName找到零元素,所以集合是空的,所以当你尝试访问空集合的第1个元素时抛出异常。

要通过“姓氏”等名称获取元素,您应该使用GetElementsByName 而不是GetElementsByTagName,后者应该用于标签行“输入”。

但是,由于您提供的 html 格式完全错误,因此没有任何函数会返回良好的结果。

  1. “输入”标签是自闭合的,应如下所示:&lt;input .... /&gt;。最后删除不必要的额外'&lt;input&gt;'
  2. 小心使用引号。应该是onfocus="showInfoBox(this, 'Varchar(100) Latin capital letters only (A-Z) and spaces between surnames')"name=Surname" 应该是 name="Surname"
  3. 输入必须具有类型属性(&lt;input type='text'&lt;input type='checkbox' 等)

【讨论】:

  • 感谢您的澄清。粘贴过程是我的错误。我试着让我的问题更简单,但语法错误。很快我就找不到可以按名称获取输入元素的流畅代码了。
  • 你可以将name改成id并使用webBrowser.Document.useGetElementById,这样更好。
  • 请原谅我对网络的了解有限。是否可以在将名称更改为 id 时保存信息并发布,即使它不是我们的网站?我正在填写不属于我的网站上的输入。
  • 很可能不是。好吧,您可以使用 GetElementsByTagName("input") 然后检查 'name' 属性。顺便说一句,如果您认为我的回答对您有帮助,请投票 :)
  • 当然有帮助:) 我想知道是否可以使用表单应用程序更改 html 代码,因为您建议我将名称更改为 id。
【解决方案2】:

您的代码无效。当您使用GetElementByTagName 时,您需要按标签名称 进行搜索。在您的情况下,标签名称是input。您可以查看此article

另外,您的名称中有拼写错误,而您没有 "。见name=Surname"。您可以尝试使用GetElementByName 方法。检查此article请注意您缺少输入类型。在 Google 上搜索不同的input types

public HtmlElementCollection GetElemByName(string name)
{
    if (webBrowser1.Document == null)
         return null;

        HtmlDocument doc = webBrowser1.Document;

        return doc.All.GetElementsByName(name);                 
}

之后你调用方法;​​

HtmlElementCollection col = GetElemByName("SurName");
if(col != null && col.Count > 0)
    col[0].SetAttribute("AnyAttribute", value); // be aware THERE IS NO ATTRIBUTE MySurName !!!

我不知道你是否想循环你的元素,如果你有多个同名元素。还要区分属性和属性值。如果你想让你的名字变成 MySurName,你需要这个

col[0].SetAttribute("name", "MySurName");

【讨论】:

  • 谢谢。我想我正在解决我的问题。只是这个代码的问题是“col”参数返回空值并且不进入 if 块。
  • 这意味着您的浏览器。文档为空或没有具有此名称的元素。你应该调试你的代码。
【解决方案3】:

这应该适合你:

    Dim inp As HtmlElement
    For Each inp In wb.Document.GetElementsByTagName("input")
    If inp.GetAttribute("name") = "surname" Then
    inp.SetAttribute("value", "your text")
    End If
    Next

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-03
    • 2014-04-16
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 2010-10-23
    相关资源
    最近更新 更多