又问webbrowser(100分)

  • 主题发起人 主题发起人 xiaoshou
  • 开始时间 开始时间
X

xiaoshou

Unregistered / Unconfirmed
GUEST, unregistred user!
三个页面依次进入
第一页面嵌套了多个frames-->第二个页面没有frames-->第三个页面也是多个frames
用webbrowser可以读取第一页面的frames的源码,请问如何获取第三个页面的frames的html源码?
第一个页面可以通过一下函数实现
procedure TForm1.Button4Click(Sender: TObject);
var
IpStream: IPersistStreamInit;
AStream: TMemoryStream;
iw: IWebbrowser2;
i: Integer;
sl: TStringList;
begin
memo1.Lines.Clear;
for i := 0 to webbrowser1.oleobject.document.frames.length - 1 do
begin
showmessage(inttostr(i));
iw := GetFrame(i);
AStream := TMemoryStream.Create;
try
IpStream := iw.document as IPersistStreamInit;
if Succeeded(IpStream.save(TStreamadapter.Create(AStream), True)) then
begin
AStream.Seek(0, 0);
memo1.Lines.LoadFromStream(AStream);
sl.Free;
end;
except
end;
AStream.Free;
end;

end;
但是进入第三个页面,无法获得frames的html码!请高手指点!
 
function TForm1.GetFrame(FrameNo: Integer): IWebbrowser2;
var
OleContainer: IOleContainer;

enum: IEnumUnknown;

unk: IUnknown;

Fetched: PLongint;

begin
// while Webbrowser1.ReadyState < READYSTATE_COMPLETE do
/// Application.ProcessMessages;
//如果使用,程序永远停留在这
if Assigned(Webbrowser1.document) then
begin
Fetched := nil;

OleContainer := Webbrowser1.Document as IOleContainer;

OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, Enum);
Enum.Skip(FrameNo);

Enum.Next(1, Unk, Fetched);

Result := Unk as IWebbrowser2;

end
else

Result := nil;

end;
 
后退
顶部