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> <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.