GeckoFX:将GeckoNode转换为GeckoHTMLElement
本文关键字:GeckoHTMLElement 转换 GeckoNode GeckoFX | 更新日期: 2023-09-27 17:49:36
我只需要点击一个由唯一类标识的元素的第一个子元素。
我的代码到目前为止是:
geckoWebBrowser.Document.GetElementsByClassName("button")[0].FirstChild.Click();
问题是GeckoFX 16的geckoWebBrowser.Document.GetElementsByClassName
返回一个类型为GeckoNode
的数组,它没有点击方法,所以这个代码不能工作。在另一边,方法geckoWebBrowser.Document.GetElementsByName
返回一个类型为GeckoHTMLElement
的数组,它有一个点击方法。
基于这一事实,我尝试用as
操作符进行强制转换,但这总是抛出一个异常,消息是它不能强制转换。
我已经在GeckoFX的类中搜索了很多(遗憾的是没有任何文档),但我没有找到任何
任何帮助都将不胜感激。
在强制转换之前,您需要确保该节点实际上是一个元素,而不是,例如,一个文本节点。
GeckoNode node = geckoWebBrowser.Document.GetElementsByClassName("button")[0].FirstChild;
if (NodeType.Element == node.NodeType)
{
GeckoElement element = (GeckoElement)node;
element.Click();
}
else
{
// Even though GetElementByClassName return type could contain non elements, I don't think
// it ever would in reality.
Console.WriteLine("First node is a {0} not an element.", node.NodeType);
}
你知道html是否已经加载了吗?
尝试在DocumentCompleted事件发生后运行此代码。
geckoWebBrowser1.DocumentCompleted += geckoWebBrowser1_DocumentCompleted;
private void geckoWebBrowser1_DocumentCompleted(object sender, EventArgs e)
{
// Here you can add the coding to perform after document loaded
GeckoInputElement txtbox = (GeckoInputElement)geckoWebBrowser1.Document.GetElementById("txtBox1");
txtbox.SetAttribute("value","OK");
}
GeckoElement不支持Click,但支持GeckoHtmlElement。
geckoWebBrowser.Document.GetElementsBy……不返回GeckoHtmlElement,只返回GeckoElement;如此悲伤!