C# 模拟浏览器并自动操作

本文主要讲解通过WebBrowser控件打开浏览页面,并操作页面元素实现自动搜索功能,仅供学习分享使用,如有不足之处,还请指正。

涉及知识点

  1. WebBrowser:用于在WinForm窗体中,模拟浏览器,打开并导航网页。
  2. HtmlDocument:表示一个Html文档的页面。每次加载都会是一个全新的页面。
  3. GetElementById(string id):通过ID或Name获取一个Html中的元素。
  4. HtmlElement:表示一个Html标签元素。
  5. BackgroundWorker 后台执行独立操作的进程。

设计思路

主要采用异步等待的方式,等待页面加载完成,流程如下所示:

示例效果图

如下所示:加载完成后,自动输入【天安门】并点击搜索。

核心代码

加载新的页面,如下所示:

1 string url = "https://www.so.com/";
2 this.wb01.ScriptErrorsSuppressed = true;
3 this.wb01.Navigate(url);

注意:this.wb01.ScriptErrorsSuppressed = true;用于是否弹出异常脚本代码错误框

获取元素并赋值,如下所示:

1 string search_id = "input";
2 string search_value = "天安门";
3 string btn_id = "search-button";
4 HtmlDocument doc = this.wb01.Document;
5 HtmlElement search = doc.GetElementById(search_id);
6 search.SetAttribute("value", search_value);
7 HtmlElement btn = doc.GetElementById(btn_id);
8 btn.InvokeMember("click");

示例整体代码,如下所示:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Threading;
 9 using System.Threading.Tasks;
10 using System.Windows.Forms;
11
12 namespace DemoExplorer
13 {
14     public partial class FrmExplorer : Form
15     {
16         private bool isLoadOk = false;
17
18         private BackgroundWorker bgWork;
19
20         public FrmExplorer()
21         {
22             InitializeComponent();
23         }
24
25         private void FrmExplorer_Load(object sender, EventArgs e)
26         {
27             bgWork = new BackgroundWorker();
28             bgWork.DoWork += bgWork_DoWork;
29             bgWork.RunWorkerCompleted += bgWork_RunWorkerCompleted;
30             string url = "https://www.so.com/";
31             this.wb01.ScriptErrorsSuppressed = true;
32             this.wb01.Navigate(url);
33             bgWork.RunWorkerAsync();
34         }
35
36         private void bgWork_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
37         {
38             string search_id = "input";
39             string search_value = "天安门";
40             string btn_id = "search-button";
41             HtmlDocument doc = this.wb01.Document;
42             HtmlElement search = doc.GetElementById(search_id);
43             search.SetAttribute("value", search_value);
44             HtmlElement btn = doc.GetElementById(btn_id);
45             btn.InvokeMember("click");
46         }
47
48         private void bgWork_DoWork(object sender, DoWorkEventArgs e)
49         {
50             compWait();
51         }
52
53         private void compWait()
54         {
55             while (!isLoadOk)
56             {
57                 Thread.Sleep(500);
58             }
59         }
60
61         private void wb01_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
62         {
63             this.wb01.Document.Window.Error += new HtmlElementErrorEventHandler(Window_Error);
64             if (this.wb01.ReadyState == WebBrowserReadyState.Complete)
65             {
66                 isLoadOk = true;
67             }
68             else
69             {
70                 isLoadOk = false;
71             }
72         }
73
74         private void Window_Error(object sender, HtmlElementErrorEventArgs e)
75         {
76             e.Handled = true;
77         }
78     }
79 }

备注

所谓的坚持,不过是每天努力一点点!!!

原文地址:https://www.cnblogs.com/hsiang/p/12070950.html

时间: 2024-10-29 19:11:29

C# 模拟浏览器并自动操作的相关文章

httpClient模拟浏览器登陆之谜

httpClient能够模拟浏览器进行自动登陆,但是如果页面上加了一个小小的验证码,自动登陆就会变的非常非常之复杂. 下面我们讨论的问题,都是不考虑有验证码等防止自动化登陆的情况下进行处理. 利用httpClient进行一个简单的登陆示例: packagetest.ffm83.commons.httpClient; importjava.util.ArrayList; importjava.util.List; importorg.apache.http.HttpEntity; importor

