Nun bin ich letztens auf ein Beisiel von Hroudtwolf: http://purebasic-lounge.com/viewtopic.php?t=5986 gestossen, mit dem man den Inhalt besagter Felder auslesen kann.
Mit etwas Probieren und unter Anwendung meiner mangelnden Englischkenntnisse ist es mir gelungen, den Code etwas umzubauen und Text in Felder hineinzuschreiben, als Abfallprodukt auch Checkboxen zu setzen. Bei Radiobuttons geht es auch, aber nur bei den Webseiten, wo diese keine gleichen Namen/Ids haben. Wenn sie gleich sind funktioniert es nur beim 1.Radiobutton.
Als Beispiel habe ich den Paketschein von Hermes genommen. Die Daten welche ich in die Felder setze, habe ich als Datas abgelegt. In einem echten Programm wird man diese sicher woanders herholen. Hauptsache die Daten sind in einem Feld mit der richtigen Reihenfolge.
Den AnmeldeButton habe ich disabled. Existiert nur um zu zeigen, das man auch Anmeldedaten einsetzen kann.
Was ich nicht geschafft habe, ist automatisch einen Button zu drücken. Es muß gehen, aber ich check die Sache mit dem "onclick Event" nicht.
Wer könnte da helfen ?
Nach dem Ausfüllen wird der Button -Paketschein drucken- auf der Webseite gedrückt, es wird gerechnet und Hermes ruft den AcrobateReader auf. Dieser wiederrum ruft den IE auf. Es kann sein, das es dabei zu einer Fehlermeldung kommt. Dann einfach solange drücken bis es klappt. Ist zumindest bei mir manchmal so. Liegt nicht am Code sondern ganz sicher am Zusammenspiel von Hermes und dem IE.
Und die wichtigste Frage, wo bekommt man die Feldnamen her. Einfach den Quellcode einer Webseite anzeigen lassen.
Beim IE: Ansicht/Quelltext. Bei Google Chrome: Aktulle Seite bearbeiten/Entwickler/Quelle anzeigen.
Dort Suchen nach z.B. <input type="text" name="empfaenger(NACHNAME)"
oder <input type="radio" value="1" alt="noImageReplacement" tabindex="56" id="mwStAusweis1"
oder <input class="prips" name="password" dir="ltr" id="pass" type="password"/>
Der Feldname ist entweder name= oder id=. Das muß man ausprobieren. Manchmal ist es auch egal.
Code: Alles auswählen
;Hermespaketschein ausfüllen HJBremer / Hroudtwolf
#urlHermes = "http://privatpaketservice.hlg.de/wps/portal/PRIPS_DEU/PAKETVERSAND"
Enumeration
#main_window
#web_gadget
#web_butEnd
#web_but1
#web_but2
EndEnumeration
#abstand = 10
#buttonbr = 99
#buttonhh = 22
#infofeldhh = 50
;Hermes
#hermesmax = 10
Global Dim hermesadrfeld$(#hermesmax)
Global Dim hermesabsender$(#hermesmax)
Global Dim hermesempfaenger$(#hermesmax)
Procedure PrgResize()
windowbr = WindowWidth(#main_window)
windowhh = WindowHeight(#main_window)
wbr = windowbr - #abstand - #abstand
whh = windowhh - #abstand - #abstand - #abstand - #infofeldhh
ResizeGadget(#web_gadget, #PB_Ignore, #PB_Ignore, wbr, whh)
bze = #abstand + #abstand + whh
bsp = #abstand
ResizeGadget(#web_but1, bsp, bze, #PB_Ignore, #PB_Ignore)
bsp + #abstand + #buttonbr
ResizeGadget(#web_but2, bsp, bze, #PB_Ignore, #PB_Ignore)
bspEnd = windowbr - #abstand - #buttonbr
ResizeGadget(#web_butEnd, bspEnd, bze, #PB_Ignore, #PB_Ignore)
EndProcedure
Procedure WebGadgetInfo(info$, p=0)
StatusBarText(0, p, info$)
EndProcedure
Procedure WebGadget_ScrollY(y)
webscroll = y
SetGadgetAttribute(#web_gadget, #PB_Web_ScrollY, webscroll)
EndProcedure
Procedure WebgadgetBusy()
;warten bis fertig geladen
While GetGadgetAttribute(#web_gadget, #PB_Web_Busy)
While WindowEvent(): Delay(1) : Wend
Wend
EndProcedure
Procedure WebgadgetLoad(url$)
SetGadgetText(#web_gadget, url$)
WebgadgetInfo(url$)
WebgadgetInfo("Bitte warten",1)
WebgadgetBusy()
WebgadgetInfo("",1)
DisableGadget(#web_but2,0)
EndProcedure
Procedure WebgadgetInput ( sKey.s , text$="" , checked=0, flag=0 )
;von Hroudtwolf: http://purebasic-lounge.com/viewtopic.php?t=5986
Protected WebBrowser .IWebBrowser2 = GetWindowLongPtr_( GadgetID ( #web_gadget ) , #GWL_USERDATA )
Protected Dispatch .iDispatch
Protected Document .IHTMLDocument3
Protected Element .IHTMLElement
Protected InputElement .IHTMLInputElement
If Not ( WebBrowser\get_Document( @ Dispatch ) = #S_OK )
Dispatch\Release()
ProcedureReturn
EndIf
If Not ( Dispatch\QueryInterface( ? IID_IHTMLDocument3 , @ Document ) = #S_OK )
Document\Release()
Dispatch\Release()
ProcedureReturn
EndIf
If Not ( Document\getElementById( sKey , @ Element ) = #S_OK And Element )
Document\Release()
Dispatch\Release()
ProcedureReturn
EndIf
If Not ( Element\QueryInterface( ? IID_IHTMLInputElement , @ InputElement ) = #S_OK)
Element\Release()
Document\Release()
Dispatch\Release()
ProcedureReturn
EndIf
;dieser kleine Teil ist von mir
If flag = 0
;Text übergeben
If Not ( InputElement\put_Value( text$ ) = #S_OK )
Element\Release()
Document\Release()
Dispatch\Release()
ProcedureReturn
EndIf
ElseIf flag = 1
;Checkbox/Radiobutton, wenn Radiobuttons alle die gleiche ID, nur den 1.
If Not ( InputElement\put_checked( checked ) = #S_OK )
Element\Release()
Document\Release()
Dispatch\Release()
ProcedureReturn
EndIf
EndIf
InputElement\Release()
Element\Release()
Document\Release()
Dispatch\Release()
DataSection
IID_IHTMLDocument3: ; { 3050F485-98B5-11CF-BB82-00AA00BDCE0B }
Data.l $3050F485
Data.w $98B5 , $11CF
Data.b $BB , $82 , $00 , $AA , $00 , $BD , $CE , $0B
IID_IHTMLInputElement: ; { 3050f5d2-98b5-11cf-bb82-00aa00bdce0b }
Data.l $3050F5D2
Data.w $98B5 , $11CF
Data.b $BB , $82 , $00 , $AA , $00 , $BD , $CE , $0B
EndDataSection
EndProcedure
Procedure HermesAnmeldung()
key$ = "userid"
txt$ = "HJBREMER"
WebGadgetInput(key$, txt$)
key$ = "password"
txt$ = "blabla"
WebGadgetInput(key$, txt$)
WebgadgetInfo("Drücken Sie den Anmeldebutton auf der Webseite")
EndProcedure
Procedure HermesReadDaten()
Restore HermesAdrFeldname
For j = 1 To #hermesmax: Read.s hermesadrfeld$(j): Next
Restore HermesAdrAbsender
For j = 1 To #hermesmax: Read.s hermesabsender$(j): Next
Restore HermesAdrEmpfaenger
For j = 1 To #hermesmax: Read.s hermesempfaenger$(j): Next
DataSection
HermesAdrFeldname:
Data.s "(NACHNAME)"
Data.s "(VORNAME)"
Data.s "(ADRESSZUSATZ)"
Data.s "(STRASSE)"
Data.s "(HAUSNUMMER)"
Data.s "(PLZ)"
Data.s "(ORT)"
Data.s "(VORWAHL)"
Data.s "(TELEFON)"
Data.s "(EMAIL)"
HermesAdrAbsender:
Data.s "Musterfrau"
Data.s "Ute"
Data.s ""
Data.s "Mühlenhof"
Data.s "1"
Data.s "24534"
Data.s "Neumünster"
Data.s "04321"
Data.s "00000"
Data.s "Mustermann@t-online.de"
HermesAdrEmpfaenger:
Data.s "Otto Mustermann"
Data.s ""
Data.s ""
Data.s "Bachstr.1"
Data.s ""
Data.s "45529"
Data.s "Hattingen"
Data.s ""
Data.s ""
Data.s ""
EndDataSection
EndProcedure
Procedure HermesSetDaten()
For j = 1 To #hermesmax
key$ = "absender" + hermesadrfeld$(j)
txt$ = hermesabsender$(j)
WebGadgetInput(key$, txt$)
key$ = "empfaenger" + hermesadrfeld$(j)
txt$ = hermesempfaenger$(j)
WebGadgetInput(key$, txt$)
Next
;Paketart: paket(p1) = S / paket(p2) = M
key$ = "paket(p1)"
txt$ = "1"
WebGadgetInput(key$, txt$)
;Checkboxen
flag = 1
key$ = "bestaetigungWertBox"
WebGadgetInput(key$, "", 1, flag)
key$ = "bestaetigungAgb"
WebGadgetInput(key$, "", 1, flag)
; key$ = "auktionsnummer"
; txt$ = "380123456789"
; WebGadgetInput(key$, txt$)
WebgadgetInfo("Drücken Sie den Button: --> Paketschein drucken")
EndProcedure
;---------------------------------------------------------------------------
flag = #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget
flag | #PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget
hwnd = OpenWindow(#main_window, 0, 0, 900, 600, "Hermes", flag)
CreateStatusBar(0, WindowID(#main_window))
AddStatusBarField(#PB_Ignore)
AddStatusBarField(#PB_Ignore)
WebGadget(#web_gadget, #abstand, #abstand, 0, 0, "")
ButtonGadget(#web_butEnd, 0, 0, #buttonbr, #buttonhh, "Ende")
ButtonGadget(#web_but1, 0, 0, #buttonbr, #buttonhh, "anmelden")
ButtonGadget(#web_but2, 0, 0, #buttonbr, #buttonhh, "ausfüllen")
DisableGadget(#web_but1,1)
DisableGadget(#web_but2,1)
PrgResize()
WebgadgetLoad(#urlHermes)
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_SizeWindow: PrgResize()
Case #PB_Event_Gadget
Select EventGadget()
Case #web_but1: HermesAnmeldung()
Case #web_but2
HermesReadDaten()
HermesSetDaten()
WebGadget_ScrollY(99999)
Case #web_butEnd: event = #PB_Event_CloseWindow
EndSelect
EndSelect
Until event = #PB_Event_CloseWindow
End