2

一意のクラスで識別される要素の最初の子をクリックするだけです。

これまでの私のコードは次のとおりです。

geckoWebBrowser.Document.GetElementsByClassName("button")[0].FirstChild.Click();

問題は、GeckoFX 16がClickメソッドを持たないgeckoWebBrowser.Document.GetElementsByClassNameタイプの配列を返すGeckoNodeため、このコードが機能しないことです。一方、メソッドは、Clickメソッドを持つ
geckoWebBrowser.Document.GetElementsByName
タイプの配列を返します。その事実に基づいて、Operatorでキャストしようとしましたが、キャストできないというメッセージとともに常に例外がスローされます。GeckoFXのクラスですでにたくさん検索しましたが(残念ながらドキュメントはありません)、何も見つかりませんでした 。助けていただければ幸いです。GeckoHTMLElement

as


4

3 に答える 3

3

キャストする前に、ノードが実際には要素であり、たとえばテキストノードではないことを確認する必要があります。

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);
}
于 2013-01-04T21:57:36.767 に答える
1

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");
}
于 2016-11-27T19:12:20.180 に答える
0

GeckoElementはClickをサポートしていませんが、GeckoHtmlElementをサポートしています。

geckoWebBrowser.Document.GetElementsBy ...はGeckoHtmlElementを返しません。GeckoElement(s)のみを返します。とても悲しい!

于 2013-09-10T04:03:39.057 に答える