delphi 操作 TWebBrowser 实现自动填表(JQuery脚本与 OleVariant 方法)
版本:DELPHI XE8
操作交通银行信用卡申请表单(2016-03-23),网址如下:
https://creditcardapp.bankcomm.com/applynew/front/apply/new/identity.html
本次操作的难点是“省份”与“城市”这两个<select>标签,当选择了“省份”时,“城市”会自动变更。
但,用普通的方法去改变“省份”的值,不能触发“城市”自动更新事件。

经过尝试,发现用JQUERY脚本可以达到效果。代码如下:

var
BDoc: IHTMLDocument2; //需要 USES MSHTML
sJs1: string;
sJs2: string;
begin
BDoc := WebBrowser1.Document as IHTMLDocument2; sJs1 := '$("#mrm_ddlProvince").find("option").eq(14).attr("selected","selected");';
sJs1 := sJs1 + '$("#mrm_ddlProvince").find("option").eq(14).change();'; sJs2 := '$("#mrm_ddlCity").find("option").eq(3).attr("selected","selected");';
sJs2 := sJs2 + '$("#mrm_ddlCity").find("option").eq(3).change();'; BDoc.parentWindow.execScript(sJs1, 'JavaScript');
BDoc.parentWindow.execScript(sJs2, 'JavaScript'); end;

另外,再介绍一种操作网页元素的方法。

var
BDoc: IHTMLDocument2;
e: OleVariant;
s: string;
begin
BDoc := WebBrowser1.Document as IHTMLDocument2;
e := BDoc.all.item('元素的ID', 0); // 假设此元素是一个 </A>标签
s := e.href; //这个是强制取 href 这个属性的值,也可以是一个函数,当然你也可以胡乱写一个,编译时是不会出错的。
// 当 IHTMLELEMENT 没有定义这些元素时,就可以用此“万能”方法。
ShowMessage(s);
e.href:='www.xxx.com'; //你也可以给 href 赋值
end;

TWebBrowser 与 IE 同为一源,如果不追求集成效果,也可以直接去操作IE,只需要事先获取到IE页面的 IHTMLDocumnet2 接口就可以了。
http://www.cnblogs.com/lackey/p/5310212.html
delphi 操作 TWebBrowser 实现自动填表(JQuery脚本与 OleVariant 方法)的更多相关文章
- 【转】第5篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+委托回调方法分析
		
作者: 牛A与牛C之间 时间: 2013-11-19 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第5篇:Xilium CefGlue 关于 CLR Object 与 JS ...
 - 黄聪:WebBrowser执行和安装jQuery脚本(IEBrowse)
		
上一文章说明了如何让 js 脚本访问 .NET 中的类, 这次希望给大家说明一下在任意页面中安装 jQuery 脚本, 并操作页面上的元素. 其实在第一篇关于 IEBrowser 的文章当中, 已经有 ...
 - 自动监控tomcat脚本并且执行重启操作
		
#!/bin/sh # func:自动监控tomcat脚本并且执行重启操作 # author:reed # date:// # 定义环境变量 MYPATH=/usr/local/jdk/bin exp ...
 - delphi WebBrowser的使用方法详解(四)-webbrowser轻松实现自动填表
		
webbrowser轻松实现自动填表 步骤如下: 第一步:获取网页 调用Webbrowser 的Navigate系列函数.等待网页装载完成,得到document对象. 在调用 webBrowser. ...
 - delphi操作xml学习笔记 之一 入门必读
		
Delphi 对XML的支持---TXMLDocument类 Delphi7 支持对XML文档的操作,可以通过TXMLDocument类来实现对XML文档的读写.可以利用TXMLDocum ...
 - 速成KeePass全局自动填表登录QQ与迅雷(包括中文输入法状态时用中文用户名一键登录)
		
原文:http://bbs.kafan.cn/thread-1637531-1-1.html 使用目的:1 网页和本地客户端登录一站式解决2 通过KeePss修改密码和登录更方便,可以复制粘贴,省了输 ...
 - Selenium2学习-014-WebUI自动化实战实例-012-Selenium 操作下拉列表实例-div+{js|jquery}
		
之前已经讲过了 Selenium 操作 Select 实现的下拉列表:Selenium2学习-010-WebUI自动化实战实例-008-Selenium 操作下拉列表实例-Select,但是在实际的日 ...
 - 【转】第6篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+自动反射方法分析
		
作者: 牛A与牛C之间 时间: 2013-11-21 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第6篇:Xilium CefGlue 关于 CLR Object 与 JS ...
 - linux中FTP自动备份VPS脚本
		
服务器多了,网站也越来越多,总觉得不整个备份心里放不下心,并且有好几次rm的操作失误,造成难以挽回的损失.并且大多数的VPS提供商是不提供自动备份功能或者此功能收费价格略高.所以自己还是有必要把这个工 ...
 
随机推荐
- 通过Alexa API获取Alexa排名
			
我们通会用Alexa的网站(或其它站长工具网站)来栓查我们的网站流量排名,这样就必须去那些网站.实际上,可以通过Alexa XML API 获取网站的Alexa相关的数据(XML格式的),再使用XM ...
 - Linux释放内存
			
在Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好.但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空间影响性能,此时就需要执行释放内存(清理缓存)的操作了. ...
 - KL25用SPI操作nor flash
			
KL25的SPI连接一个nor flash.该flash型号为FM25F04,支持SPI的模式0和模式3,要求高位先发送,在上升沿采集数据. 通常,SPI有4种模式,取决于CPOL与CPHA如何配置. ...
 - C语言中typedef
			
一.基本概念剖析 ])(int, char*); //#1 ]) (void (*)()); //#2 ]; //#3 .C语言中函数声明和数组声明.函数声明一般是这样: int fun(int, d ...
 - 论文:network embedding
			
KDD2016: network embedding model: deep walk(kdd 2014): http://videolectures.net/kdd2014_perozzi_deep ...
 - IOS 掉用系统发短信
			
#import <MessageUI/MessageUI.h> MFMessageComposeViewControllerDelegate #pragma mark - 调用ios系统短 ...
 - 了解Serialization
			
对象的串行化(Serialization) 一.串行化的概念和目的 1.什么是串行化 对象的寿命通常随着生成该对象的程序的终止而终止.有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复.我们把 ...
 - “玲珑杯”郑州轻工业学院第八届ACM程序设计大赛暨河南高校邀请赛-正式赛(总结)
			
这次轻院校赛,我们去了五个队,怀着打酱油的心态早早爬起来坐上校车出发了,由于昨晚室友打游戏,以及看视频大笑...没睡好,快1点才睡着,感觉特别困,车上没地方,睡不着,就在车上闭目养神,由于在新校区,不 ...
 - Objective C - UIColor
			
UIColor+Hex.h #import <UIKit/UIKit.h> @interface UIColor (Hex) + (UIColor *) colorWithHexStrin ...
 - putty保持连接不自动段开
			
经常在网上看到有人说自己利用putty工具登录服务器总是连接不上,这样的情况自己在刚接触putty时也遇到过.在 Connection 里面有个 Seconds between keepaliaves ...