splinter python浏览器自动化操作,模拟浏览器的行为

Splinter可以非常棒的模拟浏览器的行为,Splinter提供了丰富的API,可以获取页面的信息判断当前的行为所产生的结果 最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有不少介绍,例如使用pamie,但是只是支持IE,而且项目也较久没有更新了.还 有就是利用selenium,可支持多种浏览器.网上资料比较多.经过比较,我选择了Splinter模块,因为利用Splinter开发浏览器自动化操 作,编写代码比较简单. 一.Splinter的安装 Splinter的使用必修依

python下selenium模拟浏览器基础操作

1.安装及下载 selenium安装: pip install selenium  即可自动安装selenium geckodriver下载:https://github.com/mozilla/geckodriver/releases Chromedriver下载:http://npm.taobao.org/mirrors/chromedriver/ 2.保存路径 将下载好的geckodriver以及Chromedriver解压到桌面,打开我的电脑,找到Python文件夹中anancode文件

爬虫-使用模拟浏览器操作(截取网页)

最近遇到一个问题就是,如何模拟真实浏览器行为然后截取显示的网页. 方案 模拟登陆网站或者直接使用cookie登陆. 对指定页面按钮进行点击刷新页面,截取网页. 我们使用selenium库来操作浏览器驱动,即执行浏览器相应的驱动命令,实现相应的浏览器操作. 准备工作 selenium库 浏览器自动化测试框架,其作用是通过操作浏览器驱动来控制浏览器行为,达到模拟真实用户操作浏览器的效果.原理为自动化测试python脚本-->浏览器driver -->浏览器.官网 python中文文档 python

php中curl模拟浏览器来传输数据

cURL可以使用URL的语法模拟浏览器来传输数据, 因为它是模拟浏览器,因此它同样支持多种协议,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP等协议都可以很好的支持,包括一些:HTTPS认证,HTTP POST方法,HTTP PUT方法,FTP上传,keyberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证,下载文件断点续传,上传文件断点续传,http代理服务器管道,甚至它还支持IPv6,scoket5代

CURL PHP模拟浏览器get和post

模拟浏览器get和post数据需要经常用到的类, 在这里收藏了几个不错的方法 方法一 <?php define ( 'IS_PROXY', true ); //是否启用代理 /* cookie文件 */ $cookie_file = dirname ( __FILE__ ) . "/cookie_" . md5 ( basename ( __FILE__ ) ) . ".txt"; // 设置Cookie文件保存路径及文件名 /*模拟浏览器*/ $user_a

【转】C# winform 加载网页 模拟键盘输入自动接入访问网络

[转]C# winform 加载网页 模拟键盘输入自动接入访问网络 声明: 本文原创,首发于博客园 http://www.cnblogs.com/EasyInvoice/p/6070563.html 转载请注明出处. 背景: 由于所在办公室网络限制,笔者每天都使用网络都要先连接无线网.如下图,输入授权用户信息登录后才能使用WIFI. 丧心病狂的是该网页Cookie 过期时间为24小时,所以每天重复以下动作:打开浏览器 -> 手动输入 工号密码.密码 -> 点击"登录"按钮.

web爬虫讲解—Scrapy框架爬虫—Scrapy模拟浏览器登录—获取Scrapy框架Cookies

模拟浏览器登录 start_requests()方法,可以返回一个请求给爬虫的起始网站,这个返回的请求相当于start_urls,start_requests()返回的请求会替代start_urls里的请求 Request()get请求,可以设置,url.cookie.回调函数 FormRequest.from_response()表单post提交,第一个必须参数,上一次响应cookie的response对象,其他参数,cookie.url.表单内容等 yield Request()可以将一个新

PHP curl模拟浏览器抓取网站信息

curl是一个利用URL语法在命令行方式下工作的文件传输工具. 官方解释 curl是一个利用URL语法在命令行方式下工作的文件传输工具.curl是一个利用URL语法在命令行方式下工作的文件传输工具.它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP.curl同样支持HTTPS认证,HTTP POST方法, HTTP PUT方法, FTP上传, kerberos认证, HTTP上传, 代理服务器, cookies,