Delphi Webbrowser使用方法详解

Delphi WebBrowser控件是基于微软的ActiveX技术实现的,它可以嵌入到你的客户端应用程序中,通过它可以加载并呈现网页内容,既能够用来做简单的网站浏览器,也可以用来开发涉及网页内容的应用程序。

使用WebBrowser控件加载URL

将WebBrowser组件拖到窗体上,然后调用Navigate方法就可以实现加载URL。

比如:

WebBrowser1.Navigate('http://www.baidu.com');

在此基础上,你便可以在WebBrowser控件上面操作了,如获取网站内容、点击链接、填写表单等等。

获取网站内容

获取网站内容可以通过WebBrowser1.OleObject.Document的方式来获取HTML源代码,但是此方法不是线程安全的,因为WebBrowser本身不支持多线程。

参考代码:

procedure TForm1.Button1Click(Sender: TObject);

var

Doc: IHTMLDocument2;

Body: IHTMLElement;

Btn: IHTMLElement;

S: string;

I: Integer;

begin

Doc := WebBrowser1.Document as IHTMLDocument2;

Body := Doc.body;

S := '';

for I := 0 to Body.ChildNodes.length - 1 do

begin

S := S + Body.ChildNodes.Item(I).innerHTML;

end;

ShowMessage(S);

end;

这里获取网页的源代码,并在一个字符串中显示出来。

页面元素和操作

通过WebBrowser控件,我们可以直接操作HTML文档中的元素,比如在登录页面中填写账号和密码,并点击登录按钮:

procedure TForm1.Button1Click(Sender: TObject);

var

Doc: IHTMLDocument2;

Input: IHTMLElement;

Btn: IHTMLElement;

begin

Doc := WebBrowser1.Document as IHTMLDocument2;

Input := Doc.getElementById('email') as IHTMLElement;

Input.setAttribute('value', 'user@163.com');

Input := Doc.getElementById('password') as IHTMLElement;

Input.setAttribute('value', '123456');

Btn := Doc.getElementById('dologin') as IHTMLElement;

Btn.click;

end;

获取页面中的元素,通过setAttribute方法可以设置元素的值,通过click方法模拟点击,实现自动登录。

代理设置

在使用WebBrowser控件时,你可以通过修改注册表实现IE代理的设置,也可以通过代码调用WinINet函数实现代理设置。

参考代码:

//注册表方式

procedure SetProxyByReg(ProxyServer: string; ProxyPort: Integer);

var

Reg: TRegistry;

begin

Reg := TRegistry.Create;

try

Reg.RootKey := HKEY_CURRENT_USER;

if Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Internet Settings', True) then

begin

Reg.WriteString('ProxyServer', ProxyServer + ':' + IntToStr(ProxyPort));

Reg.WriteInteger('ProxyEnable', 1);

Reg.CloseKey;

end;

finally

Reg.Free;

end;

end;

//WinINet方式

procedure SetProxyByWinINet(ProxyServer: string; ProxyPort: Integer);

var

hInternet: HINTERNET;

hSession: HINTERNET;

lpBufferIn: Pointer;

dwBufferIn: DWORD;

begin

hInternet := InternetOpen('', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);

if Assigned(hInternet) then

begin

hSession := InternetOpenUrl(hInternet, 'http://www.baidu.com', '', 0, 0, 0);

if Assigned(hSession) then

begin

dwBufferIn := Length(ProxyServer) + 1;

GetMem(lpBufferIn, dwBufferIn);

try

Move(ProxyServer[1], lpBufferIn^, dwBufferIn);

InternetSetOption(hSession, INTERNET_OPTION_PROXY, lpBufferIn, dwBufferIn);

InternetSetOption(hSession, INTERNET_OPTION_PROXY_PORT, @ProxyPort, SizeOf(ProxyPort));

finally

FreeMem(lpBufferIn);

end;

InternetCloseHandle(hSession);

end;

InternetCloseHandle(hInternet);

end;

end;

以上代码实现了两种设置代理的方式,你可以根据需要选择其中的一种。

案例说明

我们可以利用WebBrowser控件实现很多实用的功能,下面给出两个实际应用的案例。

案例一:自动化邮件群发

在嵌入WebBrowser的窗体中,打开一个邮箱网站,自动登录,打开写信界面,输入收件人地址、邮件主题、邮件内容,然后点击发送即可。

参考代码:

procedure TForm1.Button1Click(Sender: TObject);

var

Doc: IHTMLDocument2;

Btn: IHTMLElement;

Input: IHTMLElement;

begin

Doc := WebBrowser1.Document as IHTMLDocument2;

//登录

Input := Doc.getElementById('idInput') as IHTMLElement;

Input.setAttribute('value', 'user@163.com');

Input := Doc.getElementById('pwdInput') as IHTMLElement;

Input.setAttribute('value', '123456');

Btn := Doc.getElementById('loginBtn') as IHTMLElement;

Btn.click;

//写信

Sleep(3000);

Btn := Doc.getElementById('_mail_component_72_72') as IHTMLElement;

Btn.click;

Input := Doc.getElementById('toInput') as IHTMLElement;

Input.setAttribute('value', 'user1@163.com,user2@qq.com');

Input := Doc.getElementById('subject') as IHTMLElement;

Input.setAttribute('value', '测试邮件');

Doc.body.innerHTML := '这是一封测试邮件,谢谢!';

Btn := Doc.getElementById('toolbar_btn_send') as IHTMLElement;

Btn.click;

end;

案例二:模拟网页登录获取数据

在嵌入WebBrowser的窗体中,打开一个网站,模拟登录,然后获取网站数据并显示出来。

参考代码:

procedure TForm1.Button1Click(Sender: TObject);

var

Doc: IHTMLDocument2;

Input: IHTMLElement;

Btn: IHTMLElement;

S: string;

I: Integer;

begin

Doc := WebBrowser1.Document as IHTMLDocument2;

//登录

Input := Doc.getElementById('username') as IHTMLElement;

Input.setAttribute('value', 'test');

Input := Doc.getElementById('password') as IHTMLElement;

Input.setAttribute('value', '123456');

Btn := Doc.getElementById('loginBtn') as IHTMLElement;

Btn.click;

//获取数据

Sleep(3000);

Doc := WebBrowser1.Document as IHTMLDocument2;

S := '';

for I := 0 to Doc.Links.length - 1 do

begin

S := S + Doc.Links.item(I).innerText + #13#10;

end;

ShowMessage(S);

end;

以上就是关于Delphi WebBrowser控件的详细介绍和使用方法,WebBrowser控件不仅可以用来做简单的网站浏览器,还可以用来开发涉及网页内容的应用程序。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(94) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部