Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Framequelltexte auslesen (https://www.delphipraxis.net/101626-framequelltexte-auslesen.html)

quendolineDD 16. Okt 2007 16:33


Framequelltexte auslesen
 
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

marabu 16. Okt 2007 20:20

Re: Framequelltexte auslesen
 
Hallo Lars,

die fehlenden Schnittstellen-Deklarationen stecken in der Unit MSHTML.

Freundliche Grüße

quendolineDD 16. Okt 2007 20:46

Re: Framequelltexte auslesen
 
Ich hab es nun so gelöst, das die einzelnen Frames in Proceduren erneut aufgerufen werden und ausgelesen werden.

Werde den Post nochmal editieren, wenn ich alle Frames so wie ich es benötige entgültig ausgelesen und bearbeitet habe. Bin jetzt erst mit dem ersten Frame fertig :-\


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz