最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#模擬瀏覽器實現(xiàn)自動操作

 更新時間:2024年11月11日 08:50:29   作者:無熵~  
這篇文章主要為大家詳細介紹了如何使用C#實現(xiàn)模擬瀏覽器實現(xiàn)自動操作,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

使用WebBrowser加載網(wǎng)頁(內嵌)

通過WebBrowser控件打開瀏覽頁面,并操作頁面元素實現(xiàn)自動搜索功能

        //是否已經加載網(wǎng)頁標準
        private bool isLoadok = false;
        //首次加載網(wǎng)頁標準
        private bool firstLoaded = false;
        //后臺服務
        private BackgroundWorker bgwork;
        public WebBrowserDemo()
        {
            InitializeComponent();
        }
 
        /// <summary>
        /// 自動窗體后加載網(wǎng)頁并獲取網(wǎng)絡元素,實現(xiàn)賦值,點擊操作
        /// winform窗體上添加了一個名為webBrowser1的WebBrowser控件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            this.BeginInvoke(new Action(() =>
            {
                bgwork = new BackgroundWorker();
                bgwork.DoWork += Bgwork_DoWork;
                bgwork.RunWorkerCompleted += Bgwork_RunWorkerCompleted;
                string url = "https://www.so.com/";
                this.webBrowser1.ScriptErrorsSuppressed = true;
                this.webBrowser1.Navigate(url);
                webBrowser1.DocumentCompleted += WebBrowser1_DocumentCompleted;
                bgwork.RunWorkerAsync();
                判斷網(wǎng)頁是否加載完成:等待不起作用,一直在加載網(wǎng)頁,使用DocumentCompleted事件
                //while (this.webBrowser1.IsBusy || webBrowser1.ReadyState != WebBrowserReadyState.Complete)
                //{
                //    Thread.Sleep(1000);
                //}
                //string search_id = "input";
                //string search_value = "天安門";
                //string btn_id = "search-button";
                //HtmlDocument doc = this.webBrowser1.Document;
                //HtmlElement search = doc.GetElementById(search_id);
                //search.SetAttribute("value", search_value);
                //HtmlElement btn = doc.GetElementById(btn_id);
                //btn.InvokeMember("click");
            }));
        }
 
        /// <summary>
        /// WebBrowser加載網(wǎng)頁完成事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
 
            this.BeginInvoke(new Action(() =>
            {
                if (this.webBrowser1.IsBusy == false && webBrowser1.ReadyState == WebBrowserReadyState.Complete&& firstLoaded==false)
                {
                    firstLoaded=true;
                    string search_id = "input";
                    string search_value = "自動化";
                    string btn_id = "search-button";
                    HtmlDocument doc = this.webBrowser1.Document;
                    HtmlElement search = doc.GetElementById(search_id);
                    search.SetAttribute("value", search_value);
                    HtmlElement btn = doc.GetElementById(btn_id);
                    btn.InvokeMember("click");
                }
 
            }));
        }
 
        /// <summary>
        /// 后臺服務完成事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Bgwork_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.webBrowser1.Document.Window.Error += new HtmlElementErrorEventHandler(Window_Error);
            if(webBrowser1.ReadyState == WebBrowserReadyState.Complete)
            {
                isLoadok = true;
            }
            else
            {
                isLoadok = false;
            }
        }
 
        /// <summary>
        /// 加載網(wǎng)頁錯誤事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Window_Error(object sender, HtmlElementErrorEventArgs e)
        {
            e.Handled = true;
        }
 
        /// <summary>
        /// 后臺服務
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Bgwork_DoWork(object sender, DoWorkEventArgs e)
        {
            compWait();
        }
 
        /// <summary>
        /// 后臺服務方法
        /// </summary>
        private void compWait()
        {
            while(!isLoadok)
            {
                Thread.Sleep(500);
            }
        }

使用 Selenium WebDriver加載網(wǎng)頁(獨立)

