Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.12.07;
Скачать: CL | DM;

Вниз

Все тот же злосчастный TWebbrowser1 сохранение в HTML   Найти похожие ветки 

 
Igor23   (2008-02-14 19:39) [0]

Ребя помогите же!?

Гружу нужную страничку WebBrowser1.Navigate(""); и сохраняю  function WB_SaveHTMLCode(WebBrowser: TWebBrowser; const FileName: TFileName): Boolean;

Всё работает, да не всё)....сохраняется верхний фрейм, а нужен который по центру. Как его получить?


 
ketmar ©   (2008-02-14 19:40) [1]

бери, и сохраняй фрейм.

---
Understanding is not required. Only obedience.


 
Igor23   (2008-02-14 21:28) [2]

Подскажите на пальцах для неуча как по имени фрейм сохранить?


 
homm ©   (2008-02-14 21:35) [3]

Имени чего?


 
Igor23   (2008-02-14 21:38) [4]

фрейма конечно....пробовал следующий код код уже измучился:
// 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;


 
Igor23   (2008-02-14 21:42) [5]

Предварительно:

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


 
homm ©   (2008-02-14 21:51) [6]

document.frames.length;
document.frames.item(X).name;


 
Igor23   (2008-02-14 22:08) [7]

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 22:10) [8]

И? Дай угадаю, у небя ничерта не вышло. Язык прикусил, или пальцы прищемил?


 
Igor23   (2008-02-14 22:19) [9]

угадал!!! :( Не знаю что писать после if  ovElements.item(i).name="MainFrame" then ??? и кажется что такое сохранение WB_SaveHTMLCode здесь не катит Как сделать х.з


 
homm ©   (2008-02-14 22:31) [10]

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:49) [11]

WB_SaveHTMLCode(doc, "C:\\MyFrameTags.txt"); -ошибка   Incompatible types: "TWebBrowser" and "IDispatch"


 
homm ©   (2008-02-14 22:50) [12]

> [11] Igor23   (14.02.08 22:49)

Попробуй использовать глаз.


 
Igor23   (2008-02-14 22:58) [13]

Всё работает спасибо....эт чо получается код со всех фреймов в файл собирает?


 
homm ©   (2008-02-14 23:01) [14]

> [13] Igor23   (14.02.08 22:58)

Это получается я тебе показал как можно, а теперь включи еще и мозг и сделай как тебе нужно.


 
Igor23   (2008-02-14 23:15) [15]

К сожалению мозг не желает работать, i -ручками придется подбирать:). Где нить бы литру по программированию веб-документов на Delphi найти было бы великолепно.
homm спасибо ещё раз огромное очень помогли!!!


 
homm ©   (2008-02-14 23:23) [16]

> [15] Igor23   (14.02.08 23:15)
> i -ручками придется подбирать:).

Какой ручками! Ты же гвоорил, что тебе имя фрейма известно, вот и вставь туды
if ovElements.item(i).name="MainFrame" then
Сам же так писал.


 
Igor23   (2008-02-14 23:29) [17]

))) точно! Забыл уже имя. Надо опять в Fox-е посмотреть



Страницы: 1 вся ветка

Текущий архив: 2008.12.07;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.014 c
2-1225186061
Iriss
2008-10-28 12:27
2008.12.07
Общий флаг


15-1222946328
Буум
2008-10-02 15:18
2008.12.07
Открытие методов класса внутри другого класса


15-1222800406
axis_of_evil
2008-09-30 22:46
2008.12.07
как получить список процессов ..


15-1223369022
Armond
2008-10-07 12:43
2008.12.07
Обновление таблички


15-1222788859
oxffff
2008-09-30 19:34
2008.12.07
Как поступить?