[Code] [Delphi] Wie Programm bei board.raidrush.ws einloggen?

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von $$$moq, 2. Februar 2010 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 2. Februar 2010
    [Delphi] Wie Programm bei board.raidrush.ws einloggen?

    Hallo!

    Möchte ein Programm für meine Crew schreiben, allerdings gibts sofort bei Zeile 3 nen Speicherfehler. Hier ma der Source-Code:
    Code:
    begin
    WBBrowser.Navigate('http://board.raidrush.ws');
    [COLOR="Red"]WBBrowser.oleobject.document.forms.item(0).elements.item('vb_login__username').value := '%24%24%24moq';[/COLOR]
    WBBrowser.oleobject.document.forms.item(0).elements.item('cookieuser').value := '0';
    WBBrowser.oleobject.document.forms.item(0).elements.item('vb_login_password').value := '********';
    WBBrowser.oleobject.document.forms.item(0).submit;
    end;
    hab die zeile wo es buggt mal rot markiert. warum füllt er das form nicht einfach aus und schickts ab? hab das pw ma durch * ersetzt^^
     
  2. 2. Februar 2010
    Zuletzt von einem Moderator bearbeitet: 13. April 2017
    AW: [Delphi] Wie Programm bei board.raidrush.ws einloggen?

    Ich würde das per POST machen und net über ansteuern von html Elementen, spätestens wenn du nen Beitrag automatisch verfassen willst wird das so nicht mehr funktionieren. (How to use HTTP Get and HTTP Post in Delphi using Network Component an ActiveX component)

    Spoiler
    Ich hab das aber auch mal (weil ichs net besser wusste ) in vb.net gemacht:

    Code:
     Public Function Auth(ByVal Username as String,ByVal Passwort as String)
     Dim wb As New WebBrowser
     wb.Navigate("https://raidrush.net/forums/17/ 
     
     Do While wb.ReadyState <> WebBrowserReadyState.Complete
     My.Application.DoEvents()
     Loop
    
     If wb.Document.Body.OuterHtml.Contains("vb_login_username") Then
     wb.Document.GetElementById("vb_login_username").SetAttribute("value", Username) 
     wb.Document.GetElementById("vb_login_password").SetAttribute("value", Passwort)
     wb.Document.GetElementById("cookieuser").SetAttribute("checked", "checked")
     wb.Document.Forms(2).InvokeMember("submit")
     End If
     End Sub
    Ist net besonders sauber geproggt, habs halt schnell wieder verworfen.

    Das könnte dir vll helfen:

    Code:
    wb.Navigate("https://raidrush.net/forums/17/ 
    wb.Document.GetElementById("vb_login_username").SetAttribute("value", Username)
    wb.Document.GetElementById("vb_login_password").SetAttribute("value", Passwort)
    wb.Document.GetElementById("cookieuser").SetAttribute("checked", "checked")
    wb.Document.Forms(2).InvokeMember("submit")

    Außerdem musst du warten bis die Seite geladen wurde bevor du anfängst irgendwelche Sachen "einzugeben". Das ist wahrscheinlich der Hauptfehler. Er kann nicht auf Elemente zugreifen die es (noch) nicht gibt.

    Code:
    begin
    WBBrowser.Navigate('http://board.raidrush.ws');
    
    WARTEN BIS SEITE KOMPLETT GELADEN
    
    WBBrowser.oleobject.document.forms.item(0).elements.item('vb_login__username').value := '%24%24%24moq';
    WBBrowser.oleobject.document.forms.item(0).elements.item('cookieuser').value := '0';
    WBBrowser.oleobject.document.forms.item(0).elements.item('vb_login_password').value := '********';
    WBBrowser.oleobject.document.forms.item(0).submit;
    end;
     
  3. 2. Februar 2010
    Zuletzt von einem Moderator bearbeitet: 15. April 2017
    AW: [Delphi] Wie Programm bei board.raidrush.ws einloggen?

    speis den cookie direkt ein:
    cookie: Cookie Php Php R= / Download - RR:Suche

    hat raid mal für mit aufgenommen. ist nur nen simpler cookie reflector. genutzt hab ich ihn bis heute noch nicht.
     
  4. 2. Februar 2010
    AW: [Delphi] Wie Programm bei board.raidrush.ws einloggen?

    mal offtopic: wie erstellt man einen Beitrag?^^ ich hab das mit dem securitytoken noch hingekriegt. Im Firefox kann ich das Auslesen und dann in den quelltext einfügen. Allerdings ist das zeitlich begrenzt und ich hab kp wie ich das umgehen/generieren/Auslesen kann mit Delphi.
     
  5. 2. Februar 2010
    AW: [Delphi] Wie Programm bei board.raidrush.ws einloggen?

    Probiers mal mit der Indy HTTP Komponente, darüber kannst du alles machen - und so auch den Quelltext auslesen und nach irgendwelchen Securitytoken suchen.

    Sollte bei deinem Delphi mit dabei sein.

    Solche Sachen wie die HTML Elemente in ner Browserkomponente aufzurufen ist auf lange Sicht zum Scheitern verurteilt, weil du dadurch alleine nicht alle Infos aus dem Quelltext grabben kannst, und auch nur relativ spärlich überprüfen kannst, ob beispielsweise dein Programm was gepostet hat oder sonstwas.

    Also: Indy HTTP Komponente und dann über idHttp.get und idHttp.post das ganze Spiel nochmal machen.

    Nachtrag: Und du kannst mit der Indy Komponente auch gleich alle Cookies ansprechen, speichern und nutzen.


    Gruß
    X
     
  6. 8. Februar 2010
    AW: [Delphi] Wie Programm bei board.raidrush.ws einloggen?

    so für die, die mal die selber frage haben hier die lösung:

    Spoiler
    Code:
    unit Unit1;
    
    interface
    
    uses
     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     Dialogs, OleCtrls, SHDocVw, StdCtrls,WinInet, ActiveX ;
    
    type
     TForm1 = class(TForm)
     Button1: TButton;
     WebBrowser1: TWebBrowser;
     Button2: TButton;
     Edit1: TEdit;
     Button3: TButton;
     Edit2: TEdit;
     procedure Button1Click(Sender: TObject);
     function WbFindField(WebBrowser: TWebBrowser; FieldName: string; var Field: TPoint): boolean;
     function WbBtnClick(WebBrowser: TWebBrowser; FieldName: string): Boolean;
     function WbSetEditField(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean;
     procedure Button2Click(Sender: TObject);
    
     procedure Button3Click(Sender: TObject);
    
    
     private
     { Private declarations }
     public
     { Public declarations }
     end;
    
    var
     Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    
    
    
    
    
    
    
    
    
    function tform1.WbFindField(WebBrowser: TWebBrowser; FieldName: string; var Field: TPoint): boolean;
    var 
     i, j: Integer; 
     FormItem: Variant; 
    begin 
     Result := False;
     //Hat das Dokument Forms? (Frames) 
     if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then 
     begin 
     Exit;
     end;
     //Bearbeite alle Frames
     for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do 
     begin 
     FormItem := WebBrowser.OleObject.Document.forms.Item(I); 
     // Bearbeite alle Felder eines Frames 
     for j := 0 to FormItem.Length - 1 do 
     begin
     try 
     // Feldname wurde gefunden 
     // gebe ihn zurück und ende 
     if FormItem.Item(j).Name = FieldName then 
     begin 
     Field.x := i; // Position speichern 
     Field.Y := j;
     Result := True; 
     exit; 
     end; 
     except 
     Exit; 
     end; 
     end;
     end; 
    end; 
    
    
    
    
    
    function tform1.WbSetEditField(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean;
    var 
     Field: TPoint; 
    begin 
     // Position des Felds holen 
     if not WbFindField(WebBrowser, FieldName, Field) then
     begin 
     Result := false; // Feld existiert nicht
     exit; // Ende 
     end; 
     try 
     // Feld füllen
     WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Value := Value;
     Result := True; 
     except 
     Result := false;
     Exit; 
     end; 
    end;
    
    
    function tform1.WbBtnClick(WebBrowser: TWebBrowser; FieldName: string): Boolean;
    var
     Field: TPoint;
    begin
     // Position des Felds holen
     if not WbFindField(WebBrowser, FieldName, Field) then
     begin
     Result := false; // Feld existiert nicht
     exit; // Ende
     end;
     try
     // CheckBox setzen
     WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Click;
     Result := True;
     except
     Result := false;
     Exit;
     end;
    end;
    
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    webbrowser1.navigate('board.raidrush.ws');
    while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do application.processmessages;
    WbSetEditField(WebBrowser1, 'vb_login_username', edit1.text);
    WbSetEditField(WebBrowser1, 'vb_login_password', edit2.text);
    while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do application.processmessages;
    WebBrowser1.OleObject.document.forms.item(2).submit;
    end;

    die eingabe von username und pw sollte klar sein, wenn man den quelltext durchgeht(steht weit unten^^).
    beim button1click meldet er sich auf der seite an....

    wer genaueres wissen will guckt hier:
    ...mit Feldern und Buttons im Webbrowser arbeiten? - Entwickler-Ecke
    Delphi-PRAXiS - Einzelnen Beitrag anzeigen - Delphi TWbbrowser Formular ausfüllen und abschicken für Dummies
     
  7. 8. Februar 2010
    AW: [Delphi] Wie Programm bei board.raidrush.ws einloggen?

    das is doch nix, wenn hier im forum das element geändert wird oder n zweites forumlar dazukommt funktioniert das nicht mehr.

    installier dir livehttpheaders für firefox, log dich ein, schau dir den http-request an und bau ihn in deinem programm nach. das geht komplett ohne ne browser-komponente oder dom...

    für die web-bot programmierung ist http eh ne grundvorraussetzung.
     
  8. 9. Februar 2010
    AW: [Delphi] Wie Programm bei board.raidrush.ws einloggen?

    Post Parameter können genauso geändert werden, das ist das Selbe in Grün. Da ist die Sache mit den Elementen sogar fast besser, weil man die auch dynamisch erfassen kann (ist nicht ganz einfach aber geht!)

    Das Beste wird das mit dem Cookie sein.
     
  9. 9. Februar 2010
    AW: [Delphi] Wie Programm bei board.raidrush.ws einloggen?

    das stimmt schon, aber er programmiert fürs vb, da kann er nachschaun welche parameter er senden muss.

    das design dagegen steht jedem frei und kann komplett umgeworfen werden, sodass sein code überhaupt nicht mehr funktioniert.

    und ja, das mit dem cookie wird am besten sein. den bekommt er aber auch nur wenn er sich zuvor anmeldet - wo wir wieder bei http-request/response wären.

    einmal reingelesen stehen einem alle [webseiten-technische] möglichkeiten im www offen...
     
  10. 9. Februar 2010
    AW: [Delphi] Wie Programm bei board.raidrush.ws einloggen?

    habs geschafft danke an alle helfer! Bws gehen raus!
     
  11. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.