webbrowser获取无ID无Name控件并模拟点击
常见的获取控件并点击(自动登录):
- var txtUserID = wbsTask.Document.All["userName"];
- var txtPsd = wbsTask.Document.All["password"];
- var txtVrf = wbsTask.Document.All["code"];var btnSubmit = wbsTask.Document.All["btnSubmit"];
- var code = ReadLoginVerifyCode();
- var userInfo = cboAccount.ComboBox.SelectedValue as UserInfo;
- if (userInfo == null) { MessageBox.Show("获取用户信息失败!"); return; }
- txtUserID.SetAttribute("value", userInfo.UserID);
- txtPsd.SetAttribute("value", userInfo.Password);
- txtVrf.SetAttribute("value", code);if (string.IsNullOrWhiteSpace(code)) return;
- btnSubmit.InvokeMember("click");//自动提交
特殊需求:查找webbrowser页面上的一个无ID无Name的A控件,后台模拟点击事件。
初始代码:
- var b = wbsTask.Document.Body.InnerText.Contains("XXX");
- if (!b) return false;
- foreach (HtmlElement he in wbsTask.Document.GetElementsByTagName("a"))
- {
- if (he.InnerText == "XXX")
- {
- he.InvokeMember("click");
- }
- }
最后发现无法引发click事件,而a处的代码为:
- <a href="javascript:;" onclick="dialog(650,450,'zzz','../../dialog/sss.aspx?id=bbb');return false;" class="link_t">XXX</a>
也就是说click事件调用了一个javasript函数。
为毛没有执行he.InvokeMember("click")这句呢?我百思不得其解。附带说明,上面的代码是在documentComplete事件时调用的,所以页面加载已经完成。
在网上搜寻解决方案,得几种提示
提示一:html代码已经加载完毕,但js还没有加载完毕,解决方案timer一下。
- if (he.InnerText == "XXX")
- {
- new Action(() =>
- {
- System.Threading.Thread.Sleep();
- new Action(() => he.InvokeMember("click")).InvokeRun(this);
- }).RunThread();
- }
这里的InvokeRun(this)是多线程回调,RunThread新开线程执行代码。测试结果:无效--------.
提示二:click变Click或onclick,无效。
提示三:
- if (he.InnerText == "XXX")
- {
- wbsTask.Document.Focus();
- IHTMLElement nativeElement = he.DomElement as IHTMLElement;
- nativeElement.click();
- }
测试结果:无效*-----
最终解决方案:
- if (he.InnerText == "XXX")
- {
- var obj = he.DomElement;
- var mi = obj.GetType().GetMethod("click");
- mi.Invoke(obj, new object[]);
- }
成功搞定!
webbrowser获取无ID无Name控件并模拟点击的更多相关文章
- 解决CPC撰写文档报错问题“无法获取“AxforApplication”控件的窗口句柄。不支持无窗口的 ActiveX 控件”
最近公司需要把官方CPC电子申请移植到项目中,在移植完成后,撰写文档总是出现“无法获取“AxforApplication”控件的窗口句柄.不支持无窗口的 ActiveX 控件”,另楼主头疼很久,网上寥 ...
- Upload无刷新上传控件
Upload无刷新上传控件 最近在做一个web开发项目 ,用到upload上传控件 ,由于c#提供的控件局限性太大 ,所以就自己从国外大牛 手里借鉴一下. 该控件可以判断上传的文件是否已存在 ,减少了 ...
- 学习笔记找到多个具有相同 ID“_header”的控件,FindControl 要求控件具有唯一的 ID.
解决 找到多个具有相同 ID“_header”的控件,FindControl 要求控件具有唯一的 ID. private void DisplayHotBooks() { //获取 ...
- C++ 一个程序获取另一个程序Edit控件的内容
//一个程序获取另一个程序Edit控件的内容 //根据指定程序的标题名获取改程序窗口的句柄 HWND hWnd=::FindWindow(NULL,"zhang001"); if( ...
- ASP.NET 获取不同frame中的控件
最近在做网站时遇到一个问题,需要获取不同frame中的控件,请教了一些同事,他们都说是无法取到的, 在网上查找了很多资料,找到了解决方法,现在整理一下当初的解决思路: 1.我需要在mainFrame中 ...
- Windows获取其他进程中Edit控件的内容
最近做的MFC项目中,有个获取其他进程中Edit控件内容的需求,本来以为是个很简单的问题,但是来来回回折腾了不少时间,发博记录一下. 刚开始拿到这个问题,很自然的就想到GetDlgItemText() ...
- Delphi 获取当前鼠标下的控件内容
Delphi 获取当前鼠标下的控件内容 主要函数: GetCursorPos://获取鼠标的位置 WindowFromPoint://获取制定point下的handle GetClassName:// ...
- WebBrowser无法显示招商银行password输入控件的问题
本文由CharlesSimonyi发表于CSDN博客:http://blog.csdn.net/charlessimonyi/article/details/30479131转载请注明出处 之前就看到 ...
- 获取Delphi焦点所在的控件及通过控件名称访问控件
方法一: Var I: Integer; Begin For I := To ComponentCount - Do //获取组件数量 Begin If Components[I] Is TWinCo ...
随机推荐
- python .dcm文件读取,并转化为.jpg格式
.dcm文件是DICOM(Digital Imaging and Communications in Medicine)即医学数字成像和通信中记录医学图像和相关信息的文件,在用于医学图像处理的时候我们 ...
- shell curl 下载图片并另存为(重命名)
curl -o fuck.png http://img30.360buyimg.com/imgzone/jfs/t19711/232/1837927836/150222/e4cd87bb/5ad990 ...
- Mac使用技巧总结-如何独立设置Mac触摸板方向和鼠标滚轮方向?
Mac使用技巧总结 如何独立设置Mac触摸板方向和鼠标滚轮方向? 苹果Macbook的使用者都知道,Mac自带的触控板非常好用,不仅支持多手势操控,而且手感极佳,使用流畅. 但是如果对鼠标的焦距有高有 ...
- cent os 6.5+ambari+HDP集群安装
1. 搭建一个测试集群,集群有4台机器,配置集群中每一台机器的/etc/hosts文件: [root@nn .ssh]# cat /etc/hosts 127.0.0.1 localhost loca ...
- Mysql Server系统架构介绍
总的来说,MySQL可以看成是二层架构. 第一层我们通常叫做SQL Layer,在MySQL数据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断,sql解析,执行计划优化,query ...
- hdu 2544 最短路(两点间最短路径)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2544 方法一:dijkstra算法,求两点之间最短路径. /*********************** ...
- debian8.5安装sublime text3
在官网www.sublimetext.com下载安装包 我这里用的是Ubuntu 64 bit版. 下载后使用su命令切换到root账户. 执行安装命令 dpkg -i sublime-text*.d ...
- 在 Yosemite 装 Jave 的方法. ( 适用于 OS X 10.10 )
因为并非所有用户都用得着 Java ,所以在默认状态下 OS X 不预装 Java , 如果你需要的话可以手动安装. 1. http://support.apple.com/kb/DL1572到苹果官 ...
- Zookeeper session超时
1.会话概述 在ZooKeeper中,客户端和服务端建立连接后,会话随之建立,生成一个全局唯一的会话ID(Session ID).服务器和客户端之间维持的是一个长连接,在SESSION_TIMEOUT ...
- Lambda表达式常用代码示例
Lambda表达式常用代码示例 2017-10-24 目录 1 Lambda表达式是什么2 Lambda表达式语法3 函数式接口是什么 3.1 常用函数式接口4 Lambdas和Streams结合使 ...