function GetFrame(ADoc:IHTMLDocument2 ; FrameNo:Integer):IWebbrowser2;
var
OleContainer:IOleContainer;
enum:IEnumUnknown;
unk:IUnknown;
Fetched:PLongint;
begin
Result:=nil;
try
if Assigned(ADoc)then begin
Fetched:= nil;
OleContainer:= ADoc as IOleContainer;
OleContainer.EnumObjects(OLECONTF_EMBEDDINGS,enum);
Enum.Skip(FrameNo);
Enum.Next(OLECONTF_EMBEDDINGS,Unk,Fetched);
Result:=Unk as IWebbrowser2;
end
else
Result:=nil;
except
;
end;
end;
function EnumFrame(ADoc:IHTMLDocument2; ElemrntID:string):IDispatch;
var
i:Integer;
frm: IHTMLDocument2;
iw : IWebbrowser2;
Ele : IHTMLElement;
begin
Result:=nil;
if(Assigned(ADoc)) then begin
for i:=0 to ADoc.frames.length-1 do begin
try
iw:=GetFrame(ADoc, i);
frm:=iw.Document as IHTMLDocument2;
Ele:=nil;
try
Ele:=frm.all.item(ElemrntID, 0) as IHTMLElement;
except
Ele:=nil;
end;
// Form1.Memo1.Lines.Add( '==============Frame '+ IntToStr(i)+ '==================');
// Form1.Memo1.Lines.Add(frm.body.outerHTML);
if(Assigned(Ele)) then begin
// Form1.Memo1.Lines.Add('找到 '+ElemrntID+' 啦');
Result:=Ele;
break;
end;
Result:=EnumFrame(frm, ElemrntID);
if(Assigned(Result)) OR (Result<>nil) then break;
except
;
end;
end;
end;
end;
procedure TForm1.btn2Click(Sender: TObject);
var
IsFindBackBtn:Boolean;
wt:Integer;
doc2: IHTMLDocument2;
Ele : IHTMLElement;
Ele2: IHTMLElement2;
begin
IsFindBackBtn:=false;
while (wb1.ReadyState <> READYSTATE_COMPLETE) do begin
Application.ProcessMessages;
end;
doc2:= wb1.Document as IHTMLDocument2;
Ele:=EnumFrame(doc2, 'aaaaaa') as IHTMLElement;
if(Assigned(Ele)) then begin
try
Ele.setAttribute('value', Edit1.Text, 0);
except
;
end;
end;
end;
var
OleContainer:IOleContainer;
enum:IEnumUnknown;
unk:IUnknown;
Fetched:PLongint;
begin
Result:=nil;
try
if Assigned(ADoc)then begin
Fetched:= nil;
OleContainer:= ADoc as IOleContainer;
OleContainer.EnumObjects(OLECONTF_EMBEDDINGS,enum);
Enum.Skip(FrameNo);
Enum.Next(OLECONTF_EMBEDDINGS,Unk,Fetched);
Result:=Unk as IWebbrowser2;
end
else
Result:=nil;
except
;
end;
end;
function EnumFrame(ADoc:IHTMLDocument2; ElemrntID:string):IDispatch;
var
i:Integer;
frm: IHTMLDocument2;
iw : IWebbrowser2;
Ele : IHTMLElement;
begin
Result:=nil;
if(Assigned(ADoc)) then begin
for i:=0 to ADoc.frames.length-1 do begin
try
iw:=GetFrame(ADoc, i);
frm:=iw.Document as IHTMLDocument2;
Ele:=nil;
try
Ele:=frm.all.item(ElemrntID, 0) as IHTMLElement;
except
Ele:=nil;
end;
// Form1.Memo1.Lines.Add( '==============Frame '+ IntToStr(i)+ '==================');
// Form1.Memo1.Lines.Add(frm.body.outerHTML);
if(Assigned(Ele)) then begin
// Form1.Memo1.Lines.Add('找到 '+ElemrntID+' 啦');
Result:=Ele;
break;
end;
Result:=EnumFrame(frm, ElemrntID);
if(Assigned(Result)) OR (Result<>nil) then break;
except
;
end;
end;
end;
end;
procedure TForm1.btn2Click(Sender: TObject);
var
IsFindBackBtn:Boolean;
wt:Integer;
doc2: IHTMLDocument2;
Ele : IHTMLElement;
Ele2: IHTMLElement2;
begin
IsFindBackBtn:=false;
while (wb1.ReadyState <> READYSTATE_COMPLETE) do begin
Application.ProcessMessages;
end;
doc2:= wb1.Document as IHTMLDocument2;
Ele:=EnumFrame(doc2, 'aaaaaa') as IHTMLElement;
if(Assigned(Ele)) then begin
try
Ele.setAttribute('value', Edit1.Text, 0);
except
;
end;
end;
end;