Delphi检查GetElementByID返回值的有效性
2016-03-26 09:15
609 查看
Delphi 可以像JavaScript 脚本语言一样使用GetElementByID方法访问网页中指定ID的元素,一般要配合TWebBrowser组件使用。首先使用TWebBrowser浏览网页,然后访问网页的元素,例如:
procedure TForm1.Button1Click(Sender: TObject);
var
aElement: OleVariant;
begin
aElement := WebBrowser1.OleObject.Document.GetElementByID('btnLogin');
aElement.value := '登录按钮';
aElement.click;
end;
如果网页中存在ID为“btnLogin”的按钮,则以上代码没有任何问题,如果不存在,则对aElement进行的设置值和点击操作都将引发异常,所以应该对GetElementByID的返回值进行检查。但是对OleVariant类型变量的有效性进行检查却非常困难,通过使用VarType函数对aElement进行类型检查可以知道该变量是varDispatch类型的,所以可以转换成接口进行检查返回值是否有效,完整代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
aElement: OleVariant;
begin
aElement := WebBrowser1.OleObject.Document.GetElementByID('btnLogin');
if IDispatch(aElement) <> nil then //对返回值进行有效性检查
begin
aElement.value := '登录按钮';
aElement.click;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
aElement: OleVariant;
begin
aElement := WebBrowser1.OleObject.Document.GetElementByID('btnLogin');
aElement.value := '登录按钮';
aElement.click;
end;
如果网页中存在ID为“btnLogin”的按钮,则以上代码没有任何问题,如果不存在,则对aElement进行的设置值和点击操作都将引发异常,所以应该对GetElementByID的返回值进行检查。但是对OleVariant类型变量的有效性进行检查却非常困难,通过使用VarType函数对aElement进行类型检查可以知道该变量是varDispatch类型的,所以可以转换成接口进行检查返回值是否有效,完整代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
aElement: OleVariant;
begin
aElement := WebBrowser1.OleObject.Document.GetElementByID('btnLogin');
if IDispatch(aElement) <> nil then //对返回值进行有效性检查
begin
aElement.value := '登录按钮';
aElement.click;
end;
end;
相关文章推荐
- intraweb 11.0.63 for delphi7 破解
- delphi 回调函数
- Delphi基础Write写入结构体到文件(使用 file of myrecord就行了,真简单)
- dwExStyle和dwStyle的说明(Delphi SDK窗口)
- UDP协议的两个主要方法sendto和recvfrom详解
- delphi POS机无驱动打印
- delphi 实体类 JSON
- Delphi三层开发小技巧:TClientDataSet的Delta妙用
- delphi三层结构常出现的问题和解决方案
- Delphi使用大图标编译程序
- Delphi实现窗口一直在桌面工作区内显示(重写WM_WINDOWPOSCHANGING消息)
- delphi 调用 java
- Delphi_02_Delphi程序的结构
- Delphi_01_控制台版HelloWorld
- Delphi 中实现判断某个外部程序是否运行(如果运行则执行一个命令否则执行一个命令)
- Delphi Windows API判断文件共享锁定状态(使用OpenFile来判断)
- Delphi 中 FindWindow 和 FindWindowEx 找到外部进程,然后发送消息(比如最大化)
- move函数的用法
- Delphi调用CreateProcess创建进程
- How to allow new records to be inserted, but prevent existing data from being edited