GeckoBrowser WebFormulare ausfüllen
GeckoBrowser WebFormulare ausfüllen
Hallo,
ich würde gerne in meiner GeckoBrowser-Komponente automatisch in Internetseiten Formulare ausfüllen und
- Checkboxen
- Editfelder
- Listboxen
mit bekanntem Namen ansprechen. Nach langer vergeblicher Suche hoffe ich das ihr mir weiterhelfen könnt ?!
ich würde gerne in meiner GeckoBrowser-Komponente automatisch in Internetseiten Formulare ausfüllen und
- Checkboxen
- Editfelder
- Listboxen
mit bekanntem Namen ansprechen. Nach langer vergeblicher Suche hoffe ich das ihr mir weiterhelfen könnt ?!
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: GeckoBrowser WebFormulare ausfüllen
Brauchst du das Formular unbedingt angezeigt ?
Wenn nicht send das Formular direkt mit Synapse hier ist n Beispiel http://www.ararat.cz/synapse/doku.php/p ... :htmlforms
Wenn nicht send das Formular direkt mit Synapse hier ist n Beispiel http://www.ararat.cz/synapse/doku.php/p ... :htmlforms
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Re: GeckoBrowser WebFormulare ausfüllen
Danke für die Antwort, leider löst es mein Problem noch nicht, denn ich brauche das Formular angezeigt. Im Prinzip soll es wie im folgenden beschrieben funktionieren. Mit einem Klick auf einen Button sollen automatisch u.a. checkboxen im Internetformular gesetzt und angezeigt werden. Dabei ist das Formular der Internetseite mit Javascript geschrieben.
Re: GeckoBrowser WebFormulare ausfüllen
Du kannst es ja anzeigen und trotzdem mit Synapse die Daten senden.Medic hat geschrieben:Danke für die Antwort, leider löst es mein Problem noch nicht, denn ich brauche das Formular angezeigt.
Letztlich werden immer irgendwelche Daten an den Server geschickt.
Sieht z.B. so aus
http://en.wikipedia.org/wiki/POST_%28HT ... _web_forms
Das kann man fast immer auch ohne HTML, DOM und JS erreichen.
Es gibt Tools, um zu prüfen welche Felder im Endeffekt gesendet werden. Hier z.B. bei Firefox:
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: GeckoBrowser WebFormulare ausfüllen
Das bringt ihm ja aber nichts, er will ja normalerweise den Nutzer das Formular ausfüllen lassen und nur zusätzlich nen Button anbieten um irgendwelche Standardwerte zu setzen der Benutzer schickt das Formular dann manuell ab, richtig?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Re: GeckoBrowser WebFormulare ausfüllen
Kann schon sein, aber "von aussen" wüsste ich nicht wie das gehen soll.Christian hat geschrieben:Das bringt ihm ja aber nichts, er will ja normalerweise den Nutzer das Formular ausfüllen lassen und nur zusätzlich nen Button anbieten um irgendwelche Standardwerte zu setzen der Benutzer schickt das Formular dann manuell ab, richtig?
Da müsste man wahrsch. über die Internas (DOM und entspr. Funktionen) machen.
Bei IE habe ich sowas schon mal gemacht (über IHTMLDocument2) aber bei Gecko habe ich keine Ahnung.
Hat letztlich auch wenig mit Lazarus zu tun.
Re: GeckoBrowser WebFormulare ausfüllen
Ok da muss ich wohl etwas ausholen... Ich arbeite in einer Krankenhausnotaufnahme. Mit einem Programm werden live sehr viele Daten sofort in ein Tablet eingegeben und automatisch so sortiert das sie dem Internetformular entsprechen in das sie eingegeben werden. Es ist also im Prinzip ein klon der Internetversion mit gleicher Anzahl an checkboxen, Edits und Auswahlfelder, das ganze läuft gut und stabil. Der Plan ist die Eingabeseite im Internet z.B. via Geckobrowser componente zu öffnen und mit einem klick auf einen Button die Felder automatisch in das 1:1 Gleich aussehende Formular zu übertragen und zwar so das es sichtbar ist und nicht im Hintergrund einfach weggeschickt wird. Bin auch bereit die Browsercomponente zu wechseln wenn jemand eine idee hat welche besser geeignet ist.
Re: GeckoBrowser WebFormulare ausfüllen
Ich glaube da musst du noch ein bisschen weiter ausholen. Ich verstehe nicht was du meinst.
Willst du für das Tablet programmieren? Android? Oder wie kommen die Daten auf einen PC?
Willst du für das Tablet programmieren? Android? Oder wie kommen die Daten auf einen PC?
Re: GeckoBrowser WebFormulare ausfüllen
Windows Surface Pro2 ist halt ein vollwertiges Windows tablet damit klappt es.
Re: GeckoBrowser WebFormulare ausfüllen
Sag das doch gleich. "Tablet" verwirrt ja nur.
Wenn dort MSIE läuft, würde ich da anknüpfen, das ist besser dokumentiert.
Start hier: http://wiki.freepascal.org/LazActiveX
Doku für Delphi's TWebbrowser sollte mehr oder weniger gültig sein.
http://www.swissdelphicenter.ch/de/tips ... Webbrowser
http://delphi.about.com/od/twebbrowser/
etc.
Wenn dort MSIE läuft, würde ich da anknüpfen, das ist besser dokumentiert.
Start hier: http://wiki.freepascal.org/LazActiveX
Doku für Delphi's TWebbrowser sollte mehr oder weniger gültig sein.
http://www.swissdelphicenter.ch/de/tips ... Webbrowser
http://delphi.about.com/od/twebbrowser/
etc.
Re: GeckoBrowser WebFormulare ausfüllen
Das mit dem ActivX hatte ich auch schon als eine Lösung ins Auge gefasst und mir die komponente Heute schon instaliert. Dann bastel ich jetzt mal ein wenig und versuche einen Browser damit zum laufen zu bringen. Funktioniert er mit ähnlichen Codes wie die TWebbrowser delphi komponente könnte ich eine Chance haben.
Re: GeckoBrowser WebFormulare ausfüllen
Ja viel Glück.
Ein Unterschied zu Delphi ist, dass man über <Komponente>.ComServer oder OleServer an den "Stoff" kommt.
Ein Unterschied zu Delphi ist, dass man über <Komponente>.ComServer oder OleServer an den "Stoff" kommt.
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: GeckoBrowser WebFormulare ausfüllen
http://delphi.about.com/od/twebbrowser/ ... b_form.htm könnte Dir da auch noch weiter helfen!
Also es funzt, ein paar kleinere Probleme behoben, es sieht dann wie folgt aus in Unit1 muss unter uses noch MSHTML_4_0_TLB hinzugefügt werden!!!
Code: Alles auswählen
function WebFormNames(const document: IHTMLDocument2): TStringList;
var
forms: IHTMLElementCollection;
form: IHTMLFormElement;
idx: integer;
begin
forms := document.Forms as IHTMLElementCollection;
result := TStringList.Create;
for idx := 0 to -1 + forms.length do
begin
form := forms.item(idx,0) as IHTMLFormElement;
result.Add(form.name) ;
end;
end;
function WebFormGet(const formNumber: integer; const document: IHTMLDocument2): IHTMLFormElement;
var
forms: IHTMLElementCollection;
begin
forms := document.Forms as IHTMLElementCollection;
result := forms.Item(formNumber,'') as IHTMLFormElement
end;
function WebFormFields(const document: IHTMLDocument2; const formName: string): TStringList;
var
form: IHTMLFormElement;
field: IHTMLElement;
fName: string;
idx: integer;
begin
form := WebFormGet(0, document) ;
result := TStringList.Create;
for idx := 0 to form.length-1 do
begin
field := form.item(idx, '') as IHTMLElement;
if field = nil then Continue;
fName := field.id;
if field.tagName = 'INPUT' then fName := (field as IHTMLInputElement).name;
if field.tagName = 'SELECT' then fName := (field as IHTMLSelectElement).name;
if field.tagName = 'TEXTAREA' then fName := (field as IHTMLTextAreaElement).name;
result.Add(fName) ;
end;
end;
function WebFormFieldValue(const document: IHTMLDocument2; const formNumber: integer; const fieldName: string): string;
var
form: IHTMLFormElement;
field: IHTMLElement;
begin
form := WebFormGet(formNumber, document);
field := form.Item(fieldName,'') as IHTMLElement;
if field = nil then Exit;
if field.tagName = 'INPUT' then result := (field as IHTMLInputElement).value;
if field.tagName = 'SELECT' then result := (field as IHTMLSelectElement).value;
if field.tagName = 'TEXTAREA' then result := (field as IHTMLTextAreaElement).value;
end;
procedure WebFormSetFieldValue(const document: IHTMLDocument2; const formNumber: integer; const fieldName, newValue: string);
var
form: IHTMLFormElement;
field: IHTMLElement;
begin
form := WebFormGet(formNumber, document);
field := form.Item(fieldName,'') as IHTMLElement;
if field = nil then Exit;
if field.tagName = 'INPUT' then (field as IHTMLInputElement).value := newValue;
if field.tagName = 'SELECT' then (field as IHTMLSelectElement).value := newValue;
if field.tagName = 'TEXTAREA' then (field as IHTMLTextAreaElement).value := newValue;
end;
procedure WebFormSubmit(const document: IHTMLDocument2; const formNumber: integer);
var
form : IHTMLFormElement;
field: IHTMLElement;
begin
form := WebFormGet(formNumber, document);
form.submit;
end;
//ersetzt im download die Funktion btnTestClick
procedure TForm1.btnTestClick(Sender: TObject);
var
document: IHTMLDocument2;
sl : TStringList;
i: integer;
begin
document := Browser.ComServer.Document As IHTMLDocument2;
sl := WebFormNames(Document);
try
for i:=0 to sl.Count-1 do
Writeln('Form.Names: ' + sl.Strings[i]); // listet die Form Namen soweit das Form einen Namen hat
finally
sl.Free;
end;
sl := WebFormFields(document, '');
try
for i:=0 to sl.Count-1 do
WriteLn('Field.Names: ' + sl.Strings[i]); // listet die Feld Namen
finally
sl.Free;
end;
end;
Zuletzt geändert von gocher am Sa 14. Dez 2013, 21:48, insgesamt 3-mal geändert.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
Re: GeckoBrowser WebFormulare ausfüllen
Das hier ist vllt.auch noch praktisch:
http://www.delphidabbler.com/tips/56 (evtl. uses MSHTML_4_0_TLB, Variants; )
Z.B so:
http://www.delphidabbler.com/tips/56 (evtl. uses MSHTML_4_0_TLB, Variants; )
Z.B so:
Code: Alles auswählen
Document2 := Browser.ComServer.Document as IHTMLDocument2;
Elt:=GetElementById(Document2,'mycheck') as IHTMLInputElement;
Elt.checked:=false;
Re: GeckoBrowser WebFormulare ausfüllen
Danke gocher und theo. Also ich habe die Browserkomponente mit activeX nachgebaut und integriert, dabei war mir das Beispiel von gocher an der ein oder anderen Stelle hilfreich
Der nächste Schritt wäre jetzt die Elemente anhand ihrer Id wie von theo vorgeschlagen zu ermitteln und sie anzusprechen. Das mit der String List ist zwar eine gute Idee für den Anfang für mich jetzt aber noch etwas zu Komplex. Im Moment ist mein Problem wie ich die Beispiele mit dem TWebbrowser Element auf meine neue BrowserKomponente umgeschrieben kriege. Um mit dem einfachsten also einem Editfeld zu beginnen werfe ich mal ein Quellcodebeispiel einer fiktiven Komponente die ich gerne Ansprechen würde in den Raum.
<input tabindex="1" type="text" name="Patientennummer" id="Patientennummer" value="123456" size="10" maxlength="6" />
Ich werde mich jetzt erst mal in eure Links einlesen und schauen was die so hergeben...

<input tabindex="1" type="text" name="Patientennummer" id="Patientennummer" value="123456" size="10" maxlength="6" />
Ich werde mich jetzt erst mal in eure Links einlesen und schauen was die so hergeben...