![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Все тот же злосчастный TWebbrowser1 сохранение в HTML
Igor23 © (2008-02-14 19:39:00)Ребя помогите же!?
Гружу нужную страничку WebBrowser1.Navigate(''); и сохраняю function WB_SaveHTMLCode(WebBrowser: TWebBrowser; const FileName: TFileName): Boolean;
Всё работает, да не всё)....сохраняется верхний фрейм, а нужен который по центру. Как его получить?
Igor23 (2008-02-14 23:29:00) [1]))) точно! Забыл уже имя. Надо опять в Fox-е посмотреть
homm (2008-02-14 23:23:00) [2]> [15] Igor23 (14.02.08 23:15)
> i -ручками придется подбирать:).
Какой ручками! Ты же гвоорил, что тебе имя фрейма известно, вот и вставь туды
if ovElements.item(i).name='MainFrame' then
Сам же так писал.
Igor23 (2008-02-14 23:15:00) [3]К сожалению мозг не желает работать, i -ручками придется подбирать:). Где нить бы литру по программированию веб-документов на Delphi найти было бы великолепно.
homm спасибо ещё раз огромное очень помогли!!!
homm (2008-02-14 23:01:00) [4]> [13] Igor23 (14.02.08 22:58)
Это получается я тебе показал как можно, а теперь включи еще и мозг и сделай как тебе нужно.
Igor23 (2008-02-14 22:58:00) [5]Всё работает спасибо....эт чо получается код со всех фреймов в файл собирает?
homm (2008-02-14 22:50:00) [6]> [11] Igor23 (14.02.08 22:49)
Попробуй использовать глаз.
Igor23 (2008-02-14 22:49:00) [7]WB_SaveHTMLCode(doc, 'C:\\MyFrameTags.txt'); -ошибка Incompatible types: 'TWebBrowser' and 'IDispatch'
homm (2008-02-14 22:31:00) [8]
function WB_SaveHTMLCode(WebBrowser: IDispatch; const FileName: TFileName): Boolean;
var
ps: IPersistStreamInit;
fs: TFileStream;
sa: IStream;
begin
ps:= WebBrowser as IPersistStreamInit;
fs:= TFileStream.Create(FileName, fmCreate);
try
sa:= TStreamAdapter.Create(fs, soReference) as IStream;
Result:= Succeeded(ps.Save(sa, True));
finally
fs.Free;
end;
end;
procedure TForm1.Button6Click(Sender: TObject);
var
DOM: Variant;
buyerStyle: Variant;
i: integer;
doc: IDispatch;
begin
DOM := WB.OleObject.Document;
{buyerStyle := DOM.getElementById('buyer-open').style;
if buyerStyle.display = 'block' then
buyerStyle.display := 'none'
else
buyerStyle.display := 'block';}
//label1.Caption := DOM.frames.item(0).document.documentElement.innerHTML;;
buyerStyle:= WB.OleObject.Document.Frames;
for i:= 0 to (buyerStyle.Length - 1) do begin
doc := buyerStyle.item(i).document;
WB_SaveHTMLCode(doc, 'C:\\MyFrameTags.txt');
end;
end;
Igor23 (2008-02-14 22:19:00) [9]угадал!!! :( Не знаю что писать после if ovElements.item(i).name='MainFrame' then ??? и кажется что такое сохранение WB_SaveHTMLCode здесь не катит Как сделать х.з
homm (2008-02-14 22:10:00) [10]И? Дай угадаю, у небя ничерта не вышло. Язык прикусил, или пальцы прищемил?
Igor23 (2008-02-14 22:08:00) [11]function TForm1.WB_SaveHTMLCode(WebBrowser: TWebBrowser; const FileName: TFileName): Boolean;
var
ps: IPersistStreamInit;
fs: TFileStream;
sa: IStream;
begin
ps:= WebBrowser.Document as IPersistStreamInit;
fs:= TFileStream.Create(FileName, fmCreate);
try
sa:= TStreamAdapter.Create(fs, soReference) as IStream;
Result:= Succeeded(ps.Save(sa, True));
finally
fs.Free;
end;
end;
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
CurWebrowser: IWebBrowser;
TopWebBrowser: IWebBrowser;
i: integer;
ovElements: OleVariant;
begin
try
ovElements:= WebBrowser1.OleObject.Document.Frames;
for i:= 0 to (ovElements.Length - 1) do
if ovElements.item(i).name='MainFrame' then
WB_SaveHTMLCode(WebBrowser1, 'MyFrameTags.txt');
except
end;
end;
homm (2008-02-14 21:51:00) [12]
document.frames.length;
document.frames.item(X).name;
Igor23 (2008-02-14 21:42:00) [13]Предварительно:
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;
procedure TForm1.Button1Click(Sender: TObject);
begin
Webbrowser1.Navigate('http://');
end;
Код работает но не сохраняет в тексm
Igor23 (2008-02-14 21:38:00) [14]фрейма конечно....пробовал следующий код код уже измучился:
// 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;
homm (2008-02-14 21:35:00) [15]Имени чего?
Igor23 (2008-02-14 21:28:00) [16]Подскажите на пальцах для неуча как по имени фрейм сохранить?
ketmar (2008-02-14 19:40:00) [17]бери, и сохраняй фрейм.
---
Understanding is not required. Only obedience.