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 ...
随机推荐
- 使用base64编码的好处
在项目中,将报文进行压缩.加密后,最后一步必然是使用base64编码,因为base64编码的字符串,更适合不同平台.不同语言的传输: 它不受其他编码的影响,仍然保持不变,这点很有意义,如下验证: St ...
- [转]Java的文件读写操作
file(内存)----输入流---->[程序]----输出流---->file(内存) 当我们读写文本文件的时候,采用Reader是非常方便的,比如FileReader,InputStr ...
- [转]IDEA 导出自己的jar包 并且在另一个工程中引用
1.导出jar包 1.1 idea导出jar包不如eclipse方便,但是熟练了也很容易操作 1.2 File -> Project Settings -> Artifacts(艺术品) ...
- processing fill()和stroke()函数
在procesiing有两个基本的函数,fill()和stroke()函数,这两个函数分别用来控制形状填充颜色和形状轮廓的颜色,fill()和stroke()可以接受的参数的个数为1,2,3.当参数的 ...
- [nginx]盗链和防盗链场景模拟实现
盗链环境模拟 http://www.daolian.com/index.html 这个页面盗用http://www.maotai.com/qq.jpg这个站点页面的图. <!doctype ht ...
- 读取JPG图片的Exif属性(一) - Exif信息简介
https://blog.csdn.net/fioletfly/article/details/53605959 https://blog.csdn.net/a_big_pig/article/det ...
- 菜鸟学Java(六)——简单验证码生成(Java版)
验证码大家都知道,它的作用也不用我多说了吧.如果不太清楚请参见百度百科中的解释,一般验证码的生成就是随机产生字符(数字.字母或者汉字等),然后将这些生成的字符绘制成一张图片,再在图片上加上一些干扰元素 ...
- react-scripts的css modules
用create-react-app创建的项目基于react-scripts内建支持css modules,需要把css文件名改成filename.module.css,导入方式需要改成: import ...
- (转)在Docker中运行Java:为了防止失败,你需要知道这些
转自:https://mp.weixin.qq.com/s?__biz=MzA5OTAyNzQ2OA==&mid=2649693848&idx=1&sn=4e9ef7e2a9d ...
- 用户手势检测-GestureDetector使用详解
一.概述 当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等. 一般情况下,我们知道View类有个View.OnTouchListener内部接口,通过重写他的o ...