IE Tab URL auslesen funktioniert nicht

  • Hallo AutoIt'ler

    ich versuche gerade krampfhaft in einem IE Fenster, wo mehrere TABs geöffnet sind, dessen URL auszulesen.

    Für ein einzelnes IE Fenster funktioniert es wunderbar. Sobald jedoch Tabs ins Spiel kommen liest er dennoch immer die URL des ersten Tab aus - obwohl z.b. das letzte aktiv / im Fokus ist.

    Hier mal der Code (ist nicht vollständig, war erst nur zum testen):

    [autoit]


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

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

    GUICreate("IE Session Manager", 300, 200)

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

    GUICtrlCreateLabel("Gespeicherte Session:", 10, 28)
    GUICtrlSetFont(-1, 8, 400, 4, "Arial")

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

    $button = GUICtrlCreateButton("Internet öffnen", 120, 5)

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

    $var1 = "http://www.google.de"
    $var2 = "http://www.ebay.de"
    $var3 = "http://www.google.com"
    $var4 = "http://www.wikipedia.org"
    $var5 = "http://www.google.de"
    $var6 = "http://www.google.de"
    $var7 = "http://www.google.de"
    $var8 = "http://www.google.de"
    $var9 = "http://www.google.de"

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

    GUICtrlCreateLabel($var1, 20, 45)
    GUICtrlCreateLabel($var2, 20, 60)
    GUICtrlCreateLabel($var3, 20, 75)
    GUICtrlCreateLabel($var4, 20, 90)
    GUICtrlCreateLabel($var5, 20, 105)
    GUICtrlCreateLabel($var6, 20, 120)
    GUICtrlCreateLabel($var7, 20, 135)
    GUICtrlCreateLabel($var8, 20, 150)
    GUICtrlCreateLabel($var9, 20, 165)

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

    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button
    _start()
    EndSwitch
    WEnd

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

    Func _start()
    $oIE = _IECreate($var1)
    $oIE1 = __IENavigate($oIE, $var2, 0, 0x800)
    $oIE2 = __IENavigate($oIE, $var3, 0, 0x800)
    $oIE3 = __IENavigate($oIE, $var4, 0, 0x800)
    $oIE4 = __IENavigate($oIE, $var5, 0, 0x800)
    $oIE5 = __IENavigate($oIE, $var6, 0, 0x800)
    $oIE6 = __IENavigate($oIE, $var7, 0, 0x800)
    $oIE7 = __IENavigate($oIE, $var8, 0, 0x800)
    $oIE8 = __IENavigate($oIE, $var9, 0, 0x800)

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

    $test = _IEPropertyGet ($oIE, "locationurl")
    $test1 = _IEPropertyGet ($oIE1, "locationurl")
    $test2 = _IEPropertyGet ($oIE2, "locationurl")
    $test3 = _IEPropertyGet ($oIE3, "locationurl")
    $test4 = _IEPropertyGet ($oIE4, "locationurl")
    $test5 = _IEPropertyGet ($oIE5, "locationurl")
    $test6 = _IEPropertyGet ($oIE6, "locationurl")
    $test7 = _IEPropertyGet ($oIE7, "locationurl")
    $test8 = _IEPropertyGet ($oIE8, "locationurl")

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

    Sleep(15000)

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

    MsgBox(0,"", $test)
    MsgBox(0,"", $test1)
    MsgBox(0,"", $test2)
    MsgBox(0,"", $test3)
    MsgBox(0,"", $test4)
    MsgBox(0,"", $test5)
    MsgBox(0,"", $test6)
    MsgBox(0,"", $test7)
    MsgBox(0,"", $test8)
    EndFunc

    [/autoit]

    Er gibt quasi immer nur die "Haupt"-URL aus. Aber nicht die, der weiteren Tabs. Keine Ahnung ob ich was falsch mache, oder ob es mit der IE.au3 nicht weiter realisierbar ist.

    Vielen Dank für Eure Hilfe!

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

  • Ersetze die __ienavigate() durch _iecreate() dann funktioniert das auch wie du möchtest. Tabbed browsing ist soweit ich weiß mit der ie.au3 nicht realisierbar, da man die Tabs nicht ansprechen kann. Bei der ff.au3 gibt es die Funktion tabsetselected um den Tab zu wechseln. Wohl auch ein Grund, warum die Funktion __ienavigate nicht supported wird und stattdessen _ienavigate benutzt werden soll:


    Code
    ; Description ...: ** Unsupported version of _IENavigate (note second underscore in function name)
    ;					** Last 4 parameters insufficiently tested.
    ;					**    - Flags and Target can create new windows and new browser object - causing confusion
    ;					**    - Postdata needs SAFEARRAY and we have no way to create one
  • Danke für die Antwort, jedoch hilft leider der Vorschlag, stattdessen _IECreate zu verwenden nicht, da er somit neue Fenster, statt neue Tabs öffnet. Bei meinem Skript sind das mal eben 9 IE Fenster die sich öffnen. Genau das soll ja mit den Tabs umgegangen werden, was mit der __IENavigate auch wunderbar funktioniert. Mit der originalen _IENavigate lassen sich halt keine weiteren Tabs öffnen, sondern nur von einer URL zur nächsten navigieren.

    Nur das auslesen der URL scheint mit __IENavigate schier unmöglich...

    Da ich das Tool hier für meine Arbeit schreibe und wir auch nur den IE nutzen dürfen, kann ich somit nicht auf die FF Variante zurückgreifen.

    Gibts denn irgendeinen Trick, wie ich im IE einfach an die URL's der offenen Tabs komme?

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

  • Die Frage ist doch wozu es zwingend Tabs sein müssen. Was soll erreicht werden?

    Willst du Dinge automatisieren? Dann ist ein sichtbares Fenster ohnehin nicht erforderlich und es spielt keine Rolle wieviele Fenster vorhanden sind, da diese unsichtbar gehalten werden können und nur zu Debug Zwecken sichtbar sein sollten.
    Stören dich nur die vielen IE Prozesse? Die sind auch bei Tabbed Browsing vorhanden.

    Soll der User interagieren können? Dann kommen ebenfals multiple Fenster in Frage, das Fenster/Tab Problem kann man durch das einbetten der seperaten Fenster in eine GUI lösen, somit kannst du ein Tab Fenster simulieren, welches in Wahrheit aus mehreren eigenständigen Browserfenstern besteht. Siehe dazu die Forensuche, Begriffe wie Autoit Browser und ie embedded sollten da mehrere Beispiele liefern wie man sowas realisiert bekommt.


    Soweit ich weiß ist die IE.au3 nicht brauchbar wenn man mit Tabs arbeiten will, was wohl daran liegen dürfte, dass Tabbed Browsing in IE6 noch nicht vorhanden war.


    EDIT:

    Hier mal eine solche embedded Variante, bei der alle Tabs im 10sek Takt neugeladen werden

    https://autoit.de/index.php?page…2550#post232550

    Einmal editiert, zuletzt von misterspeed (3. Februar 2012 um 15:57)

  • Hallo,

    sorry für die verspätete Antwort, hatte arbeitbedingt viel zu tun.

    Auf Deine Frage zu beantworten ob es denn Tabs sein müssen: Ja!

    Warum? Ganz einfach - das ganze soll für uns hier auf Arbeit verwendet werden. Dort sind unsere Rechte soweit eingeschränkt, dass wir die Taskleiste nicht vergrößern können oder mehrere Elemente eines Programms gruppieren lassen können.
    Da wir zusätzlich etliche Programme am laufen haben ist so schon unsere Taskleiste brechend voll und unübersichtlich. Daher sind wir auf Tabbed-Browsing komplett angewiesen.

    Auch soll der User zwar alle Tabs öffnen können, bei Bedarf die Adresse aber jederzeit wecheln können und Tabs hin- und her ziehen können.

    So wie beim IE halt. Firefox dürfen wir leider nicht installieren also kann ich darauf auch nicht zurückgreifen.

    Soweit ich Deine Aussagen also verstanden habe ist damit mein Versuch also gescheitert, oder?

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

  • Hier hast Du ....

    [autoit]

    #include <ie.au3>

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

    Dim $oShell = ObjCreate('Shell.Application')
    Dim $oShellWindows = $oShell.Windows()
    For $oShellWindow In $oShellWindows
    If $oShellWindow.name = 'Windows Internet Explorer' Then
    ConsoleWrite(_IEPropertyGet($oShellWindow, 'locationurl') & @CRLF)
    EndIf
    Next

    [/autoit]
  • Gibts eine Erklärung was genau dein Codeschnipsel macht? Bin gerade noch auf Arbeit und kanns nicht testen :(

    Lieben Dank!

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

  • Aber immer ...

    [autoit]

    ; UDF inkludieren
    #include <ie.au3>

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

    ; Shell-Objekt erzeugen!
    Dim $oShell = ObjCreate('Shell.Application')

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

    ; Sammlung offener Shell-Fenster(IE und Windows Explorer)
    Dim $oShellWindows = $oShell.Windows()

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

    ; Durchlaufe alle Elemente der Collection
    For $oShellWindow In $oShellWindows

    ; Bist du der Internetexplorer?
    If $oShellWindow.name = 'Windows Internet Explorer' Then

    ; URL der IE-Instanz zurückgeben
    ConsoleWrite(_IEPropertyGet($oShellWindow, 'locationurl') & @CRLF)

    ; Wenn Du auf die IE-UDF verzichten möchtest, geht auch das ...
    ;ConsoleWrite($oShellWindow.Document.location.href & @CRLF)
    EndIf
    Next ; --> $oShellWindow

    [/autoit]