IE Auf "link" klicken, der keinen Namen ud keine ID hat?

  • Hallo wie ereiche ich das ich "Nutzernamen suchen" klicken kann

    Quelltextausschnitt

    Code
    <div class="gbu"><a onclick="toggle_box('so_0');" href="#sbk">Nutzernamen suchen</a> <a href="show.dl?view=geburtstage">Geburtstagskinder</a> <a href="show.dl?view=online">Wer ist online?</a> <a href="show.dl?view=neuemitglieder">Neue Mitglieder</a>

    Link

    Direkter Aufruf geht nicht, man muss erst draufklicken

    Ziel ist es wenn ich einen Namen habe die dazugehörige Nummer rauszufiltern, andersrum geht es...

    Ich weiß nicht wie ich Autotit sagen soll das es da draufklick, hat weder Name noch ID...

    Hoffe mir kann jemand helfen :)

    Einmal editiert, zuletzt von devildevil3 (31. August 2008 um 12:30)

  • Also bei mir funktioniert der direkte Aufruf,
    via:
    javascript:toggle_box('so_0');

    limette ;)

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • [autoit]


    #include <IE.au3>
    $ie = _IECreate( 'http://www.dreamlevel.de/suche.dl#sbk' )
    _IENavigate( $ie, "javascript:toggle_box('so_0');" )

    [/autoit]

    ;)
    limette

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Hallo, das funktioniert wunderbar

    aber habe noch ne Frage, wie Sende ich einen Wert dorthin


    habe es so versucht

    [autoit]

    #include <ie.au3>
    $ie = _IECreate( 'http://www.dreamlevel.de/suche.dl#sbk' )
    _IENavigate( $ie, "javascript:toggle_box('so_0');",1 )

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

    sleep(5000)
    $oForm = _IEFormGetCollection ($IE);Holt die Bereiche
    sleep(1000)
    $oQuery = _IEFormElementGetObjByName($oForm, "nname");Findet das TExtfeld
    _IEFormElementSetValue ($oQuery, 'AcerRoyal');fügt text2 ein

    [/autoit]

    Aber das geht so irgendwie nicht?

    Der name der Box ist doch "nname" ?(

    Grüße

  • Erstmal solltest du beim _IENavigate auf den js-Befehl den 'Wait'-Parameter auf 0 setzen ;)
    Und _IEFormElementGetObjByName ist immer so ne Sache, kp, das verwirrt mich immer ^^
    Habs etwas verändert, getestet, so funktionierts:

    [autoit]

    #include <ie.au3>
    $ie = _IECreate( 'http://www.dreamlevel.de/suche.dl#sbk' )
    _IENavigate( $ie, "javascript:toggle_box('so_0');", 0 )
    Sleep( 2000 )
    ;sleep(5000)
    ;$oForm = _IEFormGetCollection ($IE);Holt die Bereiche -- limette: brauchste garnicht ^^
    ;sleep(1000)
    $oQuery = _IEGetObjById($ie, "nname") ;limette: holt dir das Element direkt über die ID. Übrigens auch 'nname' ;)
    _IEFormElementSetValue ($oQuery, 'AcerRoyal');fügt text2 ein

    [/autoit]


    limette

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • hi, danke, nur noch eine Frage ^^

    Wenn ich das per Setvalue setze findet der nichts, man müstte buchstabenfür buchstaben senden

    [autoit]

    For $i=1 To StringLen($name)
    _IEFormElementSetValue ($oQuery,StringMid($name,$i,1));fügt namen ein, geht nicht da Set Value immer komplett oder eben nur einen buchstaben setzt

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

    ;ControlSend($gui,"","Internet Explorer_Server1",StringMid($name,$i,1))<geht ja leider nicht
    Sleep(10)
    Next

    [/autoit]

    Mit Controlsend kein Problem, geht ja aber nicht beim IE :(

  • Ach, das ist so'n Ajax-Reloding-Krams :P
    Du willst also diese Liste angezeigt bekommen ?
    Setze einfach ans Ende von dem Code, den ich geposted habe,
    noch ein:

    [autoit]

    _IENavigate( $ie, 'javascript:getList();', 0 )

    [/autoit]


    Das ist der Aufruf der Funktion, die die Liste anzeigen lässt. Auch halt
    wieder via Javascript ;)

    limette

    Edit: Getestet & funktioniert ;)

    Edit2: Evtl musst du doch den Parameter '1' nehmen, also dass der zuende laden soll.
    Sonst arbeitet dein Script vll zu schnell weiter - wenn der deshalb wieder hängt kannst
    du es mit _IELoadWait versuchen oder manuell in einer Schleife abfragen, welchen Status
    der IE gerade hat ;) Wobei das eig auch die Funktionsweise von _IELoadWait ist, wenn ich
    nicht völlig falsch liege ^^

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Danke, jetzt geht es soweit, sicherlich nicht die beste Lösung aber nunja, mir taugt es

    Gibt auch noch einen Fehler, wenn ich die Kombination anwende, spuckt der keine Numr mehr aus!

    Suche zuerst zu den Namen die Nummer, dann von der Nummer den Namen und dann wieder Name zu Nummer=>Bei den letzten Wert kommt nichts mehr
    Danke an limette und Firepanther

    Spoiler anzeigen
    [autoit]

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

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

    _IELoadWaitTimeout (5000)
    $gui=GUICreate("Dreamlevel",400,130)
    $Nummer=GUICtrlCreateInput("",10,10,200,20)
    GUICtrlCreateLabel('<==Hier Nummer Eintragen',220,10)
    $Name=GUICtrlCreateInput("",10,50,200,20)
    GUICtrlCreateLabel('<==Hier Name Eintragen',220,50)
    $Start=GUICtrlCreateButton("Suche",10,90)
    $NeueSuche=GUICtrlCreateButton("Neue Suche",85,90)
    $EXIT=GUICtrlCreateButton("EXIT",50,90)

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

    GUISetState(@SW_SHOW)
    While 1
    $msg = GUIGetMsg()

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

    If $msg <> 0 Then
    $NummerR= GUICtrlRead($Nummer)
    $NameR = GUICtrlRead($Name)

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

    Select
    case $msg = $Start
    ToolTip("Suche...",0,0,"Info",1,1)

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

    if $NameR='' then
    GUICtrlSetState($Start, $GUI_DISABLE)

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

    $Link='http://www.dreamlevel.de/profil.dl?u='&$NummerR
    $OIE=_IECreate($Link,0,0,1)

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

    $Text=_IEBodyReadText($OIE)

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

    $TempDatei=@ScriptDir&'\Temp.txt'
    FileWrite($TempDatei,$Text)
    sleep(1000)
    $Tempfile=FileOpen($TempDatei,0)
    if FileExists(@ScriptDir&'\Temp.txt') Then
    while 1
    $Zeile=FileReadLine($Tempfile)
    if StringInStr($Zeile,'BuddyIgnoreMelden') Then
    $Zeile=StringTrimRight($Zeile,17)
    GUICtrlSetData($Name,$Zeile)
    FileClose($Tempfile)
    FileDelete($TempDatei)
    _IEQuit($OIE)
    GUICtrlSetState($Start, $GUI_ENABLE)
    ToolTip("")

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

    ExitLoop
    EndIf
    WEnd
    EndIf
    Else
    GUICtrlSetState($Start, $GUI_DISABLE)

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

    GUICtrlSetData($Nummer,getnumberbyname($NameR))

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

    ToolTip("")
    GUICtrlSetState($Start, $GUI_ENABLE)
    EndIf

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

    case $msg=$NeueSuche;Das ist das Einzige wo ich den Fehler überbrücken kann
    run("ReverseDreamlevel.exe")
    WinKill($gui)

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

    case $msg=$EXIT Or $msg = $GUI_EVENT_CLOSE

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

    Exit

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

    ExitLoop
    EndSelect
    EndIf
    Wend

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

    func getnumberbyname($name)
    $quellcode='';Dachte es ist der Grund das diese Variable noch einen Inhalt hat
    $id='';;Dachte es ist der Grund das diese Variable noch einen Inhalt hat
    $ie = _IECreate( 'http://www.dreamlevel.de/suche.dl#sbk',0,0 );Startet den IE unsichtbar
    _IENavigate( $ie, "javascript:toggle_box('so_0');", 0 )
    Sleep( 2000 )
    $oQuery = _IEGetObjById($ie, "nname") ;limette: holt dir das Element direkt über die ID. Übrigens auch 'nname' ;)
    _IEFormElementSetValue ($oQuery, $NameR);fügt name ein

    _IENavigate( $ie, 'javascript:getList();', 0 )
    Sleep(2000)
    _IELoadWait($ie)
    $quellcode=_IEBodyReadHTML($ie)
    $quellcode=StringMid($quellcode,StringInStr($quellcode,"title="&$name))
    $id=StringMid($quellcode,StringInStr($quellcode,' href="http://www.dreamlevel.de/profil.dl?u=')+44)
    $id=StringLeft($id,StringInStr($id,'">')-1)
    _IEQuit($ie)
    Return $id
    EndFunc

    [/autoit]
  • Ich versteh nicht was du meinst.
    Aber du kannst dir ja einfach mal die Variablen
    überprüfen, an unterschiedlichen Stellen zB in Dateien
    oder die Konsole schreiben lassen.

    mfg limette

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.