C#模拟浏览器实现自动操作

 更新时间:2024年11月11日 08:50:29   作者:无熵~  
这篇文章主要为大家详细介绍了如何使用C#实现模拟浏览器实现自动操作,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

使用WebBrowser加载网页(内嵌)

通过WebBrowser控件打开浏览页面,并操作页面元素实现自动搜索功能

        //是否已经加载网页标准
        private bool isLoadok = false;
        //首次加载网页标准
        private bool firstLoaded = false;
        //后台服务
        private BackgroundWorker bgwork;
        public WebBrowserDemo()
        {
            InitializeComponent();
        }
 
        /// <summary>
        /// 自动窗体后加载网页并获取网络元素,实现赋值,点击操作
        /// 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();
                判断网页是否加载完成:等待不起作用,一直在加载网页,使用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加载网页完成事件
        /// </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>
        /// 加载网页错误事件
        /// </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加载网页(独立)

Selenium WebDriver 是一个基于 Web 的自动化测试框架,可以测试在各种Web浏览器和各种操作系统上启动的网页。可以自由使用各种编程语言(例如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
        {
 
            // 打开网页
            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#模拟浏览器实现自动操作的文章就介绍到这了,更多相关C#浏览器自动操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用FlubuCore用C#来写DevOps脚本的方法详解

    利用FlubuCore用C#来写DevOps脚本的方法详解

    这篇文章主要介绍了利用FlubuCore用C#来写DevOps脚本的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • C#使用CefSharp实现内嵌网页详解

    C#使用CefSharp实现内嵌网页详解

    这篇文章主要介绍了C# WPF里怎么使用CefSharp嵌入一个网页,并给出一个简单示例演示C#和网页(JS)的交互实现,感兴趣的小伙伴可以了解一下
    2023-04-04
  • C#运行时相互关系浅析

    C#运行时相互关系浅析

    这篇文章介绍了C#运行时相互关系,包括运行时类型、对象、线程栈和托管堆之间的相互关系,静态方法、实例方法和虚方法的区别等等。
    2015-10-10
  • c# 控件截图的简单实例

    c# 控件截图的简单实例

    这篇文章介绍了c# 控件截图的简单实例,有需要的朋友可以参考一下
    2013-10-10
  • 如何利用C#打印九九乘法表

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

    这篇文章主要给大家介绍了关于如何利用C#打印九九乘法表的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • C#读写指定编码格式的文本文件

    C#读写指定编码格式的文本文件

    这篇文章主要为大家详细介绍了C#读写指定编码格式文本文件的方法,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • c# 深拷贝与浅拷贝的区别分析及实例

    c# 深拷贝与浅拷贝的区别分析及实例

    浅拷贝(影子克隆):只复制对象的基本类型,对象类型,仍属于原来的引用. 深拷贝(深度克隆):不紧复制对象的基本类,同时也复制原对象中的对象.就是说完全是新对象产生的.
    2013-03-03
  • C#确保只有一个实例在运行的方法

    C#确保只有一个实例在运行的方法

    这篇文章主要介绍了C#确保只有一个实例在运行的方法,涉及C#进程操作的相关技巧,需要的朋友可以参考下
    2015-05-05
  • C#用匿名方法定义委托的实现方法

    C#用匿名方法定义委托的实现方法

    这篇文章主要介绍了C#用匿名方法定义委托的实现方法,涉及C#匿名方法与委托的相关使用技巧,需要的朋友可以参考下
    2015-06-06
  • C#开发windows服务实现自动从FTP服务器下载文件

    C#开发windows服务实现自动从FTP服务器下载文件

    这篇文章主要为大家详细介绍了C#开发windows服务实现自动从FTP服务器下载文件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03

最新评论