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/
发表评论 取消回复