当前位置: 代码网 > it编程>编程语言>C# > C#模拟浏览器实现自动操作

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

2024年11月25日 C# 我要评论
使用webbrowser加载网页(内嵌)通过webbrowser控件打开浏览页面,并操作页面元素实现自动搜索功能 //是否已经加载网页标准 private bool isl

使用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#浏览器自动操作内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com