delphi 单元 MSHTML 之Ihtmldocument2
delphi : Ihtmldocument2接口的利用
MSHTML是微软公司的一个COM组件,该组件封装了HTML语言中的所有元素及其属性,穿越其供给的规范接口,能够访问指定网页的所有元素.
MSHTML对象模型是由一些对象和聚集构成的.处于根部的是HTML,描写了敞开版面的1个窗口,包括一系列聚集和对象。如Frames聚集,History,Location,Navigator,Document,Vi—sum,Event对象等.其中描写涌目前客户窗口切实网页的是Document对象。由一系列的属性、措施、对象和聚集构成.其中All聚凑近包括网页中所有符号(Tag)元素,其重要的措施和属性有:
(1)Length(长度):即符号揭示的个数,能够把符号的集有会意为从0开始的一维数组,其次序按照符号在网页位置编排;
(2)Tags(符号):用于过滤出给定符号的聚集,如Doc.Al1.Tags(P)获得所有分段符号P;
(3)Item(项目):用于抉择聚凑近的某1个元素,如object.item(0)获得聚集的第1个元素,而object.item(i)获得第i+1个元素.
另外,IHTMLElement也是个常用的聚集对象,代表网页中指定符号的聚集,穿越这个聚集对象,能够获得网页上特定符号的内容.IHTMLElement有4个重要属性:
(1)InnerText:开始符号和告终符号之间的文本;
(2)InnerHTML:开始符号和告终符号之间的文本和HTML;
(3)OuterText:对象的文本;
(4)OuterHTML:对象的文本和HTML.
注意:使用前必须加入单元mshtml
演示表单提交
procedure TForm1.Button1Click(Sender: TObject);
var
Doc:IHTMLDocument2;
input:OleVariant;
userinputelement,pwdinputelement: ihtmlinputelement;
begin
doc:=webbrowser1.document as ihtmldocument2;
userinputelement:=(doc.all.item('user'(也即便网页管用户名控件的名字),0) as ihtmlinputelement);
userinputelement.value:=edit1.text;(也即便你要向网页输入的东西)
pwdinputelement:=(doc.all.item('password',0) as ihtmlinputelement);
pwdinputelement.value:=edit2.text;
input:=doc.all.item('submit',0);
input.click;
end;
如果有验证码怎么办?
Delphi自动提交网页表单和获取框架网页源码
参考:http://apps.hi.baidu.com/share/detail/32863592
这两个问题的实现原理其实是差不多的,所以放在一起介绍,单元MSHtml封装了我们需要的功能。
首先,新建一个DELPHI工程,在USES部分添加MSHtml单元的引用。
然后,在窗体上放置一个TWebBrowser控件和四个按钮。
最后,编写四个按钮的响应代码:
1. 自动提交网页表单
procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.Navigate('http://www.baidu.com');
end;
procedure TForm1.Button2Click(Sender: TObject);
var
doc: IHTMLDocument2;
oleObj: OleVariant;
begin
doc := WebBrowser1.Document as IHTMLDocument2;
if doc = nil then Exit;
oleObj := doc.all.item('wd', 0) as IHTMLElement2;
//网页有一个名为“wd”的文本框:<input type="text" name="wd" id="kw" maxlength="100">
oleObj.Value := 'Delphi'; //为文本框赋值
oleObj := doc.all.item('su', 0) as IHTMLElement2;
//网页有一个ID为“su”的按钮:<input type="submit" value="百度一下" id="su">
oleObj.Click; //点击按钮,提交表单
end;
2. 获取框架网页源码
procedure TForm1.Button3Click(Sender: TObject);
begin
WebBrowser1.Navigate('http://含有框架的网页URL');
end;
procedure TForm1.Button4Click(Sender: TObject);
var
doc, framedoc: IHTMLDocument2;
frame_dispatch: IDispatch;
ole_index: OleVariant;
i: Integer;
begin
doc := WebBrowser1.Document as IHTMLDocument2;
if doc = nil then Exit;
for i := 0 to doc.frames.length - 1 do
begin
ole_index := i;
frame_dispatch := doc.frames.item(ole_index);
if frame_dispatch = nil then Continue;
framedoc := (frame_dispatch as IHTMLWindow2).document;
if framedoc = nil then Continue;
ShowMessage(framedoc.body.innerHTML);
end;
end;
3. 获取网页所有链接
procedure TForm1.Button1Click(Sender: TObject);
var
elem: IHTMLElement;
coll: IHTMLElementCollection;
i: integer;
url, title: string;
begin
coll := (WebBrowser1.Document as IHTMLDocument2).all;
coll := (coll.tags('a') as IHTMLElementCollection);
for i := 0 to coll.Length - 1 do
begin // 循环取出每个链接
elem := (coll.item(i, 0) as IHTMLElement);
url := Trim(string(elem.getAttribute(WideString('href'), 0)));
title := elem.innerText;
ShowMessage(Format('链接标题:%s,链接网址:%s', [title, url]));
end;
end;
焦点设置
参考:http://topic.csdn.net/t/20010610/23/154240.html
当TWebbrowser中的内容是一个html文件时,可用下面的方法设置焦点,
IHTMLWindow2(IHTMLDocument2(Webbrowser1.Document).ParentWindow).focus;
但当TWebbrowser中的内容是一个本地目录时,再用上述方法设置焦点就会出错。
delphi 单元 MSHTML 之Ihtmldocument2的更多相关文章
- Delphi单元文件引用名称问题
Delphi新版本的单元文件格式变化了,如windows变成了winapi.windows,如果想在单元引用中使用简称,则需要在工程选项中配置: 这样就可以使用全名或简写来引用单元了.
- DELPHI 单元文件结构
unit Unit1; interface {接口部分开始} uses {引用单元列表,这是可选的,如果包含必须紧跟interface关键字} {接口部分声明常量/类型/变量/过程和函数,这些声明对引 ...
- Delphi单元文件之-防止程序重复执行
//工程引用此单元就能防止同时出现多个实例unit MultInst;interfaceuses Windows ,Messages, SysUtils, Classes, Forms;impleme ...
- Delphi 单元
单元(unit)是组成Pascal程序的单独的源代码模块,单元有函数和过程组成,这些函数和过程能被主程序调用.一个单元至少要有unit语句,interface,和implementation三部分,也 ...
- Delphi单元文件之-简体繁体互转
Function GBCht2Chs(GBStr: String): AnsiString; {GBK繁体转简体} Var len:integer; pGBCHTChar: PChar; ...
- Delphi窗体创建释放过程及单元文件小结(转)
Delphi窗体创建释放过程及单元文件小结 Delphi中的窗体,有模式窗体与非模式窗体两种.两种窗体的调用方式不同,模式窗体使用ShowModal显示,非模式窗体使用Show显示.当显示模式窗体的时 ...
- delphi基础篇之单元文件
Delphi单元文件 unit MainFrm; {库单元文件头} interface {接口部分由Interface开始implementation结束.声明引用的单元,常量,数据类型 ...
- Delphi WebBrowser控件的使用(大全 good)
Delphi WebBrowser控件的使用 WebBrowser控件属性:1.Application 如果该对象有效,则返回掌管WebBrowser控件的应用程序实现的自动化对象(IDis ...
- Delphi TWebBrowser
Delphi WebBrowser控件的使用 WebBrowser控件属性:1.Application 如果该对象有效,则返回掌管WebBrowser控件的应用程序实现的自动化对象(IDis ...
随机推荐
- python wave 库 读取 BytesIO 对象的注意事项
程序中遇到需要使用临时文件时,常使用内存中的 io.BytesIO() 代替实体二进制文件,以避免磁盘IO,同时免去了考虑文件名的麻烦. file = io.BytesIO() file.write( ...
- js两个数组去重后,绑定控件,并支持模糊搜索数组项以及数组互移
设计大概是这个样子的,很简单,两个div,两个互移按钮,一个搜索框,要求搜索框输入时,触发待选框的搜索项 <input class="form-control" placeh ...
- mysql5.7 基于gtid的主从复制
基本环境 版本 5.7.14 主库ip:192.168.1.100 port:3306 从库ip:102.168.1.101 port:3306 搭建注意事项 主库配置 gtid-mode=on en ...
- 牛客多校第六场-H-Pair
链接:https://ac.nowcoder.com/acm/contest/887/H来源:牛客网 题目描述 Given three integers A, B, C. Count the numb ...
- Linux 临时和永久关闭 Selinux
查看当前 Selinux 状态:getenforce 临时关闭 Selinux:setenforce 0 永久关闭 Selinux: vim /etc/sysconfig/selinux 将 SELI ...
- vue 页面回退mounted函数不执行的问题及解决方法
前言 最近做项目碰到一个很头大的问题--从a页面跳到b页面进行编辑,编辑完再返回a页面,却没走a页面的钩子函数mounted,数据没有更新 经过一番面向百度研究,终于找到了问题所在.接下来就记录一下这 ...
- CSS文本垂直居中显示
<style> .sty1 { width: 300px; height: 200px; background-color: black; text-align: center; colo ...
- 安卓Unity3d游戏的逆向破解
使用到的工具 ApkToolBox .NET Reflector Reflexil(.NET程序编辑器) 怎么判定它是Unity游戏呢 一般的路径格式是这样的assets\bin\Data\Manag ...
- Magento笔记/记录(1)
1.Magento eav_attribute表中source如何指定自定义数据来源 如果你引用的类名为yebihai_usermanage_model_entity_school你必须完整的给出地 ...
- 【JVM】符号引用和直接引用
在JVM中类加载过程中,在解析阶段,Java虚拟机会把类的二级制数据中的符号引用替换为直接引用. 1.符号引用(Symbolic References): 符号引用以一组符号来描述所引用的目标,符号可 ...