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
_IE.au3 Problem
-
- [ offen ]
-
Polaris32 -
12. August 2010 um 20:21 -
Geschlossen -
Erledigt
-
-
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:
Da könntest du folgendes machen:
[autoit]
[/autoit]
$Button = _IEGetObjById ($oIE, "old_submit")
$hwnd = _IEPropertyGet($oIE, "hwnd")
_IEAction ($Button, "focus")
ControlSend($hwnd, "", "[CLASS:Internet Explorer_Server; INSTANCE:1]", "{Enter}")Achtung: Das ist nicht getestet - das überlasse ich dir.
-
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 -
-
thx das hab ich gesucht
vielen dank für die mühe -
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
-
Hast du das schon versucht?
[autoit]_IEGetObjById ($oIE, "result_box")
[/autoit] -
dann meckert die ObjGetValue funktion
"--> IE.au3 V2.4-0 Error from function _IEFormElementGetValue, $_IEStatus_InvalidObjectType" -
Poste doch mal den Quelltext.
-
so
EDIT: hab n paar kommentare reingeflickt
[autoit]#include <IE.au3>
[/autoit][autoit][/autoit][autoit]
#include <GuiConstantsEx.au3>$Form1 = GUICreate ( "Translater" , 400 , 400 )
[/autoit][autoit][/autoit][autoit]
$text = GUICtrlCreateEdit ( "" , 10 , 10 , 380 , 340 )
$Go = GUICtrlCreateButton ( "Translate!" , 160 , 355 , 80 , 30 )
GUISetState()While 1
[/autoit][autoit][/autoit][autoit]Switch GUIGetMsg()
[/autoit]
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 -
Hi ich glaube mal da wirst nicht so weiteres rankommen
denn die ID result_box ist NullCode<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")
[/autoit]
$oSelectNLang = _IEFormElementGetObjByName ($oForm, "old_tl")Und so den Wert setzen:
[autoit]_IEFormElementOptionSelect ($oSelectOLang, "en", 1, "byValue")
[/autoit]
_IEFormElementOptionSelect ($oSelectNLang, "de", 1, "byValue")Mich würde interessieren ob du weitergekommen bist - dann könntest du ja freundlicherweise den Quelltext posten.
~z8-Xrc