Thema: Delphi Framequelltexte auslesen

Einzelnen Beitrag anzeigen

quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#1

Framequelltexte auslesen

  Alt 16. Okt 2007, 17:33
Hallo DP-Community.

Ausgehend von dem Thread habe ich den Quelltext von Marabu meinen Bedürfnissen angepasst. Ich weiß nun aber nicht, wie ich den Quelltext der bestehenden Seite auslese.
Es ist ein Frameset und ich bräuchte von jeweiligen Frames den aktuellen Quelltext um diesen auswerten und interagieren zu können.

Bis jetzt funktioniert der gesamte Quelltext einwandfrei.

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    GroupBox1: TGroupBox;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
    procedure BeforeNavigate2(Sender: TObject;
      const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
      Headers: OleVariant; var Cancel: WordBool);
    procedure FormCreate(Sender: TObject);
  private
    ActiveUrl: string;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BeforeNavigate2(Sender: TObject; const pDisp: IDispatch;
  var URL, Flags, TargetFrameName, PostData, Headers: OleVariant;
  var Cancel: WordBool);
begin
  with Sender as TWebBrowser do
    if pDisp = DefaultInterface then
      ActiveUrl := URL;
end;

procedure TForm1.Button1Click(Sender: TObject);
const
  url = 'http://88.198.6.23/freewar/';
  iurl = 'http://88.198.6.23/freewar/internal/frset.php';
var
  wb: TWebBrowser;
  body, doc, frm: OleVariant;
begin
  wb := TWebBrowser.Create(nil);
  wb.ParentWindow := HWND(HWND_MESSAGE);
  wb.OnBeforeNavigate2 := BeforeNavigate2;
  wb.Navigate(url);
  repeat
    Sleep(50);
    Application.ProcessMessages;
  until wb.ReadyState >= READYSTATE_COMPLETE;
  doc := wb.OleObject.Document;
  body := doc.body;
  frm := doc.Forms.Item(0);
  frm.Elements.Item('name').Value := Edit1.Text;
  frm.Elements.Item('password').Value := Edit2.Text;
  frm.Elements.Item('submit').Click;
  repeat
    Sleep(50);
    Application.ProcessMessages;
  until wb.ReadyState >= READYSTATE_COMPLETE;
  wb.Navigate(iurl);
  repeat
    Sleep(50);
    Application.ProcessMessages;
  until wb.ReadyState >= READYSTATE_COMPLETE;


  ShowMessage(StringReplace(ActiveUrl, '&', '&&', [rfReplaceAll]));
  wb.free
end;

end.
Was marabu hier geschrieben hat, klappt bei mir nicht, da der Compiler nur meckert
Zitat:
[Fehler] Unit1.pas(21): Undefinierter Bezeichner: 'IHTMLFramesCollection2'
[Fehler] Unit1.pas(75): Undefinierter Bezeichner: 'IHTMLDocument2'
[Fehler] Unit1.pas(75): Operator ist auf diesen Operandentyp nicht anwendbar
...
Grüße aus Dresden
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat