Hallo,
Gleich das nächste Problem...
Ich habe folgende Funktion:
[autoit]Func OpenCardPages($EditionPage)
$sTitle = _ObjDictGetValue($EditionPage, "Title")
$sUrl = _ObjDictGetValue($EditionPage, "URL")
ConsoleWrite("EditionPage Title: " & $sTitle & " URL: " & $sUrl & @CRLF)
_FFTabSetSelected($sTitle, "label")
$aAllCardLinks = _FFXpath("//a", "href", 6)
For $sLink in $aAllCardLinks
ConsoleWrite(@CRLF & "Card Link: " & $sLink & @CRLF)
if StringInStr($sLink, "/de/") Then
_FFTabAdd($sLink, false, false)
EndIf
Next
EndFunc
Die Funktion bekommt ein Dictionary Objekt übergeben, das eine Url und den Titel der Seite eines Tabs gespeichert hat. Das funktioniert auch, die Werte Url und Title sind immer richtig.
Auch das fokussieren des Tabs mit _FFTabSetSelected() funktioniert.
Ich habe mir sogar mal testweise den Seitenquelltext ausgeben lassen, auch der war korrekt.
Umso verwunderlicher ist allerdings, dass die _FFXPath()-Funktion nicht ein einziges Ergebnis zurückliefert.
Folgendes funktioniert aber:
[autoit]
_FFStart("http://magiccards.info/roe/de.html") ; Das ist die Seite die auch im oberen Beispiel aufgerufen wird.
$aAllCardLinks = _FFXpath("//a", "href", 6)
For $sLink in $aAllCardLinks
ConsoleWrite(@CRLF & "Card Link: " & $sLink & @CRLF)
if StringInStr($sLink, "/de/") Then
_FFTabAdd($sLink, false, false)
EndIf
Next
Die Seite wird aufgerufen und alle Links zu den Karten "angeklickt".
Den einzigen Unterschied, den ICH erkennen kann, ist, dass im funktionierenden Fall die Seite die ist, mit der Firefox gestartet wird.
Ich brauche also mal wieder Hilfe, um den Fehler zu finden.
Der Vollständigkeit halber hier der komplette Source code:
Spoiler anzeigen
; ----------------------------------------------------------------------------------------------
; INCLUDES
; ----------------------------------------------------------------------------------------------
#include <FF.au3>
#include <UDF_ArrayAlternatives.au3>
; ----------------------------------------------------------------------------------------------
; GLOBALS
; ----------------------------------------------------------------------------------------------
$EditionPageList = _ObjAListCreate()
; ----------------------------------------------------------------------------------------------
; SCRIPT
; ----------------------------------------------------------------------------------------------
; Open Firefox in correct window
ConsoleWrite("------------------------------------------------------------" & @CRLF & "Open Firefox" & @CRLF & "------------------------------------------------------------"& @CRLF)
_FFStart("http://magiccards.info/sitemap.html#de")
ConsoleWrite("------------------------------------------------------------" & @CRLF & "Click Edition Links" & @CRLF & "------------------------------------------------------------"& @CRLF)
; Open all edition windows
ClickEditionLinks()
; Close sitemap
ConsoleWrite("------------------------------------------------------------" & @CRLF & "Close Sitemap" & @CRLF & "------------------------------------------------------------"& @CRLF)
_FFTabClose("Inhaltsübersicht", "label")
; Close tabs that are no real editions
ConsoleWrite("------------------------------------------------------------" & @CRLF & "Close Useless Sites" & @CRLF & "------------------------------------------------------------"& @CRLF)
CloseTabByURL($EditionPageList, "http://magiccards.info/9eb/de.html")
CloseTabByURL($EditionPageList, "http://magiccards.info/8eb/de.html")
CloseTabByURL($EditionPageList, "http://magiccards.info/st2k/de.html")
CloseTabByURL($EditionPageList, "http://magiccards.info/itp/de.html")
CloseTabByURL($EditionPageList, "http://magiccards.info/grc/de.html")
CloseTabByURL($EditionPageList, "http://magiccards.info/mbp/de.html")
; Create Pics Folder
ConsoleWrite("------------------------------------------------------------" & @CRLF & "Create Pics Folder" & @CRLF & "------------------------------------------------------------"& @CRLF)
DirCreate("Pics")
; Go through each tab, open the card pages and save the pictures to the correct folder
ConsoleWrite("------------------------------------------------------------" & @CRLF & "Go Through Each Edition Page" & @CRLF & "------------------------------------------------------------"& @CRLF)
For $page In $EditionPageList
; Open all card pages of the current edition page
ConsoleWrite("------------------------------------------------------------" & @CRLF & "Open All Card Pages Of Current Edition Page" & @CRLF & "------------------------------------------------------------"& @CRLF)
OpenCardPages($page)
Exit
[/autoit] [autoit][/autoit] [autoit]; Close edition page (it is currently selected)
ConsoleWrite("------------------------------------------------------------" & @CRLF & "Close Edition Page" & @CRLF & "------------------------------------------------------------" & @CRLF)
_FFTabClose()
Next
Exit
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]; ----------------------------------------------------------------------------------------------
; FUNCTIONS
; ----------------------------------------------------------------------------------------------
; ----------------------------------------------------------------------------------------------
; Clicks all edition links and saves the pages to our list
Func ClickEditionLinks()
$aAllLinks = _FFXpath("//a", "href", 6)
$iCounter = 0
For $sLink in $aAllLinks
if StringInStr($sLink, "/de.html") Then
ConsoleWrite("Add: " & $sLink & @CRLF)
_FFTabAdd($sLink, true, true)
$Page = _ObjDictCreate()
$sUrl = _FFCmd(".location.href")
$sTitle = _FFCmd(".title")
_ObjDictAdd($Page, "URL", $sUrl)
_ObjDictAdd($Page, "Title", $sTitle)
_ObjAListAdd($EditionPageList, $Page)
$iCounter += 1
EndIf
If $iCounter = 3 Then Return 0
Next
EndFunc
; ----------------------------------------------------------------------------------------------
; Saves all card pages on
Func OpenCardPages($EditionPage)
$sTitle = _ObjDictGetValue($EditionPage, "Title")
$sUrl = _ObjDictGetValue($EditionPage, "URL")
ConsoleWrite("EditionPage Title: " & $sTitle & " URL: " & $sUrl & @CRLF)
_FFTabSetSelected($sTitle, "label")
$aAllCardLinks = _FFXpath("//a", "href", 6)
For $sLink in $aAllCardLinks
ConsoleWrite(@CRLF & "Card Link: " & $sLink & @CRLF)
if StringInStr($sLink, "/de/") Then
_FFTabAdd($sLink, false, false)
EndIf
Next
EndFunc
; ----------------------------------------------------------------------------------------------
; Closes the Tab that has the passed URL and removes it from the list
Func CloseTabByURL(ByRef $ArrayList, $search)
Local $counter = 0
If Not IsObj($ArrayList) Then
SetError(1)
Return 0
EndIf
For $elem In $ArrayList
$sUrl = _ObjDictGetValue($elem, "URL")
If StringCompare($sUrl, $search) = 0 Then
$sTitle = _ObjDictGetValue($elem, "Title")
ConsoleWrite("Closing Url: " & $sUrl & " Title: " & $sTitle & @CRLF)
_FFTabClose($sTitle, "label")
Return 0
EndIf
$counter += 1
Next
SetError(2)
Return 0
EndFunc
Wenn es gar nicht geht, könnte ich zur Not allein mit dem Quelltext weiterarbeiten, aber ... muss nicht