_IE.au3 Problem

  • Hi,
    ich wollte ein kleines script schreiben das den Google Übersetzer "Fernsteuert".
    Jetzt habe ich das problem, dass man für _IEFormElementGetObjByName ja den namen braucht und beim übersetzungsergebnis finde ich die stelle im code nicht, weil es so wie es aussieht durch javascript gemacht wird.
    Ha jemand ne idee wie ich es anders lösen könnte oder den namen doch noch finden könnte?
    Gruß Polaris

    Einmal editiert, zuletzt von Polaris32 (13. August 2010 um 02:45)

  • http://translate.google.de/translate_t?q=google&oe=utf-8&rls=org.mozilla:de:official&client=firefox-a&um=1&ie=UTF-8&sa=N&hl=de&tab=wT#
    Meinst du diese Seite?

    Die TextArea hat folgenden HTML-Code:

    Code
    <textarea id="source" dir="ltr" tabindex="0" wrap="SOFT" name="text" class="goog-textarea" style="overflow-y: hidden; overflow-x: auto; -moz-box-sizing: border-box; height: 75px;">google</textarea>

    Die kannst du so ansprechen:

    [autoit]

    _IEGetObjById ($oIE, "source")

    [/autoit]

    Der Abschicken-Knopf sieht so aus:

    Code
    <input type="submit" class="goog-button" tabindex="0" value="Übersetzen" id="old_submit">

    Da könntest du folgendes machen:

    [autoit]


    $Button = _IEGetObjById ($oIE, "old_submit")
    $hwnd = _IEPropertyGet($oIE, "hwnd")
    _IEAction ($Button, "focus")
    ControlSend($hwnd, "", "[CLASS:Internet Explorer_Server; INSTANCE:1]", "{Enter}")

    [/autoit]

    Achtung: Das ist nicht getestet - das überlasse ich dir. :D

  • thx
    ist das die textarea in die man das zeg eingibt was ich übersetzen will oder das ergebnis der übersetzung? das ergebnis fehlt mir noch

  • Das ist die TextArea in die du dein Zeug eingibst.

    Das Ergebnis steht hier:

    Code
    <span id="result_box" class="short_text"><span style="" title="">HIER STEHT DIE ÜBERSETZUNG</span></span></div>
  • das wirft n neues problem auf
    wie bekomm ich das handle oder wie das heisst mit _IEFormElementGetObjByName gehts nicht weil da kein name da steht nur class und id

  • gib mal

    [autoit]

    _GetCountdownValue()

    [/autoit]

    im Feld Suchbegriffe ein, ich mache es so siehe meinen Post

  • dann meckert die ObjGetValue funktion
    "--> IE.au3 V2.4-0 Error from function _IEFormElementGetValue, $_IEStatus_InvalidObjectType"

  • so

    EDIT: hab n paar kommentare reingeflickt

    [autoit]

    #include <IE.au3>
    #include <GuiConstantsEx.au3>

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

    $Form1 = GUICreate ( "Translater" , 400 , 400 )
    $text = GUICtrlCreateEdit ( "" , 10 , 10 , 380 , 340 )
    $Go = GUICtrlCreateButton ( "Translate!" , 160 , 355 , 80 , 30 )
    GUISetState()

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

    While 1

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

    Switch GUIGetMsg()
    Case $Go
    $seite = _IECreate ( "http://translate.google.de/?hl=de&tab=wT#" , 0 , 1 , 1 , 1 )
    $oForm = _IEGetObjByName ( $seite , "text_form" )
    $oInput = _IEFormElementGetObjByName ( $oForm , "text" )
    _IEFormElementSetValue ( $oInput , GUICtrlRead ( $text ) ) ;text eingeben
    $oOLang = _IEFormElementGetObjByName ( $oForm , "sl" )
    $oNLang = _IEFormElementGetObjByName ( $oForm , "tl" ) ;handles der spracheinstellungen finden
    _IEFormElementSetValue ( $oOLang , "fi" )
    _IEFormElementSetValue ( $oNLang , "de" ) ;sprachen einstellen
    _IEFormSubmit ( $oForm )
    Sleep ( 1000 )
    $oForm = _IEGetObjByName ( $seite , "text_form" )
    $oOLang = _IEFormElementGetObjByName ( $oForm , "sl" )
    $oNLang = _IEFormElementGetObjByName ( $oForm , "tl" )
    $oOutput = _IEGetObjById ( $oForm , "result_box" ) ; <- hier tuts nicht
    $newtxt = _IEFormElementGetValue ( $oOutput )
    _IEFormElementSetValue ( $oOLang , "de" )
    _IEFormElementSetValue ( $oNLang , "fi" )
    _IEFormElementSetValue ( $oInput , $newtxt )
    _IEFormSubmit ( $oForm )
    Sleep ( 1000 )
    $newtxt = _IEFormElementGetValue ( $oOutput )
    If @error Then
    GUICtrlSetData ( $text , $newtxt & @crlf & @error & @CRLF & $oInput )
    Else
    GUICtrlSetData ( $text , $newtxt )
    EndIf
    _IEQuit ( $seite )
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von Polaris32 (13. August 2010 um 21:02)

  • Hi ich glaube mal da wirst nicht so weiteres rankommen
    denn die ID result_box ist Null

    Code
    <span id=result_box class="short_text">
    <span title="Hallo" onmouseover="this.style.backgroundColor='#ebeff9'"
    onmouseout="this.style.backgroundColor='#fff'">Hei<br></span></span>

    und der zweite span hat weder eineID noch einen namen. Soweit ich weis gibt es noch keine Funktion _IEFormGetObjBytitle ($oIE, "f") die dir über den Titel einen Wert ausheben kann.
    _IETagNameAllGetCollection könnte vielleicht gehen. musst halt im Array suchen.

  • Ich denke du musst an der Stelle den HTML-Code auslesen:

    [autoit]

    $sHTML = _IEBodyReadHTML ($seite)

    [/autoit]

    und dann mit StringRegExp oder einem Ähnlichen Verfahren die Übrsetzung extrahieren.

    StringRegExp fällt mir nach wie vor schwer - mein erster Ansatz wäre so:

    [autoit]

    $newtxt = StringRegExp($sHTML, '<span id="result_box" class="short_text"><span style="" title="">(.+)</span></span></div><div id="translit" dir="ltr" style="text-align: left; display: none;">', 1)

    [/autoit]

    Außerdem würde ich die beiden Select-Boxen so ansteuern:

    [autoit]

    $oSelectOLang = _IEFormElementGetObjByName ($oForm, "old_sl")
    $oSelectNLang = _IEFormElementGetObjByName ($oForm, "old_tl")

    [/autoit]

    Und so den Wert setzen:

    [autoit]

    _IEFormElementOptionSelect ($oSelectOLang, "en", 1, "byValue")
    _IEFormElementOptionSelect ($oSelectNLang, "de", 1, "byValue")

    [/autoit]

    Mich würde interessieren ob du weitergekommen bist - dann könntest du ja freundlicherweise den Quelltext posten. :rolleyes:


    ~z8-Xrc