Конференция "Сети" » Как получить код страницы открытой в IE? [D7, WinXP]
 
  • DIM © (02.07.09 00:41) [0]
    необходимо получить код страницы открытой в IE(не загружая страницу заново,а используя уже открытую).что можете посоветовать?
  • Rouse_ © (02.07.09 09:35) [1]
     Memo1.Text := (WebBrowser1.Document as IHtmlDocument2).body.outerText;

  • DIM © (02.07.09 14:46) [2]
    Rouse, что такое IHtmlDocument2 ? и ещё вопрос-как я понял этот код покажет код страницы загруженной в WebBrouser а не в IE?(я новичок по части программирования под интернет)
  • Rouse_ © (02.07.09 15:40) [3]
    А, тебе с внешних браузеров, ну тогда вот так:

    unit Unit1;

    interface

    uses
     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     Dialogs, StdCtrls;

    type
     TForm1 = class(TForm)
       Button1: TButton;
       Memo1: TMemo;
       procedure Button1Click(Sender: TObject);
     end;

    var
     Form1: TForm1;

    implementation

    uses
     SHDocVw,
     MSHTML;

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    var
    ShellWindow: IShellWindows;
    WB: IWebbrowser2;
    spDisp: IDispatch;
    IDoc1: IHTMLDocument2;
    k: Integer;
    begin
    ShellWindow := CoShellWindows.Create;
    for k := 0 to ShellWindow.Count do
    begin
      spDisp := ShellWindow.Item(k);
      if spDisp = nil then Continue;
      spDisp.QueryInterface(iWebBrowser2, WB);
      if WB <> nil then
      begin
        WB.Document.QueryInterface(IHTMLDocument2, iDoc1);
        if iDoc1 <> nil then
        begin
          WB := ShellWindow.Item(k) as IWebbrowser2;
          begin
            Memo1.Lines.Add('****************************************');
            Memo1.Lines.Add(WB.LocationURL);
            Memo1.Lines.Add('****************************************');
            Memo1.Lines.Add((WB.Document as IHTMLDocument2).body.outerHTML);
          end;
        end;
      end;
    end;
    end;

    end.

  • DIM © (02.07.09 23:37) [4]
    Благодарю,это то что нужно
  • brother © (03.07.09 04:41) [5]
    > ShellWindow := CoShellWindows.Create;

    а ему free не требуется?
  • Rouse_ © (03.07.09 13:54) [6]

    > а ему free не требуется?

    Интерфейсу?
  • Tlex © (04.07.09 03:05) [7]
    1) под "Оперу" не работает? (у меня только из IE берёт :(
    2) А есть способ не HTML, а сам текст сайта брать?
  • Rouse_ © (04.07.09 12:17) [8]

    > под "Оперу" не работает? (у меня только из IE берёт :(

    Нет и под фаерфокс тоже :)


    > А есть способ не HTML, а сам текст сайта брать?

    Руками делать GET запрос
  • Tlex © (04.07.09 12:59) [9]
    Понятно..
    А можно про "Get запрос" немного подробней?
  • Rouse_ © (04.07.09 15:09) [10]
  • Tlex © (04.07.09 16:12) [11]
    Благодарю!
  • unnamed (03.08.09 22:12) [12]
    Как использовать вышеуказанный пример (для внешних браузеров) для определенного фрейма?
  • unnamed © (06.08.09 21:44) [13]
    Вопрос все еще актуален.
  • geoWhoiS (06.09.11 21:40) [14]

    > Rouse_ ©   (02.07.09 15:40) [3]
    > А, тебе с внешних браузеров, ну тогда вот так:
    >
    > unit Unit1;
    >
    > interface
    >
    > uses
    >  Windows, Messages, SysUtils, Variants, Classes, Graphics,
    >  Controls, Forms,
    >  Dialogs, StdCtrls;
    >
    > type
    >  TForm1 = class(TForm)
    >    Button1: TButton;
    >    Memo1: TMemo;
    >    procedure Button1Click(Sender: TObject);
    >  end;
    >
    > var
    >  Form1: TForm1;
    >
    > implementation
    >
    > uses
    >  SHDocVw,
    >  MSHTML;
    >
    > {$R *.dfm}
    >
    > procedure TForm1.Button1Click(Sender: TObject);
    > var
    > ShellWindow: IShellWindows;
    > WB: IWebbrowser2;
    > spDisp: IDispatch;
    > IDoc1: IHTMLDocument2;
    > k: Integer;
    > begin
    > ShellWindow := CoShellWindows.Create;
    > for k := 0 to ShellWindow.Count do
    > begin
    >   spDisp := ShellWindow.Item(k);
    >   if spDisp = nil then Continue;
    >   spDisp.QueryInterface(iWebBrowser2, WB);
    >   if WB <> nil then
    >   begin
    >     WB.Document.QueryInterface(IHTMLDocument2, iDoc1);
    >     if iDoc1 <> nil then
    >     begin
    >       WB := ShellWindow.Item(k) as IWebbrowser2;
    >       begin
    >         Memo1.Lines.Add('****************************************');
    >
    >         Memo1.Lines.Add(WB.LocationURL);
    >         Memo1.Lines.Add('****************************************');
    >
    >         Memo1.Lines.Add((WB.Document as IHTMLDocument2).
    > body.outerHTML);
    >       end;
    >     end;
    >   end;
    > end;
    > end;
    >
    > end.


    Этот пример тянет код со всех запущеных экземляров ИЕ.

    А как взять код с одного активного окна ????????????????????
  • int64 © (08.09.11 04:16) [15]

    > Этот пример тянет код со всех запущеных экземляров ИЕ.
    >
    > А как взять код с одного активного окна ????????????????
    > ????

    http://www.bsalsa.com/ie_tools_auto.html
    Там есть код, который достает IWebbrowser2 по хендлу окна IE. Все, что надо, найти хендл активного окна.

    > unnamed   (03.08.09 22:12) [12]
    > Как использовать вышеуказанный пример (для внешних браузеров)
    > для определенного фрейма?

    Работа с фреймами:
    http://www.swissdelphicenter.ch/torry/showcode.php?id=2054
    http://delphi-faq.zoxt.net/1409.htm
    http://delphi-faq.zoxt.net/c11.htm
  • Anatoly Podgoretsky © (08.09.11 09:31) [16]

    > необходимо получить код страницы открытой в IE(не загружая
    > страницу заново,а используя уже открытую).что можете посоветовать?
    >

    В ИЕ может быть открыто несколько вкладок, а также может быть открыто несколько браузеров, при том необязательно ИЕ
 
Конференция "Сети" » Как получить код страницы открытой в IE? [D7, WinXP]
Есть новые Нет новых   [134435   +13][b:0][p:0.002]