Einzelnen Beitrag anzeigen

Andreas L.

Registriert seit: 23. Mai 2011
Ort: Furth im Wald
308 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Webbrowser eingabefeld füllen und abschicken, java script

  Alt 14. Apr 2013, 08:24
Ich bekomme einen accessviolation write of adress xxx Fehler in der Zeile:
Button.Form.Submit; ...

Egal welche Zahl ich anstatt 0 einsetze, es kommt ebenfalls ein accessviolation Fehler
webbrowser1.OleObject.document.forms.item(0).submit;
adress xxx = ???

Nur weil du mit der Angabe nichts anfangen kannst, muss das nicht auch auf alle anderen Programmierer zu treffen. Du hilfst dir selbst wenn du solche Angaben in Zukunft nicht weglässt. Danke

Tipp: Du kannst den Inhalt eines Dialog-Fensters mit STRG + C kopieren

webbrowser1.OleObject.document.forms.item(0).submit; Hast du auch meine anderen Vorschläge ausprobiert? (OleObject weglassen, auf IHTMLDocument2 casten)

Bei mir funktioniert das nämlich (siehe unten)

Dies ist das einzige Form, der Index ist 0, Name aspnetForm, es steht direkt unter <Body>:

Code:
<form action="cache_details.aspx?wp=GC2MKMM" name="aspnetForm" method="post" id="aspnetForm">
So kann es z. B. angesteuert werden:

Delphi-Quellcode:
var
  document: IHTMLDocument2;
  htmlform: IHTMLFormElement;
begin
  if Supports(WebBrowser1.Document, IHTMLDocument2, document) then
  begin
    if Supports(document.forms.item('aspnetForm', 0), IHTMLFormElement, htmlform) then
      htmlform.submit;
  end;
end;
Supports prüft ob der erste Parameter in den Typ (2. Parameter) gecastet werden kann. Bei Erfolg wird das Interface in der Variable (3. Parameter) gespeichert und die Funktion liefert true zurück. Bei .forms.item() übergebe ich als ersten Parameter den Namen der Form, als 2ten den Index. Laut MSDN ist der 2te Param optional, in den Sourcen ist er allerdings nicht als solcher definiert. Das kann bei dir evtl. anders sein.

...und dann der "Abschicken" Button gedrückt werden.
Code:
 <button class="ccu-button ccu-parseverify-accept">Annehmen</button>&nbsp;<button class="ccu-button ccu-parseverify-cancel">Abbrechen</button></dd>
In einem Post willst du den "Abschicken"-Button drücken, im nächsten gehts um den "Annehmen"-Button, dann wieder "Abschicken"... Um welchen gehts nun genau? Ich vermute mal "Abschicken"...

Der HTML-Code für den "Abschicken"-Button lautet
Code:
<button class="ccu-button ccu-parse">Abschicken</button>
Hast du versucht die ClassName des "Abschicken"-Buttons in meinem Code einzusetzen? Ich hab es: Geht teilweise...

Ich habe eine kleine Test-Anwendung geschrieben, basierend auf meinem Code und deiner HTML-Datei. Du findest die Exe + Source im Anhang.

Außerdem sind zwei HTML-Dateien enthalten. Die eine ist von dir (unverändert), bei der anderen (im Dateiname "fixed") habe ich einen DocType, <html>- & <head>-Tags ergänzt sowie ein JavaScript geändert. In meiner Datei befindet sich der Code mit den Buttons in Zeile 20 - 45. Ich musste es dort hin kopieren, weil die übergeordneten Elemente unsichtbar waren. Den <Script>-Anfangs & -End-Tag habe ich auskommentiert, auch das hatte die Buttons ausgeblendet.

In der Anwendung gibst du als erstes die URL zur Seite mit dem Formular an. Die lokalen HTML-Dateien darfst du nicht eintragen, sonst friert das Programm ein. Es sei denn, du lässt die Tests, wie ich, über einen lokalen Server laufen lassen.

Wenn die Seite geladen wurde, kannst du einen der Buttons unter "Seite laden" anklicken. Mit der Original-HTML funktioniert nur der Button "Formular direkt abschicken", bei der geänderten beide. Mit der Original-Seite bei geocaching sollten aber beide funktionieren.

Funktioniert das Test-Programm bei dir? Falls nicht, bitte die Ausgabe des Memos posten.

Tipp: Geocaching stellt übrigens eine API bereit. Damit könntest du dein Vorhaben (und noch viel mehr) einfach umsetzen. API Referenz

Tipp: Wenn du HTML noch nicht besonders gut beherrscht, ist Selfhtml eine super Seite zum lernen und nachschlagen (auch für CSS, JavaScript, etc).

Noch was:

Schwer oder unlösbar wäre es für dich mit der bisherigen Hilfestellung ganz sicher nicht gewesen. Eher schwer für Leute die dir helfen wollen, denn du hast aus der HTML-Datei den kompletten <head>-Bereich gelöscht Dort könnte wichtiges JavaScript und/oder CSS sein. Warum machst du sowas? Und das ist nicht alles: Du enthältst uns Informationen vor. Du hast z. B. noch nicht einmal gepostet wie du die Codes abgeändert hast geschweige denn wo du sie eingefügt hast. In einem ButtonOnClick-Event, WebBrowser-Event. Außerdem: Was steht z. B. vor dem Code, etc. Wenn sowas fehlt können wir nur raten...

Wenn ich an deiner Stelle wäre, also ein Hilfesuchender, würde ich von selbst so viele Informationen wie möglich posten um schnell eine funktionierende Lösung zu bekommen. Aber du lässt dir alles aus der Nase ziehen. Du willst doch das dir geholfen wird? Hilf dir selbst, in dem du uns hilfst, deine Probleme und "Selbstversuche" nachzuvollziehen. Und bitte nicht in den falschen Hals bekommen: Ich mein das nicht böse, es ist nur gut gemeint.
Angehängte Dateien
Dateityp: zip TWebbrowser-Form-ausfuellen.zip (397,4 KB, 22x aufgerufen)
Andreas Lauß
Blog
  Mit Zitat antworten Zitat