欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#模擬瀏覽器實(shí)現(xiàn)自動(dòng)操作

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

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

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

        //是否已經(jīng)加載網(wǎng)頁標(biāo)準(zhǔn)
        private bool isLoadok = false;
        //首次加載網(wǎng)頁標(biāo)準(zhǔn)
        private bool firstLoaded = false;
        //后臺(tái)服務(wù)
        private BackgroundWorker bgwork;
        public WebBrowserDemo()
        {
            InitializeComponent();
        }
 
        /// <summary>
        /// 自動(dòng)窗體后加載網(wǎng)頁并獲取網(wǎng)絡(luò)元素,實(shí)現(xiàn)賦值,點(diǎn)擊操作
        /// winform窗體上添加了一個(gè)名為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 = "自動(dòng)化";
                    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>
        /// 后臺(tái)服務(wù)完成事件
        /// </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)頁錯(cuò)誤事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Window_Error(object sender, HtmlElementErrorEventArgs e)
        {
            e.Handled = true;
        }
 
        /// <summary>
        /// 后臺(tái)服務(wù)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Bgwork_DoWork(object sender, DoWorkEventArgs e)
        {
            compWait();
        }
 
        /// <summary>
        /// 后臺(tái)服務(wù)方法
        /// </summary>
        private void compWait()
        {
            while(!isLoadok)
            {
                Thread.Sleep(500);
            }
        }

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

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

    private void btnLoad_Click(object sender, EventArgs e)
    {
        // 設(shè)置Chrome選項(xiàng),可選
        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();
 
            // 等待頁面加載完成,知道頁面空閑,超時(shí)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();
            查找提交按鈕并點(diǎn)擊提交按鈕
            //driver.FindElement(By.ClassName("btn_login")).Click();
 
            // 獲取頁面源碼
            string pageSource = driver.PageSource;
            Console.WriteLine(pageSource);
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        finally
        {
             清理,關(guān)閉瀏覽器
            //driver.Quit();
        }
    }

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

相關(guān)文章

  • 利用FlubuCore用C#來寫DevOps腳本的方法詳解

    利用FlubuCore用C#來寫DevOps腳本的方法詳解

    這篇文章主要介紹了利用FlubuCore用C#來寫DevOps腳本的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • C#使用CefSharp實(shí)現(xiàn)內(nèi)嵌網(wǎng)頁詳解

    C#使用CefSharp實(shí)現(xiàn)內(nèi)嵌網(wǎng)頁詳解

    這篇文章主要介紹了C# WPF里怎么使用CefSharp嵌入一個(gè)網(wǎng)頁,并給出一個(gè)簡單示例演示C#和網(wǎng)頁(JS)的交互實(shí)現(xiàn),感興趣的小伙伴可以了解一下
    2023-04-04
  • C#運(yùn)行時(shí)相互關(guān)系淺析

    C#運(yùn)行時(shí)相互關(guān)系淺析

    這篇文章介紹了C#運(yùn)行時(shí)相互關(guān)系,包括運(yùn)行時(shí)類型、對象、線程棧和托管堆之間的相互關(guān)系,靜態(tài)方法、實(shí)例方法和虛方法的區(qū)別等等。
    2015-10-10
  • c# 控件截圖的簡單實(shí)例

    c# 控件截圖的簡單實(shí)例

    這篇文章介紹了c# 控件截圖的簡單實(shí)例,有需要的朋友可以參考一下
    2013-10-10
  • 如何利用C#打印九九乘法表

    如何利用C#打印九九乘法表

    這篇文章主要給大家介紹了關(guān)于如何利用C#打印九九乘法表的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • C#讀寫指定編碼格式的文本文件

    C#讀寫指定編碼格式的文本文件

    這篇文章主要為大家詳細(xì)介紹了C#讀寫指定編碼格式文本文件的方法,感興趣的小伙伴們可以參考一下
    2016-03-03
  • c# 深拷貝與淺拷貝的區(qū)別分析及實(shí)例

    c# 深拷貝與淺拷貝的區(qū)別分析及實(shí)例

    淺拷貝(影子克隆):只復(fù)制對象的基本類型,對象類型,仍屬于原來的引用. 深拷貝(深度克隆):不緊復(fù)制對象的基本類,同時(shí)也復(fù)制原對象中的對象.就是說完全是新對象產(chǎn)生的.
    2013-03-03
  • C#確保只有一個(gè)實(shí)例在運(yùn)行的方法

    C#確保只有一個(gè)實(shí)例在運(yùn)行的方法

    這篇文章主要介紹了C#確保只有一個(gè)實(shí)例在運(yùn)行的方法,涉及C#進(jìn)程操作的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • C#用匿名方法定義委托的實(shí)現(xiàn)方法

    C#用匿名方法定義委托的實(shí)現(xiàn)方法

    這篇文章主要介紹了C#用匿名方法定義委托的實(shí)現(xiàn)方法,涉及C#匿名方法與委托的相關(guān)使用技巧,需要的朋友可以參考下
    2015-06-06
  • C#開發(fā)windows服務(wù)實(shí)現(xiàn)自動(dòng)從FTP服務(wù)器下載文件

    C#開發(fā)windows服務(wù)實(shí)現(xiàn)自動(dòng)從FTP服務(wù)器下載文件

    這篇文章主要為大家詳細(xì)介紹了C#開發(fā)windows服務(wù)實(shí)現(xiàn)自動(dòng)從FTP服務(wù)器下載文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03

最新評(píng)論