WebGadget: HTML aus Frame auslesen?

Anfängerfragen zum Programmieren mit PureBasic.
Blu-Ray
Beiträge: 15
Registriert: 21.05.2008 12:10

WebGadget: HTML aus Frame auslesen?

Beitrag von Blu-Ray »

Hallo,

ich möchte gerne den HTML-Quelltext aus einem WebGadget auslesen. Leider benutzt die Seite Frames. Wenn ich aus der Frame-Seite den Quelltext nehme und die Unterseiten selbst aufrufe, komme ich wieder auf die Index-Seite zurück. Es existiert also ein Schutz dagegen, die Seiten zweimal aufzurufen.

Wie kann ich jetzt den HTML-Text aus einem Frame auslesen, ohne den Frame einzeln neu laden zu müssen? Geht das irgendwie über den Cache?

Danke im Voraus,

Blu-Ray
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Wird anscheinend mit JavaScript geschützt, sodass du per JavaScript wieder auf die Hauptseite umgeleitet wirst, wenn du die Unterseite direkt aufrufst.

Hast du die URL des Frames? Diese kannst du ganz einfach mit ReceiveHTTPFile() downloaden.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Blu-Ray
Beiträge: 15
Registriert: 21.05.2008 12:10

Beitrag von Blu-Ray »

Das sind CGI-Dateien, die mich umleiten. Aber ich werde die Funktion nachher mal ausprobieren.
Blu-Ray
Beiträge: 15
Registriert: 21.05.2008 12:10

Beitrag von Blu-Ray »

