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