亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

壁虎瀏覽器按鈕單擊不起作用 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;}但我必須手動單擊按鈕才能使其工作。它真的很混亂。我不知道是什么原因造成的?。」P記:如果你想讓代碼工作,你必須使用這個用戶代理: (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 關注
  • 183 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號