Leider funktioniert das nicht :-(
Ich bekomme wieder die Index-Page

Gibt es noch eine andere möglichkeit?
Benutzeravatar
FGK
Beiträge: 249
Registriert: 09.01.2005 14:02
Computerausstattung: i5-4430 CPU / 8GB RAM
GeForce GT630
Windows 10 Home / 64-bit
Wohnort: Augsburg

Beitrag von FGK »

@Blu-Ray

Zugriff auf diese Inhalte sind möglich, aber nicht über den Cache. Du mußt über das DOM-Object des WebGadget gehen. Den Einstieg dazu bekommst du über

Code: Alles auswählen

Gadget.IWebBrowser2=GetWindowLong_(GadgetID(WebGadget),#GWL_USERDATA)
Dann gehst du über die Interfaces Document und Framecollection.
Ich hab so was für meinen Browsergame-Bot gemacht. Um Ehrlich zu sein
wenn dir aber schon die Sache mit der Tab und Del Taste im Webgadget
zu aufwändig war, sieht es hier keines Falls besser aus was den nötigen "Einsatz" betrifft.

Was hast du denn vor?

Gruß FGK
Blu-Ray
Beiträge: 15
Registriert: 21.05.2008 12:10

Beitrag von Blu-Ray »

Hi. Erstmal sry, dass ich erst jetzt antworte.
Es gibt so ein OnlineGame (www.drogendealer.de), bei dem man, wie der Name schon sagt, Drogen dealen muss. Dabei gibt es auch Ermittler, die einem entweder das Geld bzw. die Drogen wegnehmen. Deshalb möchte ich den HTML-Inhalt des Frames haben, um den Namen zu parsen und mit den in einer Datenbank gespeicherten Namen abgleichen.
Benutzeravatar
FGK
Beiträge: 249
Registriert: 09.01.2005 14:02
Computerausstattung: i5-4430 CPU / 8GB RAM
GeForce GT630
Windows 10 Home / 64-bit
Wohnort: Augsburg

Beitrag von FGK »

Aha also eine Art Tool zum cheaten *ggg

Ok und wie weit sind deine Ansätze?
Blu-Ray
Beiträge: 15
Registriert: 21.05.2008 12:10

Beitrag von Blu-Ray »

Die Datenbankverbindung und die GUI stehen schon, sowie die Administration. Jetzt brauche ich nur noch den HTML-Quelltext des Frames. Den Rest schaffe ich schon alleine. :lol:
Blu-Ray
Beiträge: 15
Registriert: 21.05.2008 12:10

Beitrag von Blu-Ray »

@FGK: Wie bekomm ich jetzt den Sourcecode über DOM? Sry. Bin noch Noob.
Benutzeravatar
FGK
Beiträge: 249
Registriert: 09.01.2005 14:02
Computerausstattung: i5-4430 CPU / 8GB RAM
GeForce GT630
Windows 10 Home / 64-bit
Wohnort: Augsburg

Beitrag von FGK »

@Blu-Ray

Das ist ein Auschnitt aus meinem Browsergame Tool. Hab mir
das aus Schnipseln hier im Forum zusammen gebastelt.

Code: Alles auswählen

Procedure.s GetHTML_Document(WebGadget.l,UrlSuchString.s) 
 
  Shared HTMLDocument.IHTMLDocument2
  Protected varReturn.VARIANT
  Protected URL.s

  If HTMLDocument
    HTMLDocument\Release()
    HTMLDocument = 0
  EndIf
  Gadget.IWebBrowser2=GetWindowLong_(GadgetID(WebGadget),#GWL_USERDATA) 
  If Gadget\get_Document(@Doc1.IDispatch) = #S_OK And Doc1 
    Doc1\QueryInterface(?IID_IHTMLDocument2,@HTMLDocument.IHTMLDocument2) 
    If HTMLDocument\get_frames(@FrameCollection.IHTMLFramesCollection2) = #S_OK
      If FrameCollection\get_length(@FrameCount) = #S_OK
        If FrameCount > 0
          For index = 0 To FrameCount-1
            varIndex.VARIANT\vt = #VT_UINT
            varIndex\lVal = index      
            If FrameCollection\item(varIndex, varReturn) = #S_OK
              If varReturn\pdispVal\QueryInterface(?IID_IHTMLWindow2, @HTMLWindow.IHTMLWindow2) = #S_OK
                HTMLWindow\get_Document(@Doc2.IDispatch)
                If Doc2\QueryInterface(?IID_IHTMLDocument2,@FrameDocument.IHTMLDocument2) = #S_OK 
                  If FrameDocument\get_URL(@bstr) = #S_OK And bstr
                      URL = PeekS(bstr, -1, #PB_Unicode)
                      SysFreeString_(bstr) 
                    If FindString(URL,UrlSuchString,1) ; Wir haben unsern Frame gefunden
                      HTMLDocument\Release()
                      HTMLDocument=FrameDocument
                      Doc2\Release()
                      Break
                    Else
                      URL.s=""
                    EndIf
                  EndIf
                  FrameDocument\Release()
                EndIf  
                Doc2\Release()
              EndIf  
              HTMLWindow\Release()
            EndIf
          Next 
          FrameCollection\Release() 
        Else
          ;Keine Frames - Direktes Document
          If HTMLDocument\get_URL(@bstr) = #S_OK And bstr
            URL = PeekS(bstr, -1, #PB_Unicode)
            SysFreeString_(bstr) 
          EndIf
        EndIf 
      EndIf
      FrameCollection\Release()  
    Else
      ;Keine Framecollection - Direktes Document
      If HTMLDocument\get_URL(@bstr) = #S_OK And bstr
        URL = PeekS(bstr, -1, #PB_Unicode)
        SysFreeString_(bstr) 
      EndIf
    EndIf   
    Doc1\Release()
  EndIf
  ProcedureReturn URL
EndProcedure
Damit hast du in der Variable HTMLDocument die Möglichkeit
auf die Interfaces des DOM zuzugreifen und auf die Inhalte der
Seite. Zur Ermittlung welcher der Frames der richtige ist mußt du
einen eindeutigen Teil der URL des Frames übergeben.

Gruß FGK
Antworten