C# webbrowser,c# webbrowser触摸,C#的WebBrowser的操作与注意事项介绍

C# webbrowser,c# webbrowser触摸,C#的WebBrowser的操作与注意事项介绍

C#的网络浏览器的操作与注意事项介绍,需要的朋友可以参考一下

1.在Winform里使用网络浏览器,要对Form1.cs添加一些东西: 1.1 在"公共分部类表单1:表单"上方,添加:

复制代码代码如下:[PermissionSet(SecurityAction .Demand,Name='FullTrust')][System .运行时。互操作服务。comvisibleattribute(true)]1.2在表格一的显示事件中,添加:

复制代码代码如下:这个. UI _网页浏览器ObjectForScripting=this

2.由于网络浏览器是放在Winform界面中,由界面线程(主线程)管理,执行渲染也是主线程,因此,不能把业务逻辑放在主线程中,应该另开一个线程,执行业务逻辑。并通过引起来与网络浏览器交互。

例子:

复制代码代码如下:私有void Form1 _ Shown(对象发送方,EventArgs e){这._thread_mainLogic=新线程(这个.线程函数_ main logic);这个. thread_mainLogic .start();}

私有void thread function _ main logic(){ Debugger .日志(0,'',' \r\n开始执行业务逻辑\ r \ n ');这个invoke(新动作(()={ this。网络浏览器。导航(' http://www。百度一下。com’);} ) );//通过引起来与网络浏览器交互.}

3.浏览指定网址。注意,此方法为异步方法,需要手动同步。

复制代码代码如下://以下方法不是线程安全方法private AutoResetEvent _ threadControlEvent _ Tool _ webBrowser _ Navigate=null;

私有void Tool _ webBrowser _ Navigate(string arg _ URL){ this ._ threadControlEvent _ Tool _ webBrowser _ Navigate=new AutoResetEvent(false);这个invoke(新动作(()={ this。网络浏览器。文档完成=webBrowser _文档完成_工具_ webBrowser _导航;这个。网络浏览器。navigate(arg _ URL);}));这个threadControlEvent _ Tool _ webBrowser _ Navigate .wait one();这个threadControlEvent _ Tool _ webBrowser _ Navigate .close();这个threadControlEvent _ Tool _ webBrowser _ Navigate .dispose();}

void webBrowser _ document completed _ Tool _ webBrowser _ Navigate(object sender,webBrowser documentcompletedeventargs e){ this。网络浏览器。文档完成-=webBrowser _ document completed _ Tool _ webBrowser _ Navigate;这个threadControlEvent _ Tool _ webBrowser _ Navigate .set();}

4.根据身份证明获取按钮,并点击它:(也可作用于网页中的统一资源定位器链接)

复制代码代码如下://假设网页里的按钮,ID为BTN的html元素element _ BTN=null;这个调用(新动作(()={ element_btn=this .UI _网页浏览器文件。所有[' BTN '];}));//获取element_btn .调用成员(“Click”);//点击,此方法为同步方法,可安全使用

5.根据身份证明获取输入框,并输入内容

复制代码代码如下://假设网页里的输入框,ID为“input”html元素输入=null这个。调用(新动作(()={ input=this .UI _网页浏览器文件。all[' input '];} ) );//获取输入InnerText=' 123//输入'123'。此方法不为同步方法,需要使用下文的等待_安全模式方法工具_等待_安全模式();//实现在下文

6.根据身份证明获取形式,并提交(提交)

复制代码代码如下://假设网页里的表单,ID为“form 2”html元素form 2=null这个。调用(新操作(()={ form2=this .UI _网页浏览器文件。forms[' form 2 '];} ) );//获取表单_提交调用成员(' submit ');//提交表格2里的内容。此方法为同步方法,可安全使用。

7.根据身份证明获取复选框,并设置为已选中(已检查)

复制代码代码如下://假设网页里的复选框,ID为“复选框5”html元素复选框5=空;这个调用(新操作(()={ checkBox5=this .UI _网页浏览器文件。全部['复选框5 '];} ) );//获取复选框5。SetAttribute('Checked ',' true ');//设置为已选中。此方法为同步方法,可安全使用。

8.根据元素的已知属性,来查找该元素

复制代码代码如下://假设网页里,有且仅有这样的一个元素:它有一个名为"价值"的属性,属性值为12345 ' bool is find=false HtmlElementCollection HtmlElementCollection=null;这个invoke(new Action(()={ htmlElementCollection=this。网络浏览器。文档。所有;} ) );//获取集合HtmlElement resultElement=null

foreach(htmlElementCollection中的html元素当前元素)//在集合中遍历所有元素来寻找{ if (currentElement .get属性(' value ')==' 12345 '){ is find=true;resultElement=currentElement打破;}}

如果(!isFind ){对没有找到的情况进行处理;}

9.对网页中的组合框进行设置。注意,以下代码有问题,请勿使用。由于SetAttribute是一个没有回应的API,因此建议使用射流研究…来进行设置。下文中,让网络浏览器执行射流研究…代码,可以做到有回调。

复制代码代码如下://假设网页中存在一个组合框,ID为组合框123 ',下拉菜单有两项://第一项的身份证明为1、价值为'苹果'//第二项的身份证明为2、价值为'西瓜html元素element _ comboBox=null这个invoke(new Action(()={ element _ comboBox=this。网络浏览器。文档。all[' comboBox 123 '];} ) );//获取工具_等待_安全模式();这个调用(新操作(()={ element_comboBox .设置属性("值"," 2 ");} ) );//设置为'西瓜,即value=2工具_等待_安全模式();

10.工具_等待_安全模式

复制代码代码如下:private void Tool _ Wait _ safe mode(){ bool isError=false;bool isBusy=false做{这个调用(新操作(()={ try {正忙=这个。网络浏览器。正忙;} catch(系统exception ex){ isError=true;} }));if (isError) { Thread .sleep(errorWaitTime);//建议为2秒以上。这个时间要根据机器性能来设置,必须设置长一些else { if (isBusy) { Thread .sleep(arg _ wait time);//建议为0.1秒以上。这个时间要根据机器性能来设置,可以设置短一些。} } while(isError |忙);}

11.在网页中执行射流研究…代码

由于让网络浏览器执行js,是一个异步过程,并且还需要回调,因此这个功能有些复杂。对此进行了封装,把它封装为了一个同步过程,来方便使用:

复制代码代码如下:# region private void Tool _ webBrowser _ ExecUserJSScript(string arg _ jsCodes)private AutoResetEvent _ threadControlEvent _ Tool _ webBrowser _ ExecUserJSScript _ Init=null;private AutoResetEvent _ threadControlEvent _ Tool _ webBrowser _ ExecUserJSScript _ Exec=null;private object _ return obj _ Tool _ webBrowser _ ExecUserJSScript=null;

复制代码代码如下:string jsCmdTest=' function test function(msg){ setTimeout(' window。外部的。notifycsharpcomplete(\ \ '返回内容\\');', 5000);};';object returnObj=this .tool _ webBrowser _ ExecUserJSScript(jsCmdTest,' testFunction ',新对象[] { '传入参数'});string returnStr=以字符串形式返回obj

用法例子2:

复制代码代码如下:string jsCmdTest=' function test function(){ var a=122;var b=244var c=a b窗户。外部的。notifycsharpcomplete(c);};';object returnObj=this .tool _ webBrowser _ ExecUserJSScript(jsCmdTest,' testFunction ',null);int return int=(int)return obj;

用法例子3:

复制代码代码如下:string jsCmdTest=' function测试函数(){ window。外部的。notifycsharpcomplete(null);};';object returnObj=this .tool _ webBrowser _ ExecUserJSScript(jsCmdTest,' testFunction ',null);字符串结果='js执行完毕;

总结:使用网络浏览器的两个大问题:

1.网络浏览器是调用机器上的即,因此版本、渲染的程序也就取决与工业管理学(工业工程)的版本与渲染器的程序。

2.网络浏览器的执行射流研究…等很多操作都是异步且无事件回应的,只能自己去估算一个执行时间,来等待。并且等待时间一定要大于射流研究…实际执行时间,否则后续代码会出问题。

3.目前,执行射流研究…的方式,只能通过浏览器的地址栏。地址栏是有长度限制的。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 设计一个简单的C#控制台应用程序,C#控制台程序,C# 创建控制台应用程序
  • 深入解析windows第8版,深入解析C#(第4版)
  • 数组代码,c# 数组操作,C# 数组实例介绍(图文)
  • 学会C#要多久,学会c#要多久,c#学习之30分钟学会XAML
  • 回溯法01背包问题c,回溯法求解01背包问题伪代码,C#使用回溯法解决背包问题实例分析
  • xml文件转义字符,xml转意字符,C# XML中的转义字符操作
  • winform 进度条控件,c# 进度条使用
  • winform 进度条控件,c# 进度条使用,C#使用winform实现进度条效果
  • winform backgroundworker,c# isbackground
  • winform backgroundworker,c# isbackground,C# BackgroundWorker用法详解
  • lua与c#交互,lua c#
  • lua与c#交互,lua c#,ToLua框架下C#与Lua代码的互调操作
  • linq c#,linq原理 c#
  • linq c#,linq原理 c#,c#中LINQ的基本用法实例
  • java decimal保留两位小数,sql中decimal函数保留2位小数,C#中decimal保留2位有效小数的实现方法
  • 留言与评论(共有 条评论)
       
    验证码: