WebBrowser如何控制Frame下面的元素;使用TWebBrower控件访问一个有两个Fra;webbrowser1.oleobject.do;webbrowser1.oleobject.do;可以取得取得指定Frame中的HTML内容;var;i,j:integer;;begin;memo1.Clear;;i:=webbrowser1.oleobje
WebBrowser如何控制Frame下面的元素
使用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内容
var
i,j:integer;
begin
memo1.Clear;
i:=webbrowser1.oleobject.document.documentelement.document.frames.length;// 得到 frame 的数量。
memo1.Lines.Add('have Frames: '+inttostr(i));
for j:=0 to i-1 do
begin
memo1.lines.add('');
memo1.Lines.Add('Frame '+inttostr(j+1)+' from here');
memo1.Lines.Add(webbrowser1.oleobject.document.
documentelement.document.frames.item(j).document.documentelement.innerHtml);// 取得每个 Frame 中的 HTML 内容
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;
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;