为了账号安全,请及时绑定邮箱和手机立即绑定

壁虎浏览器按钮单击不起作用 c#

壁虎浏览器按钮单击不起作用 c#

C#
慕少森 2021-12-25 18:32:17
我厌倦了用 Gecko 网络浏览器模拟谷歌搜索。到目前为止,我已经能够去谷歌页面,然后搜索这样的东西:    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}").如果我以编程方式按下按钮,它也不起作用。
查看完整描述

1 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

我在 WPF 应用程序中玩弄并重新创建了您的场景。


我使用DocumentCompleted事件 让它工作


在浏览器完成解析新页面并更新 Document 属性后发生。


我在导航之前订阅事件侦听器,并在调用处理程序后将其删除。


然后,我调用 的第一个元素form来提交搜索。


(_browser.Document.GetElementsByTagName("form").First() as GeckoFormElement).submit();

完整代码示例:WPF 应用程序


using Gecko;

using Gecko.DOM;

using System.Windows;

using System.Windows.Forms.Integration;

using System.Linq;    

namespace GeckoWpf {

    public partial class MainWindow : Window {

        public MainWindow() {

            InitializeComponent();

            Gecko.Xpcom.Initialize("Firefox");

        } 


        void browser_DocumentCompleted(object sender, System.EventArgs e) {

             //unsubscribe

            _browser.DocumentCompleted -= browser_DocumentCompleted;


            XPathResult xpathResult = _browser.Document.EvaluateXPath("//div/input");

            var foundNodes = xpathResult.GetNodes();

            foreach (var node in foundNodes) {

                GeckoInputElement txtbox = new GeckoInputElement(node.DomObject);

                txtbox.Value = "Mona Lisa"; //add the search term

            }    

            (_browser.Document.GetElementsByTagName("form").First() as GeckoFormElement).submit();

        }


        WindowsFormsHost _host = new WindowsFormsHost();

        GeckoWebBrowser _browser = new GeckoWebBrowser();    

        private void Window_Loaded(object sender, RoutedEventArgs e) {

            _browser.DocumentCompleted += browser_DocumentCompleted;

            _host.Child = _browser;    GridWeb.Children.Add(_host);    

            _browser.Navigate("https://www.google.com/");

        }

    }

}

注意:这种方法可能不适用于所有页面,因为DocumentComplete可能会因各种原因(例如 i/frames、AJAX 和其他动态内容)被多次触发。


查看完整回答
反对 回复 2021-12-25
  • 1 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信