WebBrowser的基本功能就是访问网页,但是由于它本身就不在主线程上面,所以程序判断它什么时候加载完成了,比较麻烦。为此我集合从网上找到的内容,做了一个例子。

其中包括了给WebBrowser设置cookies,点击WebBrowser中的button等功能。

  [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData)private delegate void invokeDelegate();public void bk(){string url = "http://*******"//任意网址//添加cookiesfor (int i = 0; i < cookies.Count; i++){Cookie c = cookies[i];InternetSetCookie(url, c.Name, c.Value);}webBrowser2.Navigate(url);webBrowser2.ScriptErrorsSuppressed = true;while (true){Application.DoEvents();if (webBrowser2.ReadyState != WebBrowserReadyState.Complete){break;}}invokeDelegate del = new invokeDelegate(StartMethod);IAsyncResult ir = del.BeginInvoke(AddComplete, null);}    /// <summary>/// 委托异步/// </summary>/// <param name="result"></param>private void AddComplete(IAsyncResult result){invokeDelegate handler = (invokeDelegate)((AsyncResult)result).AsyncDelegate;handler.EndInvoke(result);}

  

 上面的代码是在webBrowser2中加载网页,使用了委托异步的方法。

 private void StartMethod(){Thread.Sleep(7000);this.Invoke(new Action(() =>{HtmlDocument cd = webBrowser2.Document;string doc = webBrowser2.DocumentText;           int count = 0;HtmlElementCollection dhl1 = cd.GetElementsByTagName("input");//GetElementsByTagName得到的是点击的标记元素名称foreach (HtmlElement item in dhl1){string elemName = item.GetAttribute("name");if (elemName != null || elemName.Length > 0){if (elemName == "btnclick"){item.InvokeMember("click");}                    }}}));}

  开始加入Thread.Sleep(7000);是为了给webBrowser2加载页面的时间,7s足够页面加载完成。然后在获取页面的内容,并找到btnclick进行点击。

最后贴出从txt中获取cookies的方法:

 public static CookieCollection getCookies(string path){string cook = ReadTxt(path).Trim();CookieCollection cookies = new CookieCollection();string[] cookstr = cook.Split(';');foreach (string str in cookstr){string[] cookieNameValue = str.Split('=');cookieNameValue[1] = cookieNameValue[1].Trim().ToString().Replace(",", "%2C");Cookie ck = new Cookie(cookieNameValue[0].Trim().ToString(), cookieNameValue[1].Trim().ToString());ck.Domain = "*******";//Host地址,可从浏览器上查看cookies.Add(ck);}return cookies;}

  这样就可以实现自动加载某个网页并点击页面上的按钮了。

转载于:https://www.cnblogs.com/paidaxing/p/4597565.html

c#WebBrowser进阶相关推荐

  1. 正式压力测试:locust进阶,超简单搭建生产级locust集群

    locust进阶,搭建生产级locust集群 本教程基于k8s集群搭建,使用helm作为包管理工具 通过helm安装locust

  2. 伍六七带你学算法 进阶篇-生命游戏

    有趣的算法题–生命游戏 难度-中等 根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机. 想要体验生命游戏的小伙伴可以到这里-->生命游戏 进入 ...

  3. NLP进阶之(七)膨胀卷积神经网络

    NLP进阶之(七)膨胀卷积神经网络 1. Dilated Convolutions 膨胀卷积神经网络 1.2 动态理解 1.2.2 转置卷积动画 1.2.3 理解 2. Dilated Convolu ...

  4. js进阶 13-5 jquery队列动画如何实现

    js进阶 13-5 jquery队列动画如何实现 一.总结 一句话总结:同一个jquery对象,直接写多个animate()就好. 1.什么是队列动画? 比如说先左再下,而不是左下一起走 2.怎么实现 ...

  5. 一个java高级工程师的进阶之路【转】

    一个java高级工程师的进阶之路[转] 宏观方面 一. JAVA.要想成为JAVA(高级)工程师肯定要学习JAVA.一般的程序员或许只需知道一些JAVA的语法结构就可以应付了.但要成为JAVA(高级) ...

  6. SQL Server Extended Events 进阶 3:使用Extended Events UI

    开始采用Extended Events 最大的阻碍之一是需要使用Xquery和XML知识用来分析数据.创建和运行会话可以用T-SQL完成,但是无论使用什么目标,数据都会被转换为XML.这个限制在SQL ...

  7. 《OpenCV3编程入门》学习笔记5 Core组件进阶(六)输入输出XML和YAML文件

    第5章 Core组件进阶 5.6 输入输出XML和YAML文件 5.6.1 XML和YAML文件 XML和YAML是使用非常广泛的文件格式,可以利用XML或者YAML式的文件存储和还原各种数据结构,还 ...

  8. 《OpenCV3编程入门》学习笔记5 Core组件进阶(五)离散傅里叶变换(DFT)

    第5章 Core组件进阶 5.5 离散傅里叶变换(Discrete Fourier Transform,DFT) 5.5.1 离散傅里叶变换原理 1.对一张图像使用傅里叶变换就是把它分解成正弦和余弦, ...

  9. 《OpenCV3编程入门》学习笔记5 Core组件进阶(四)图像对比度、亮度值调整

    第5章 Core组件进阶 5.4 图像对比度.亮度值调整 5.4.1 理论依据 1.算子:一般图像处理算子都是一个函数,接受一个或多个输入图像,并产生输出图像 2.算子一般形式: 3.点操作(poin ...

最新文章

  1. python线性回归实例_python 线性回归示例
  2. HBase原理解析(转)
  3. Python自动化之模板继承和cookie
  4. 百分之九十的人不知道?在Python中f-string的几个技巧
  5. java web 截图_如何以Java实现网页截图技术
  6. python Json的一点收获,自定义序列化方法
  7. 前端学习(1796):前端调试之html/css介绍
  8. jdk 安装 linux环境
  9. Visual Studio 2008 每日提示(六)
  10. AngularJS 动态模板
  11. 用pcl读ply文件_一分钟详解PCL中点云配准技术
  12. 开课吧课堂之何时调用构造函数
  13. SSDP:DDoS***的“新宠”
  14. c语言中的memset函数与bzero函数
  15. python同构数_用c语言求1到1000的同构数_后端开发
  16. 怎么进入计算机网络权限设置方法,电脑怎么设置网络访问权限保护共享文件安全...
  17. 【CVPR2022】论文阅读:Revisiting Skeleton-based Action Recognition
  18. u盘删不掉Android文件夹,U盘文件删不掉怎么办完全解决教程
  19. php输入为空,ecshop搜索框内容为空提示用户输入内容
  20. 如何官方的发布通知(互亿无线)?

热门文章

  1. Oracle 添加RAC数据库集群节点(一)
  2. hi3516a的文件系统错误
  3. iphone通讯录批量删除_iPhone通讯录删除了如何恢复?用对方法快速找回,亲测有效!_...
  4. 了解下RDF 主要元素
  5. stm32对c语言要求高吗?c语言什么水平可以学stm32?
  6. 计算机php外文翻译,php外文翻译.doc
  7. mysql文件头标记_通过文件头准确识别PHP上传的文件类型 ( 一 )
  8. PTA基础编程题目集-7-32 说反话-加强版
  9. HDU2899(二分查找+or+模拟退火算法)
  10. 内核aio_Java面试题BIO、NIO、AIO有什么区别?