Selenium WebDriver 是一個基于 Web 的自動化測試框架,可以測試在各種Web瀏覽器和各種操作系統(tǒng)上啟動的網(wǎng)頁??梢宰杂墒褂酶鞣N編程語言(例如Java、Perl、Python、Ruby、C#、PHP 和 JavaScript)編寫測試腳本。注:可以不需要下載webdriver驅動

    private void btnLoad_Click(object sender, EventArgs e)
    {
        // 設置Chrome選項,可選
        var options = new ChromeOptions();
        //options.AddArgument("--headless"); // 無頭模式,不打開瀏覽器窗口
 
        // 初始化WebDriver
        IWebDriver driver = new ChromeDriver(options);
 
        try
        {
 
            // 打開網(wǎng)頁
            driver.Navigate().GoToUrl("https://account.chsi.com.cn/passport/login");
            //driver.Navigate().Back();
            //driver.Navigate().Refresh();
 
            // 等待頁面加載完成,知道頁面空閑,超時10s拋出異常
            //var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
            //wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.BrowserIsNotBusy());
 
            //查找用戶輸入框并輸入用戶名
            driver.FindElement(By.Name("username")).SendKeys("Tom");
            //查找密碼輸入框并輸入密碼
            driver.FindElement(By.Name("password")).SendKeys("123456");
            driver.Manage().Window.Maximize();
            查找提交按鈕并點擊提交按鈕
            //driver.FindElement(By.ClassName("btn_login")).Click();
 
            // 獲取頁面源碼
            string pageSource = driver.PageSource;
            Console.WriteLine(pageSource);
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        finally
        {
             清理,關閉瀏覽器
            //driver.Quit();
        }
    }

到此這篇關于C#模擬瀏覽器實現(xiàn)自動操作的文章就介紹到這了,更多相關C#瀏覽器自動操作內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C#和Java互相調用的方法小結

    C#和Java互相調用的方法小結

    這篇文章主要介紹了C#和Java互相調用的方法,文中展示了如何在不同編程語言之間實現(xiàn)互操作,每種語言之間的互操作都有其特定的方法和工具,希望這些示例能夠幫助你更好地理解和實現(xiàn)跨語言調用,需要的朋友可以參考下
    2025-04-04
  • ADO.NET實體數(shù)據(jù)模型詳細介紹

    ADO.NET實體數(shù)據(jù)模型詳細介紹

    本文將詳細介紹ADO.NET實體數(shù)據(jù)模型,下面先看看簡單的單表的增刪改查操作,然后再看多表的關聯(lián)查詢,帶參數(shù)查詢等
    2012-11-11
  • C#中this指針的用法示例

    C#中this指針的用法示例

    這篇文章主要介紹了C#中this指針的用法,對初學者而言是非常重要的概念,必須加以熟練掌握,需要的朋友可以參考下
    2014-08-08
  • C#結合Spire.XLS for .NET實現(xiàn)Excel工作表的激活和單元格的選擇

    C#結合Spire.XLS for .NET實現(xiàn)Excel工作表的激活和單元格的選擇

    在企業(yè)級應用開發(fā)中,C#與Excel的交互已成為常態(tài),本文將深入探討如何利用C#和功能強大的第三方庫 Spire.XLS for .NET實現(xiàn)Excel工作表的激活和單元格的選擇,感興趣的小伙伴可以了解下
    2026-01-01
  • C#快速排序算法實例分析

    C#快速排序算法實例分析

    這篇文章主要介紹了C#快速排序算法,實例分析了C#排序方法的相關技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • C#.net中的類型轉換詳細介紹

    C#.net中的類型轉換詳細介紹

    C#.net中的類型轉換詳細介紹,需要的朋友可以參考一下
    2013-04-04
  • C#判斷字符串是否是數(shù)字(實例)

    C#判斷字符串是否是數(shù)字(實例)

    本文主要分享了C#實現(xiàn)判斷字符串是否是數(shù)字的具體實例,具有一定的參考價值,需要的朋友一起來看下吧
    2016-12-12
  • C#計算兩個文件的相對目錄算法的實例代碼

    C#計算兩個文件的相對目錄算法的實例代碼

    現(xiàn)在已知兩個文件相對于網(wǎng)站根目錄的路徑,如何計算相對路徑呢,有需要的朋友可以參考一下
    2013-09-09
  • C#中調用命令行cmd開啟wifi熱點的實例代碼

    C#中調用命令行cmd開啟wifi熱點的實例代碼

    最近想在win7上開啟wifi熱點,于是就弄出下面這個小東西,里面涉及如何在控制臺上輸入命令,分享一下。首先在VS中創(chuàng)建一個window窗口,然后創(chuàng)建兩個四個button,兩個輸入框
    2013-04-04
  • C# BlockingCollection的使用小結

    C# BlockingCollection的使用小結

    BlockingCollection是一個線程安全的集合,它可以使用多種底層集合,并提供阻塞和限制大小的功能,本文主要介紹了C# BlockingCollection,感興趣的可以了解一下
    2025-12-12

最新評論

昭通市| 商南县| 信宜市| 乌拉特中旗| 赤峰市| 德安县| 耒阳市| 郁南县| 从化市| 蚌埠市| 凌云县| 万安县| 福州市| 郯城县| 保靖县| 德化县| 巴林左旗| 怀柔区| 鸡泽县| 昭觉县| 韶山市| 满洲里市| 繁昌县| 东城区| 富民县| 临沭县| 新巴尔虎左旗| 弥渡县| 武城县| 台东市| 吴川市| 潼南县| 武强县| 镇平县| 怀仁县| 京山县| 兴化市| 攀枝花市| 沭阳县| 龙门县| 丹凤县|