【发布时间】:2018-08-31 14:07:35
【问题描述】:
我厌倦了用壁虎网络浏览器模拟谷歌搜索。到目前为止,我已经能够去谷歌页面,然后搜索一些这样的东西:
geckoWebBrowser1.Navigate("https://www.google.com/");
await Task.Run(() => CheckDocumentLoaded());
var page = geckoWebBrowser1.Document.GetElementById("lst-ib");
(page as GeckoHtmlElement).Focus();
(page as GeckoInputElement).Value = "something";
现在我只想点击搜索按钮。所以我将此添加到第一部分:
var button = new GeckoButtonElement(geckoWebBrowser1.Document.GetElementById("mKlEF").DomObject);
button.Click();
但有趣的事情发生了。如果我在第一部分之后运行此代码,则不会发生任何事情。但是如果我创建了一个按钮并将代码放在上面,它就可以正常工作。
private void Button1_Click(object sender, EventArgs e)
{
var button = new GeckoButtonElement(geckoWebBrowser1.Document.GetElementById("mKlEF").DomObject);
button.Click();
return;
}
但我必须手动单击按钮才能使其工作。它真的令人困惑。我不知道是什么原因造成的!!
注意:
如果你想让代码正常工作,你必须使用这个用户代理:
(Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko)我不想使用
SendKeys.Send("{ENTER}")。如果我以编程方式按下按钮,它也不起作用。
【问题讨论】:
-
如果“mKlEF”是一个按钮,那么您应该能够将返回值从 GetElementById 转换为 GeckoButtonElement,而不是创建另一个。怀疑它是你问题的原因。
-
一些猜测: 1. 不要关注 lst-ib 元素。 2. 聚焦按钮。
-
亲爱的@Tom。我试过了,但没有用。
-
我认为这是由 Google 起始页的 AJAX 特性引起的。
标签: c# webbrowser-control gecko geckofx