WebBrowser如何控制Frame下面的元素 (200分)

  • 主题发起人 主题发起人 devuser
  • 开始时间 开始时间
D

devuser

Unregistered / Unconfirmed
GUEST, unregistred user!
使用TWebBrower控件访问一个有两个Frame的网页,
我可以获得两个Frame,如何进一步访问Frame下面的元素呢
 
webbrowser1.oleobject.document.documentelement.document.frames.length可以得到Frame
的数量.
webbrowser1.oleobject.document.documentelement.document.frames.item(j).document.documentelement.innerHtml
可以取得取得指定Frame中的HTML内容
 
1、老外写的:
procedure TForm1.Button2Click(Sender: TObject);
var
i:Integer;
begin
Listbox1.Clear;
//if frames available
if Webbrowser1.OleObject.Document.Frames.Length <> 0 then
begin
//walk through all frames and get the url
//to the Listbox
for i:=0 to Webbrowser1.OleObject.Document.Frames.Length -1 do
begin
Listbox1.Items.Add(Webbrowser1.OleObject.Document.Frames.item(i).Document.URL);
end;
end;
end;
2、我用IHTMLFRAMECOLLECTION2写的。
procedure TForm1.Button5Click(Sender: TObject);
var
i:integer;
j:olevariant;
doc:ihtmldocument2;
frameele:ihtmlframescollection2;
oneframe:Ihtmlwindow2;
spdisp:idispatch;
begin
doc:=webbrowser1.document as ihtmldocument2;
frameele:=doc.frames;
for i:= 0 to frameele.length-1 do begin
j:=i;
spDisp:=Frameele.item(j);
if SUCCEEDED(spDisp.QueryInterface(IHTMLWindow2 ,oneframe))then
memo1.Lines.Add(oneframe.document.title);
end;
end;

 
楼上的和楼楼上的方法比较起来,显然楼上的方法好点,我想,呵呵
 
接受答案了.
 
利用Delphi的Olevariant类型

单个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;


 
 
后退
顶部