Hallo zusammen,
ich nutze AutoIt schon einige Jahre, bisher aber nur für mich programmiert und im Wesentlichen nur mit Send, Sleep, MouseClick, WinActivate, WinWaitActive, PixelChecksum o.ä. gearbeitet.
Habe nun ein Programm mit GUI angefangen, das auch andere nutzen sollen. Es geht um automatisches Ausfüllen von Forms im Intranet; nutze also die ie.au3.
Bisher fertig die Funktion zum Einloggen, das hat mich auch schon eine Weile gekostet bis ich das mit den Frames verstanden hatte:
[autoit]
Opt("WinTitleMatchMode", 2)
Opt('MustDeclareVars', 1)
#include <IE.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
; ...
Func ADDNEW()
Local $oIE, $oframe, $oform, $oUsername, $oPassword, $oSubmit
$oIE = _IECreate($pagetest) ;
$oframe = _IEFrameGetCollection($oIE, 1)
$oform = _IEFormGetObjByName($oframe, "form1")
$oUsername = _IEFormElementGetObjByName($oform,"username")
_IEFormElementSetValue($oUsername, $user)
$oPassword = _IEFormElementGetObjByName($oform,"password")
_IEFormElementSetValue($oPassword, $pw)
$oSubmit = _IEFormElementGetObjByName($oform,"submit1")
_IEAction($oSubmit,"click")
Nach dem Einloggen soll auf die nächste Seite navigiert werden (funktioniert) und dann mehrere FormElements in einer Tabelle ausgefüllt werden (funktioniert nicht).
$oIE = _IENavigate($oIE, $pagetest & "EditData.asp?ID=1300&MODE=ADD")
$oframe = _IEFrameGetCollection($oIE, 0)
$oform = _IEFormGetObjByName($oframe, "form1")
$oTable = _IETableGetCollection($oframe, 0)
$basicreason = _IEFormElementGetObjByName($oTable,"Reason")
_IEFormElementSetValue($basicreason, "HIER SOLL DER TEXT REIN")
EndFunc
Irgendwie schaffe ich es nicht die richtige Form anzusprechen. Erstmal geht es nur um die Textbox, danach kommen allerdings noch Dropdowns. Habe es u.a. mit _IETableGetCollection probiert in allen mölichen Varianten. Trotz mehrfachen rumprobierens komme ich einfach nicht auf die Lösung. Der obere Code ist mein letzter Stand des Probierens.
Falls alle Stricke reißen werde ich wieder mit Mauspositionen arbeiten, ist natürlich wesentlich langsamer und ungenauer, vor allem bei unterschiedlichen Bildschirmauflösungen.
Hier ein Auszug aus der HTML:
<html>
<head>
...
<body language="javascript" bgColor=...>
<div id="FWK_EDITWINDOW" style="left...>
...
<form name="form1" id="form1" action="ProcessData.asp" method="post">
<div align="center" class="section_header">
...
<h5 align="left">
...
<div id="FWK_TOPCMDBAR">
...
<div id="FWK_TOPREFBAR">
...
<table class="uba_table">
<>
<input name="AV_EDITABLE_0" type="hidden" value="1"/>
<tbody>
...
Alles anzeigen
Soweit der generelle Anfang, jezt erstmal die Textbox:
<tr class="uba_data_row">
<td class="uba_data_field" vAlign="top">
...
<td class="uba_data_field" colSpan="3">
<textarea name="Reason" title="Enter the Basic Reason for change." rows="4" cols="80">
Text - HIER SOLL DER TEXT REIN
Kurz vor dieser Zeile ein Beispiel eines Dropdowns
<tr class="uba_data_row">
<td class="uba_data_field" vAlign="top">
...
<td class="uba_data_field">
<select name="ProductGroupID" title="Select...">
...
<option value="107"> (das hier soll angepasst werden)
Text - Produkt 1
...
Es geht also um des Values für name="Reason" und um option value="107".
Vielleicht kann mir das Forum ja helfen?
Vielen Dank und Grüße
Marstar