autoit frameset und link passt nicht zusammen

10/24/2008 13:17 sandra09#1
hi leute
ich habe ein problem, und zwar will ich für ogame ( [Only registered and activated users can see links. Click Here To Register...] ) einen bot mit autoit schreiben. das login klappt anstandslos nur in der darauffolgenden seite hab ich probleme:
diese seite besteht aus einem frameset, dass wiederrum eins beinhaltet usw, ca 5 mal und im "innersten" ist der link den ich anklicken will, in dem fall links im menü den verteidigungsbutton.

Code:
$oFrame=_IEFrameGetCollection ($oIE)
$oLinks = _IELinkGetCollection ($oFrame)

$i = 0
For $oLink In $oLinks
    If StringInStr($oLink.href, "abc") Then ExitLoop
    $i = $i + 1
Next

_IELinkClickByIndex($oFrame, $i)
führt zu folgendem fehler:
IE.au3 V2.4-0 Warning from function _IELinkClickByIndex, $_IEStatus_NoMatch

und
Code:
$a=_IEFrameGetCollection ($oIE)

$i=0
While True
	$i+=1
	$b=deeper($a)
	If $a==$b Then ExitLoop
	$a=$b
	If $i == 1000 Then MsgBox(0,"","hmm")
WEnd

Func deeper($a)
	$b=_IEFrameGetCollection ( $a  )
	If @error <> 0 Then Return $a
	Return $b
EndFunc
führt zu einer endlosschleife.

nun habe ich keine ahnung was ich noch versuchen könnte.

bin für jede hilfe dankbar
ciao
10/24/2008 13:27 verT!c4L#2
Ganz vergessen, Hallo sandra09! xD
Heißt du wirklich so (also ohne die 09) ?!
------------------------------------------------------------
Du bewegst dich einfach nur auf dem falschen Frame...
Zumindest ist das meine erste Idee dazu ^^

$oFrame müsste ein Array sein, da es mehrere Frames (sofern vorhanden)
aufnehmen müsste.
Demnach musst du nur den richtigen Frame auswählen/ finden.
$oFrame[0] -> müsste den Hauptframe darstellen,
rein hypothetisch müsste dein Frame $oFrame[2] sein.


Edit2:
Sry deine Beschreibung hatte ich falsch verstanden...
wenns 5 mal is, dann:

Demzufolge $oLinks = _IELinkGetCollection ($oFrame[4]).
Alles rein spekulativ...

MfG & schönes Wochenende schon mal.

Edit:
Vlt mal die Dokumentation zu _IEFrameGetCollection ()
anschauen, da sollte beschrieben sein was die Funktion macht.

Edit 2 weiterführend:

Ein Trick wäre hier, das du dir mal eine Funktion machst welche
dir darstellt was du zur Verfügung hast.

Pseudo-Code:
$oFrame=_IEFrameGetCollection ($oIE)
For $x = 0 To UBound($oFrame) - 1
$oLinks = _IELinkGetCollection ($oFrame[$x])
$Liste += $oFrame[$x]+"\n"+$oLinks
next
MsgBox($Liste)

Irgendwie so, dann siehste welcher Frame, welche Links enthält...
zumindest sollte das so in etwa funktionieren ^^

Oder du machst dir eine Pattern-Matching Funktion:

$oFrame=_IEFrameGetCollection ($oIE)
For $x = 0 To UBound($oFrame) - 1
$oLinks="" -> damit die Variable nicht womöglich überladen wird.
$oLinks = _IELinkGetCollection ($oFrame[$x])
If StringInStr($oLink.href, "abc") Then
MsgBox("Link befindet sich in Frame: "+$x)
next
Exit

Oder so ähnlich ^^
Ist jedenfalls wohl etwas bequemer...
10/24/2008 14:01 sandra09#3
hmm danke, das ist ein interessanter ansatz, werde ich die kommenden tage mal ausprobieren :-)

um das mit den frames zu verdeutlichen:
die seite hat ein frameset(1a) darin ein frame(1b)
dieses frame(1b) beinhaltet ein nächstes frameset(2a) mit dem frame darin(2b)
in dem frame(2b) wieder: frameset(3a) und frame (3b)
und das ganze mehrmals....
also um es so zu sagen: ein frame in nem frame in nem frame in nem frame ... :-D

und ne sry ich heiße nicht wirklich sandra, aber namen sind schließlich nur schall und rauch ^^

jap nochmal danke
ciao und schönes wochenende
10/24/2008 14:19 verT!c4L#4
$oFrame=_IEFrameGetCollection ($oIE)
For $x = 0 To UBound($oFrame) - 1
$i+=1
$Frame_$i=_IEFrameGetCollection ($oFrame[$x])
If $Frame_$i enthält Frames dann
For $y = 0 To UBound($Frame_$i) - 1
$Frame_$i_$i=_IEFrameGetCollection ($Frame_$i[$y])
If $Frame_$i_$i enthält Frames dann
For $z = 0 To UBound($Frame_$i_$i) - 1
$Frame_$i_$i_$i=_IEFrameGetCollection ($Frame_$i_$i[$z])
next
sonst
$oLinks = _IELinkGetCollection ($oFrame_ etc pp[$x]) richtigen werten einsetzen
next
exit


So in etwa, is aber jetzt reine funktionelle Programmierung
könnte man auch schicker verpacken im OOP-Style
mit Schleifchen und so ^^
----------------------------------------------------------------
Hab mir das schon gedacht mit dem Namen :P
10/26/2008 13:09 sandra09#5
hmm du behandelst $Frame als wären sie arrays, sie sind aber objekte.
ich schau mal ob ich enen weg finde ubound() und [] zu ersetzen.

thx ^^