Einzelne Stücke einer Webseite in einer GUI anzeigen

  • Hallo zusammen.

    Ich bin auf der suche nach dem befehl oder einem befehlssatz um innerhalb einer GUI einen Teil einer Webseite anzeigen zu lassen.

    Beispiel:

    Wenn eine seite einen login bereich auf zb. https://autoit.de/www.autoit.de/login besitzt möchte ich nicht die komplette .../login seite anzeigen lassen, sondern nur den bereich wo man die login daten eingeben kann.

    greetz Max Sony

  • HI

    Danke für die schnelle antwort.

    Hab mir mal die funktionen der beiden von dir genannten befehle durchgelesen. - Steig da noch nicht ganz durch wie das hinhauen soll mit den befehlen.

    Eine alternative wäre ja, das man sagt _IECreate (url) und dann mithilfe eines zweiten mir noch unbekannten befehls sagt, das ein fenster innerhalb der GUI zb. nur den linken oberen rand der von _IECreate angezeigen wegseite, anzeigt. quasi nur ein ausschnitt.., aber kp ob das geht ;)

  • Du musst den Quellcode analysieren und mit Hilfe von StringRegExp den für dich relevanten Teil rausfiltern.
    den zeigst du dann in einem _IECreateEmbedded Ctrl an.
    (siehe Hilfe)

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Hier mal meine ersten Versuche + beschreibung wie ich vorgegangen bin
    Alle Kommentare die mit semikolon (;) beginnen sind quasi für mich platzhalter, falls der befehl noch irgendwann verwendung findet, hab ich ihn gleich parat und muss nur das semikolon entfernen

    [autoit]

    #include <GUIConstants.au3>
    #include <INet.au3>
    #include <IE.au3>
    #include <String.au3>
    #include <array.au3>

    [/autoit][autoit][/autoit][autoit]

    GUICreate ("GUI TEST", 650, 500)
    GUISetState (@SW_Show)
    AutoItSetOption ("GUICloseOnEsc", 0)

    [/autoit][autoit][/autoit][autoit]

    GUICtrlCreateTab (0, 0, 650, 500)

    [/autoit][autoit][/autoit][autoit]

    ;Login--->
    GUICtrlCreateTabItem ("Login/Register")
    _IEErrorHandlerRegister ()
    $sourcecode = _INetGetSource ('http://autoit.de/index.php?form=UserLogin&')
    $start = '<script type="text/javascript" src="wcf/js/AjaxRequest.class.js"></script>'
    $end = '<div id="footer">'
    $login = _StringBetween ($sourcecode, $start, $end, -1, 1)
    $sourcecodeoutput = StringRegExp ($login, ;"pattern= Das Suchmuster des regulären Ausdrucks. |||Was soll das sein?|||")
    $login = _IECreateEmbedded ()
    $GUIActiveX = GUICtrlCreateObj ($login, 0, 25, 650, 450)
    ;_IENavigate ($login, "http://autoit.de/index.php?form=UserLogin&")
    GUICtrlSetState(-1, $GUI_SHOW)

    [/autoit][autoit][/autoit][autoit]

    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then Exit
    WEnd

    [/autoit]

    Beschreibung wie ich vorgagangen bin, bzw was ich autoit mitteilen will:

    1. _INetGetSource soll von der login seite den quelltext aufnehmen

    2. _StringBetween soll mir den teil der für mich relevant ist (also nur das feld in dem man die login daten angeben kann + Die Buttons "Absenden" und "Zurücksetzen") herausfiltern;
    - Die Funktionen $start und $end hab ich herausgefunden indem ich auf die login seite mit firefox gegangen bin und dann mir den quelltext anzeigen hab lassen. - Dann hab ich geschaut welcher teil des quelltextes das login feld + die buttons beinhaltet und hab eine zeile davor ($start) und eine zeile danach ($end), als parameter angegeben. /// Weiss nicht ob das so richtig ist?!

    3. StringRegExp soll mir dann den teil den _stringbetween herausgefiltert hat, wiedergeben.

    4. _IECreateEmbedded soll dann den sourcecode der von stringregexp wiedergegeben wurde in einem webbrowserobjekt wiedergeben

    5. GUICtrlCreateObj soll mir dann die Graphik (wenn man es so nennen darf) in meiner GUI anzeigen lassen.

    -

    Ich hoffe ihr könnt damit was anfangen, um mir weiterzuhelfen, da mir mein programm, wenn ich es so lasse, nichts anzeigt in der GUI - vermutlich würde er einen @error auswerfen wenn ich ihn aktivieren würde.
    Wenn noch weitere fragen bestehen, stehe ich gerne zur verfügung.

    greetz Max Sony

    3 Mal editiert, zuletzt von MaxSony (5. Februar 2009 um 16:07)

  • 1. Bitte [ autoit]-Tags verwenden.
    2.

    [autoit]

    #include <GUIConstants.au3>
    #include <INet.au3>
    #include <IE.au3>
    #include <String.au3>
    #include <array.au3>

    [/autoit][autoit][/autoit][autoit]

    GUICreate ("GUI TEST", 650, 500)
    GUISetState (@SW_Show)
    AutoItSetOption ("GUICloseOnEsc", 0)

    [/autoit][autoit][/autoit][autoit]

    GUICtrlCreateTab (0, 0, 650, 500)

    [/autoit][autoit][/autoit][autoit]

    ;Login--->
    GUICtrlCreateTabItem ("Login/Register")
    _IEErrorHandlerRegister ()
    $sourcecode = _INetGetSource ('http://autoit.de/index.php?form=UserLogin&')
    $start = '<script type="text/javascript" src="wcf/js/AjaxRequest.class.js"></script>'
    $end = '<div id="footer">'
    $login = _StringBetween ($sourcecode, $start, $end, -1, -1);Es waren falsche Parameter
    ;$sourcecodeoutput = StringRegExp ($login, ;"pattern= Das Suchmuster des regulären Ausdrucks. |||Was soll das sein?|||");Das ist doch schon in $login ?!
    $oIE = _IECreateEmbedded () ;das Objekt darf $login nicht überschreiben
    $GUIActiveX = GUICtrlCreateObj ($login, 0, 25, 650, 450)
    ;_IENavigate ($login, "http://autoit.de/index.php?form=UserLogin&");Falsch. du musst es in einem temporären IEFenster anzeifgen lassen
    _IENavigate($oIE,"about:blank")
    _IEBodyWriteHTML($oIE,$login)
    GUICtrlSetState(-1, $GUI_SHOW)

    [/autoit][autoit][/autoit][autoit]

    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then Exit
    WEnd

    [/autoit]


    Ist aber ungetestet...
    Probiers mal aus...

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • HI

    habs ausprobiert, jedoch leider zeigt er mir weiterhin "nichts" an.

    Die GUI lässt sich ohne fehler öffnen, doch dann wird in dem Reiter "Login/Register" nichts angezeigt.

    Eine andere frage wäre: wie finde ich in dem sourcecode die richtigen stellen raus, die ich bei $start und $end angeben muss? - weiss nämlich nicht ob meine werte für $start und $end in meinem autoit code richtig sind.

    weiss jetzt nicht woran das liegen könnte, bzw was man ändern müsste um da was anzuzeigen.

    weitere vorschläge sind gerne gesehen ;)

    greetz max sony

    Einmal editiert, zuletzt von MaxSony (5. Februar 2009 um 16:11)

  • ich weiß zumindest, wo der Fehler liegt: in $login steht nix.
    Vermutlich _StringBetween falsch.

    also meinst du man sollte anstatt _StringBetween lieber StringRegExp verwenden? - da weiss ich jedoch leider nicht was in der autoit hilfe mit "pattern= Das Suchmuster des regulären Ausdrucks." gemeint ist.

    Und StringRegExp überprüft ja nur den string und tut nicht den relevanten teil herausfiltern wie es _stringbetween macht, oder?

    greetz max sony

  • Ähm, _StringBetween gibt ein String-Array zurück... Außerdem waren da noch andere Fehler und Unnötiges in Deinem Skript.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <INet.au3>
    #include <IE.au3>
    #include <String.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Exit main()

    [/autoit] [autoit][/autoit] [autoit]

    Func OnAutoItStart()
    Opt("GUICloseOnEsc", 0)
    Opt("MustDeclareVars", 0)
    EndFunc ;==>OnAutoItStart

    [/autoit] [autoit][/autoit] [autoit]

    Func main()
    ;~ Constants & Variables
    Local Const $STMPFILE = @ScriptDir & "\tmp.html"
    Local $oIE = 0, $hIECtrl = 0, $sHTML = ""

    [/autoit] [autoit][/autoit] [autoit]

    ;~ GUI creation
    GUICreate("GUI TEST", 650, 500)
    GUICtrlCreateTab(0, 0, 650, 500)
    GUICtrlCreateTabItem("Login")

    [/autoit] [autoit][/autoit] [autoit]

    ;~ HTML parsing & file interaction
    FileDelete($STMPFILE)
    $sHTML = _StringBetween(_INetGetSource('http://autoit.de/index.php?form=UserLogin&'), _
    '<script type="text/javascript" src="wcf/js/AjaxRequest.class.js"></script>', _
    '<div id="footer">')
    If @error Then MsgBox(16, "Parse Error", "Unable to parse the webpage!")
    $sHTML = $sHTML[0]
    FileWrite($STMPFILE, $sHTML)

    [/autoit] [autoit][/autoit] [autoit]

    _IEErrorHandlerRegister()
    $oIE = _IECreateEmbedded()
    $hIECtrl = GUICtrlCreateObj($oIE, 0, 25, 650, 450)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    _IENavigate($oIE, "file://" & $STMPFILE)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    If GUIGetMsg() = $GUI_EVENT_CLOSE Then Return 0
    WEnd
    EndFunc ;==>main

    [/autoit]
  • Okey, danke für deine antwort. Hat super geklappt.

    EDIT: Mir ist noch aufgefallen, das wenn ich in die Felder in der GUI bei anmelden meine daten angebe und auf einloggen etc. klicke kommt "Dieses Programm kann die Webseite nicht anzeigen." fehlermeldung.

    in IENavigate funktioniert es das er quasi weiterleitet wenn man die daten eingibt. - Aber in meinem "Stückchen" der webseite, leider nicht. - Wäre das auch noch möglich?

    Und noch ein eher kleineres Problem. - Der Bereich der mir angezeigt wird (also der Login bereich) ist im originalen weiße schrift mit schwarzem hintergrund und weisse eingabefelder. - Nun wird mir allerdings die schrift (wo steht "Login" und "Passwort") auch schwarz angezeigt, sodass die schrift nur sichtbar wird wenn man sie mit der maus markiert. Habe schon alles ausprobiert, die hintergrundfarben der GUI bzw des Ctrls einzustellen, jedoch wirken sich die farben nie auf das angezeigte Objekt aus. - Weiss einer nen Rat? - Wäre sehr dankbar!

    greetz Max Sony

    3 Mal editiert, zuletzt von MaxSony (6. Februar 2009 um 02:31)