{get all Frame URLs in TWebbrowser}procedure TForm1.Button1Click(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;
...save all TWebbrowser Frame Sources? uses ActiveX; 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; // Load sample page // Testseite laden procedure TForm1.Button1Click(Sender: TObject); begin Webbrowser1.Navigate('http://www.warebizprogramming.com/tutorials/html/framesEx1.htm'); end; // Save all frames in single files // Alle Frameseiten in einzelne Dateien speichern procedure TForm1.Button2Click(Sender: TObject); var IpStream: IPersistStreamInit; AStream: TMemoryStream; iw: IWebbrowser2; i: Integer; sl: TStringList; begin for i := 0 to Webbrowser1.OleObject.Document.frames.Length - 1 do begin 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); sl := TStringList.Create; sl.LoadFromStream(AStream); sl.SaveToFile('c:\frame' + IntToStr(i) + '.txt'); // memo1.Lines.LoadFromStream(AStream); sl.Free; end; except end; AStream.Free; end; end; end.
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;
偶是说MSHTML~~
再用TWebbrowser連接該下載文件...
ActiveX; 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; // Load sample page
// Testseite laden
procedure TForm1.Button1Click(Sender: TObject);
begin
Webbrowser1.Navigate('http://www.warebizprogramming.com/tutorials/html/framesEx1.htm');
end; // Save all frames in single files
// Alle Frameseiten in einzelne Dateien speichern
procedure TForm1.Button2Click(Sender: TObject);
var
IpStream: IPersistStreamInit;
AStream: TMemoryStream;
iw: IWebbrowser2;
i: Integer;
sl: TStringList;
begin
for i := 0 to Webbrowser1.OleObject.Document.frames.Length - 1 do
begin
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);
sl := TStringList.Create;
sl.LoadFromStream(AStream);
sl.SaveToFile('c:\frame' + IntToStr(i) + '.txt');
// memo1.Lines.LoadFromStream(AStream);
sl.Free;
end;
except
end;
AStream.Free;
end;
end; end.