订制一些WEB数据抓取项目时,会遇到需要先登录网站系统,这时候我们通常会做成由系统自动登录的方式。
分析网页
要完成这项功能,首先需要对项目的网页进行分析,找到关键数据项的ID。如下图中的。
1、用户名的ID名称;
2、密码对应的ID名称;
3、登录按钮对应的ID名称。
完成自动登录
我们在Delphi中使用WebBrowser控件来显示处理网页,控件怎么使用暂不在本文中讲述。
直接上内容:
本次项目是在DocumentComplete事件中去处理自动登录的,你也可以自己建一个按钮,通过按钮去登录。
当页面加载完成后,会触发DocumentComplete事件,我们首先使用string(URL).StartsWith 判断是否是登录页面,StartsWith只判断字符串前面部分是否相同,因为有时候URL后面可能会有不同的参数,所以只需要判断前面重要部分就可以。
其次用了CheckBox1.Checked来选择是否需要自动登录,如果需要,则执行自动登录代码
在代码中先创建了一个匿名线程,执行线程内部工作时,DocumentComplete事件代码已执行完成,在线程中,我们先等待400毫秒,用于让浏览器处理完网页页面的其他初始工作。
之后是使用线程同步方式在WebBrowser控件内执行一段JS代码,用JS代码来完成登录工作。
JS代码主要有三条,填写用户名、填写密码、触发登录按钮的点击事件。
主要代码内容
procedure TForm5.WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; const URL: OleVariant);
const
//用于自动登录
JScriptLog =
'$(''#username'').val(''%S'');' + #13#10 + //用于填写用户名
'$(''#password'').val(''%S'');' + #13#10 + //用于填写密码
'$(''#login'').click();'; //触发登录
var
BDoc: IHTMLDocument2;
BDoc3: IHTMLDocument3;
vEFormTime,vEtoTime: IHTMLElement;
begin
if WebBrowser1.Application = pDisp then
begin
BDoc := WebBrowser1.Document as IHTMLDocument2;
if string(URL).StartsWith('http://XXXX/index.html')
then //检查URL是否是监控系统的登录页面
begin
if CheckBox1.Checked then
begin
TThread.CreateAnonymousThread(
procedure
begin
sleep(400);
TThread.Synchronize(nil,
procedure
begin
BDoc := WebBrowser1.Document as IHTMLDocument2;
//如果是监控系统的登录页面 完成自动登录
BDoc.parentWindow.execScript(Format(JScriptLog,
[Edit1.Text, Edit4.Text]), 'JavaScript');
end);
end).Start;
end;
end
else if string(URL).StartsWith
('http://XXXXXX/pages/MainInfo.html') then
begin
//处理其他页面的工作时使用
end;
end;
end;
其他说明
使用WebBrowser处完成一些指定网页数据提取(或填写)的功能,需要对WebBrowser控件本身的使用比较了解,更重要的是需要针对等处理的网页进行分析,所以必须熟悉HTML、JS(jquery,现在的网站基本会使用到,当然还有一些其他UI框架),还需要了解如何进行网页本地调试与跟踪,某些工作需要在调试中去找内容的。
很多工作会是一些分析与尝试,最后Delphi的实现代码其实会很少的。
转自:https://www.51sjk.com/b194b258947/
标签:begin,网页,登录,URL,Delphi,WebBrowser,end From: https://www.cnblogs.com/tang-delphi/p/16707649.html