WebBrowser的用法
来源:互联网 发布:华硕最优化设置 编辑:程序博客网 时间:2024/05/16 09:11
WebBrowser是一个简单的浏览器,我们可以通过它完成很多关于网页的操作。
在Delphi中,需要引用ShDocVw和MsHtml,下面会逐渐介绍一些使用办法
创建WebBrowser
WebBrowser := TWebBrowser.Create(nil);
WebBrowser.ParentWindow := Self.Handle;
WebBrowser.Height := 100;
WebBrowser.Width := 100;
WebBrowser.Silent := true; //不会因为网页错误弹出对话框
WebBrowser.OnBeforeNavigate2 := OnNewWindow; //可屏蔽不相关的网页
WebBrowser.OnDocumentComplete := OnComplete; //流程处理的关键
打开某个页面
WerBrowser.Navigate('http://www.zixunwang.biz:8080/');
procedure OnNewWindow(...);
begin
cancel := Pos('http://www.zixunwang.biz:8080/', URL) = 0;
//屏蔽不相关的网页,在这里会屏蔽http://www.zixunwang.biz:8080/以外的网页
end;
procedure OnComplete(...);
begin
if url = 'http://www.zixunwang.biz:8080/login.aspx' then LoginProcess();
if pos('default.aspx', url) <> 0 then defaultProcess();
end;
有的时候,我们想获取网页中的元素的信息,或是想设置网页中元素的信息,那么如下代码应该是你关心的了
以下的代码是演示设置信息,函数通过遍历网页中所有元素,将符合元素设置合适的值
procedure login;
var
Doc: IHtmlDocument2;
i: Integer;
Input: IHTMLInputElement;
Item: IDispatch;
Data: String;
begin
Doc := WebBrowser.Document as IHtmlDocument2;
Data := Doc.body.innerHTML;
for i := 0 to Doc.all.length - 1 do
begin
Item := Doc.all.item(i, 0);
if SUCCEEDED(Item.QueryInterface(IHTMLInputElement, Input)) then
begin
if Input.name = 'FSI-UserName' then Input.value := '用户名';
if Input.name = 'FSI-Password' then Input.value := '密码';
end;
end;
end;
问题1:'FSI-UserName'和'FSI-Password'是怎么得到的?
解答1:你可以通过查看网页原文件获得这些ID,这些ID都是唯一的
问题2:IHTMLInputElement是什么东西?
解答2:IHTMLInputElement是一个系统定义的接口,在网页中的所有元素,如button,textarea,select,frame,image等都定义有接口,选择合适的接口类型对网页元素进行转换,就可以得到该元素详细的值,具体请参看MSHTML中的定义或给我留言
有的网页内有frame或iframe,我们如何取到其中的信息?
//取得frame个数
function GetFrameCount: Integer;
var
Doc: IHTMLDocument2;
begin
Doc := WerBrowser.Document as IHTMLDocument2;
Result := Doc.Frame.Length;
end;
//取得第n个frame内容
function GetFrameDoc(n: Integer);
var
Doc: IHTMLDocument2;
OleContainer: IOleContainer;
enum: IEnumUnknown;
unk: IUnknown;
Fetched: PLongint;
begin
Doc := WebBrowser.Document as IHTMLDocument2;
Fetched := nil;
OleContainer:= Doc as IOleContainer;
OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, enum);
Enum.Skip(n);
Enum.Next(OLECONTF_EMBEDDINGS, Unk, Fetched);
IE := Unk as IWebbrowser2;
return IE.Document as IHTMLDocument2;
end;
你说的都是在自己创建的WebBrowser中进行操作,能否在已经打开的浏览器中进行呢?
这个问题其实分2步,第1是找到你关注的浏览器窗口,第2是把这个窗口转换为IWebBrowser2
function getIEFromBrowser(URL: String): IWebBrowser2;
var
ShellWindow: IShellWindows;
nCount, i: integer;
vi: OleVariant;
spDisp: IDispatch;
begin
ShellWindow := CoShellWindows.Create;
nCount := ShellWindow.Count;
for i := 0 to nCount - 1 do
begin
vi := i;
spDisp := ShellWindow.Item(vi);
if (spDisp = nil) then Continue;
spDisp.QueryInterface(iWebBrowser2, Result);
if (Result = nil) then Continue;
if Pos(UpperCase(URL), UpperCase(Result.Get_LocationURL)) = 0 then Continue;
exit;
end;
result := nil;
end;
- WebBrowser的用法
- WebBrowser的用法
- WebBrowser的用法
- WebBrowser的用法
- WebBrowser的用法
- delphi中webbrowser的用法
- WinForm WebBrowser用法扩展
- pb webbrowser控件用法
- WebBrowser用法总结
- pb webbrowser控件用法
- C#中WebBrowser 用法
- WebBrowser用法总结
- WebBrowser控件用法
- WebBrowser用法总结
- .NET 2.0 Webbrowser 一些用法
- 蛙蛙推荐:WebBrowser控件的高级用法,c#和Javascript交互及光标位置恢复
- WebBrowser控件的高级用法,c#和Javascript交互及光标位置恢复
- WebBrowser控件的问题
- Lua文件处理
- LUA脚本语言入门
- 学习Lua(2) -- Lua 简单示例 收藏
- 链表基本操作
- Notepad2
- WebBrowser的用法
- IT人士群聚喝酒的讲究
- 世界上最遥远的距离
- Asp.net 中按钮的前台和后台事件
- 如何控制WebBrowser,并使其提交其中的网页或者操纵其中的文本框等?
- C#下用TcpClient传输数组
- 同步机制及windows同步函数的使用收藏
- Webbrowser控件 怎么样禁用ActiveX [已结贴,结贴人:kingfun]
- Oracle客户端NLS_LANG设置