GetElementsByName geckofx

时间:2017-04-28 14:48:38

标签: c# html getelementbyid gecko geckofx

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时,其工作正常。但是我需要通过名字获取elemnt,因为Instagram使用name=""而不是id=""

1 个答案:

答案 0 :(得分:0)

首先,你不必调用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;