【问题标题】:GetElementsByName geckofxGetElementsByName geckofx
【发布时间】:2017-04-28 14:48:37
【问题描述】:
private void Form1_Load(object sender, EventArgs e)
    {
        geckoWebBrowser1.DocumentCompleted += ((se, ea) =>
        {
            TextBox email = (TextBox)sender;
            string emailText = email.Text;

            var emailField = new Gecko.DOM.GeckoInputElement(geckoWebBrowser1.Document.GetElementsByTagName("input").DomObject);
            emailField.Value = emailText;
        });
        geckoWebBrowser1.Navigate("instagram.com");
    }

关注这个

var emailField = new Gecko.DOM.GeckoInputElement(geckoWebBrowser1.Document.GetElementsByTagName("input").DomObject);
                emailField.Value = emailText;

我对此有很多错误,但是当我尝试将GetElementsByTagName 更改为GetHtmlElementById 时,它的工作原理。但我需要按名称获取元素,因为 instagram 使用 name="" 而不是 id=""

【问题讨论】:

  • 你试过GetElementsByName吗?
  • @OfirWinegarten 这是错误消息:错误 1“Gecko.GeckoElementCollection”不包含“DomObject”的定义,并且没有扩展方法“DomObject”接受“Gecko.GeckoElementCollection”类型的第一个参数可以找到(您是否缺少 using 指令或程序集引用?) D​​:\Underground\C#\IG Account Creator\IG Account Creator\Form1.cs 27 119 IG Account Creator
  • 请注意 GetElementsByTagName 返回一个集合,而不仅仅是一个对象(Elements 是复数),因此您可能需要在 DomObject 扩展方法之前选择您想要的 Element将可用。
  • 我认为@Ofir 是在正确的轨道上,GetElementsByName("fred") 返回一个 HTML 元素的集合,其 name attribute 等于“fred” 'GetElementsByTagName("fred")` 返回 type "fred" 的 HTML 元素的集合。如果您有超过 1 个具有相同 name 值的元素,则需要指定它是哪一个;或者,相应地重命名。
  • @AdamV 如果我只想通过名称而不是标记名来获取呢?

标签: c# html getelementbyid gecko geckofx


【解决方案1】:

首先,您不必调用new GeckoInputElement,您可以进行强制转换(见下文)。

您可以使用此代码获取名称属性为name="nameOfMyElement" 的GeckoElements 集合。

请注意,这不是标签名称。

var allElementsWithSpecifiedName  = this.Browser.Document.GetElementsByName("nameOfMyElement");

现在,由于名称不是唯一的,因此您将获得一个集合。

然后您可以进行 Linq 查询以获取 FirstOrDefault();,或按索引访问。

GeckoInputElement inputEle = allElementsWithSpecifiedName .FirstOrDefault() as GeckoInputElement;

如果你得到的太多,那么我建议通过首先找到输入的父元素然后才按名称访问来缩小搜索范围。

例如:

var loginForm = this.Browser.Document.GetElementById("loginForm") as GeckoHtmlElement;
            var elements = loginForm.GetElementsByTagName("input");
            GeckoInputElement inputEle = elements.FirstOrDefault(x=>x.LocalName == "nameOfMyElement") as GeckoInputElement;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 2016-01-01
    • 2011-02-28
    • 2011-10-21
    • 1970-01-01
    相关资源
    最近更新 更多