注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

BCB-DG's Blog

...

 
 
 

日志

 
 

TWebBrowser自动填表  

2014-09-09 15:55:48|  分类: Web |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
//轉
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,MSHTML, SHDOCVW,IdGlobal;

type
TMainFrm = class(TForm)
btnTest: TButton;
edURL: TEdit;
Label1: TLabel;
procedure btnTestClick(Sender: TObject);
private
public
end;

var
MainFrm: TMainFrm;

implementation
procedure FillIEForm(aURL:string);
procedure DoWithHtmlElement(aElementCollection:IHTMLElementCollection);
var
k:integer;
vk:oleVariant;
Dispatch: IDispatch;
HTMLInputElement:IHTMLInputElement;
HTMLSelectElement:IHTMLSelectElement;
HTMLOptionElement: IHTMLOptionElement;
HTMLTextAreaElement: IHTMLTextAreaElement;
HTMLFormElement:IHTMLFormElement;
HTMLOptionButtonElement:IHTMLOptionButtonElement;
begin
for k:=0 to aElementCollection.length -1 do
begin
Vk:=k;
Application.ProcessMessages;
Dispatch:=aElementCollection.item(Vk,0);
if Succeeded(Dispatch.QueryInterface(IHTMLInputElement,HTMLInputElement)) then
begin
With HTMLInputElement do//单行文本
begin
if (UpperCase(Type_)='TEXT') or (UpperCase(Type_)='PASSWORD') then
begin
value:='text';
end
else if (UpperCase(Type_)='CHECKBOX') then//复选框
begin
checked:=true;
end
else if (UpperCase(Type_)='RADIO') then//单选框
begin
checked :=true;
end;
end;
end
else if Succeeded(Dispatch.QueryInterface(IHTMLSelectElement,HTMLSelectElement)) then
begin
With HTMLSelectElement do//下拉框
begin
selectedIndex :=1;
end;
end
else if Succeeded(Dispatch.QueryInterface(IHTMLTEXTAreaElement,HTMLTextAreaElement)) then
begin
with HTMLTextAreaElement do//多行文本
begin
value :='textarea';
end;
end
else if Succeeded(Dispatch.QueryInterface(IHTMLOptionElement,HTMLOptionElement)) then
begin
with HTMLOptionElement do//下拉选项
begin
//处理
end;
end
else if SUCCEEDED(Dispatch.QueryInterface(IHTMLFormElement,HTMLFormElement))then
begin
with HTMLFormElement do//表单
begin
//处理
end;
end
else if SUCCEEDED(Dispatch.QueryInterface(IHTMLOptionButtonElement,HTMLOptionButtonElement))then
begin
//处理
end
else
//showmessage('other');
end;
end;


var
ShellWindow: IShellWindows;
Web: IWebBrowser2;
Dispatch: IDispatch;
i,j:integer;
IEAddress:string;
HTMLDocument:IHTMLDocument2;
ElementCollection:IHTMLElementCollection;
FrameWindow:IHTMLWindow2;
Vi,Vj:OLEVariant;
HTMLFrameBase :IHTMLFrameBase ;
HTMLFrameElement:IHTMLFrameElement ;
HTMLIFrameElement:IHTMLIFrameElement;
begin
ShellWindow := CoShellWindows.Create;
for i:=0 to ShellWindow.Count -1 do
begin
Vi:=i;
Dispatch:=Shellwindows.item(Vi);
if Dispatch=nil then continue;
Dispatch.QueryInterface(IWebBrowser2,Web);
if Web<>nil then
begin
IEAddress:=Web.LocationURL;
if Pos(aURL,IEAddress)>0 then
begin
Web.Document.QueryInterface(IHTMLDocument2,HTMLDocument);
if HTMLDocument<>nil then
begin
if HTMLDocument.frames.length =0 then//无框架
begin
ElementCollection:=HTMLDocument.Get_All;
DoWithHtmlElement(ElementCollection);
end
else//有框架
begin
for j:=0 to HTMLDocument.frames.length -1 do
begin
Vj:=j;
Dispatch:=HTMLDocument.frames.item(Vj);
//              if Succeeded(Dispatch.QueryInterface(IHTMLFrameBase,HTMLFrameBase)
if Succeeded(Dispatch.QueryInterface(IHTMLWindow2,FrameWindow)) then
begin
//                DoWithHtmlElement(FrameWindow.document.all);
end;
end;
end;
end;
end;
End;
end;
end;

procedure TMainFrm.btnTestClick(Sender: TObject);
begin
FillIEForm(edUrl.Text);
end;
end.


单个frames的输入

var o : Olevariant; begin //找到登录用户名的输入框 o := WebBrowser.OleObject.document.all.item('LoginUserID',0); o.value := 'TEST';

//找到登录密码的输入框

o := WebBrowser.oleobject.document.all.item('LoginPassword',0); o.value := 'TEST'

//第一个表单提交 WebBrowser.oleobject.document.Forms.Item(0, 0).submit;

{ //或者用指定表单名称提交 o :=WebBrowser.oleobject.document.all.item('Login',0); o.Click; //点击操作,对其它对象也可同样操作 }

end; 多个frames的输入,FrameIndex为Frame的序号

var o : Olevariant; begin //找到登录用户名的输入框 o := WebBrowser.oleobject.document.documentelement.document.frames.item(FrameIndex).document.all.item('LoginUserID',0); o.value := 'TEST';

//找到登录密码的输入框 o := WebBrowser.oleobject.document.documentelement.document.frames.item(FramIndex).document.all.item('LoginPassword',0); o.value := 'TEST'

//第一个表单提交 WebBrowser.oleobject.document.documentelement.document.frames.item(FramIndex).document.Forms.Item(0, 0).submit;

{ //或者用指定表单名称提交 o :=WebBrowser.oleobject.document.documentelement.document.frames.item(FramIndex)..document.all.item('Login',0); o.Click;

//点击操作,对其它对象也可同样操作 }

end;


网页的源码不能读取,可能由于不能读源码,所以也不能用IHTMLDocument2及IHTMLElementCollection;
WebBrowse.Document.All.Item('控件ID',0).Value := 'AAa';
之类的来提交表单。我在网上查了很多资料,也不能用。类似以下的:
var 


doc  IHTMLDocument2; 
all  IHTMLElementCollection; 
len,i  integer; 
item  OleVariant; 
HtmlInputEle  IHTMLInputElement; 
SubmitBtn  IHTMLButtonElement; 
spDisp  IDispatch; 
begin 
if  WebBrowser1.Document  <>  nil  then 
begin 
doc:=WebBrowser1.Document  as  IHTMLDocument2; 
all:=doc.all; 
len:=all.Length; 
for  i:=0  to  len-1  do 
begin 
spDisp:=all.item(i,varEmpty); 
if  SUCCEEDED(spDisp.QueryInterface(IHTMLInputElement  ,HtmlInputEle))  then 
begin 
if  HTMlInputEle.name  'UserID'  then 
HtmlInputEle.value  :=  'test'; 
if  HTMlInputEle.name  'Passwd'  then 
HtmlInputEle.value  :=  'test'; 
end; 
if  SUCCEEDED(spDisp.QueryInterface(IHTMLButtonElement  ,SubmitBtn))  then 
if  SubmitBtn.name  'submitButtonName'  then 
SubmitBtn.click(); 
end; 
end; 
end;

  评论这张
 
阅读(700)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017