我正在使用GeckoWebBrowser處理Windows應用程序,並試圖通過代碼檢查Captcha的複選框。 Programmaticaly我已經可以獲取和設置html元素,但這個複選框我無法覆蓋。我無法在頁面的任何位置找到它。 我不是想要確定或解決驗證碼,只需選中複選框元素,然後驗證它是否被選中。那樣簡單。GeckoWebBrowser如何標記Captcha複選框(C#Windows窗體)?
我知道此刻是什麼:
在Firefox的檢查,我可以看到 一些明顯的信息:驗證碼與標題=「窗口小部件的reCAPTCHA」一個IFRAME,寬度= 304和高度= 78 。
現在,這是我怎麼想獲取的複選框,尋找ID,跨度,DIV和階級與不同的方式沒有成功...
首先,在主文檔
//looking all elements into main Document (around 1300 elements)
GeckoElementCollection collection = geckoWebBrowser1.Document.GetElementsByTagName("*");
foreach (GeckoHtmlElement elem in collection)
{
string id = elem.Id;
if (id == "recaptcha-anchor")
{
string myId = "this is my ID"; //never find this ID!
}
//just for debug
string LocalName = elem.LocalName;
string OuterHtml = elem.OuterHtml;
string TagName = elem.TagName;
string TextContent = elem.TextContent;
string role = elem.GetAttribute("role");
string value = elem.GetAttribute("value");
}
所以,在主文檔,我不能找到任何ID。
下,尋找到IFRAME:
//get the iframe works well
foreach (GeckoIFrameElement iframe in geckoWebBrowser1.Document.GetElementsByTagName("iframe"))
{
//get main info about the iframe - ok
string title = iframe.GetAttribute("title");
if (title != null && title.ToLower().Contains("captcha")) //got "recaptcha widget"
{
int x = iframe.OffsetLeft;
int y = iframe.OffsetTop;
int width = Convert.ToInt32(iframe.Width);
int height = Convert.ToInt32(iframe.Height);
}
//inside the iframe, get all elements --> but always return null
Gecko.Collections.IDomHtmlCollection<GeckoElement> collection2 = iframe.GetElementsByTagName("*");
foreach (GeckoHtmlElement elem in collection2)
{
string id = elem.Id;
string LocalName = elem.LocalName;
string OuterHtml = elem.OuterHtml;
string TagName = elem.TagName;
string TextContent = elem.TextContent;
string role = elem.GetAttribute("role");
string value = elem.GetAttribute("value");
}
//foreach (GeckoHtmlElement elem in iframe.GetElementsByTagName("*")) //get no elements
//foreach (GeckoHtmlElement elem in iframe.GetElementsByTagName("input")) //get no elements
//foreach (GeckoHtmlElement elem in iframe.GetElementsByTagName("div")) //get no elements
foreach (GeckoHtmlElement elem in iframe.GetElementsByTagName("span")) //get no elements
{
string id = elem.Id;
string LocalName = elem.LocalName;
string OuterHtml = elem.OuterHtml;
string TagName = elem.TagName;
string TextContent = elem.TextContent;
string role = elem.GetAttribute("role");
}
}
所以,很多的嘗試和錯誤後,我無法獲得該複選框元素,但我可以獲取驗證碼框的一些信息,比如位置和大小,儘管標題並不像我預期的那樣是100%:在Firefox中標題=「widget recaptcha」,在GeckoWebbrowser標題=「recaptcha widget」中......一個詭異的怪誕。
這是推動我瘋了...... :-(
任何人有一些sugestion什麼,我丟失或我在做什麼錯? 有一種方式來獲得,甚至iframe中所有的HTML元素或完整元素樹?
可以做什麼,我想幹什麼?事先
謝謝!
我使用GeckoHtmlElement相反GeckoDivElement。謝謝! –