Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Webbrowser Radiobutton ansprechen (https://www.delphipraxis.net/115459-webbrowser-radiobutton-ansprechen.html)

Speedfighter 12. Jun 2008 12:48


Webbrowser Radiobutton ansprechen
 
Guten Tag liebe Delphi Community ;)

Ich krieg es einfach nicht gebacken einen Radiobutton mit der Komponente Webbrowser1 anzusprechen

Habe schon zahlreiche Codes hier verwendet dafür doch bis jetzt hat keine funktioniert :(

Code:
<div class="dxf_div_right"><label for="spende_modus1" id="label_spende_modus1">einmalig</label></div>
<div class="dxf_div_left"><input type="radio" name="spende_modus" onclick="dxfZahlungsartSwitchValues(this.value)"
 class="dxf_fie_req" tabindex="10" id="spende_modus1" value="einmalig" title="einmalig" /></div>

<div style="clear:both"></div>
</div>
Könnten sie mir ein funktionierenden Code übermitteln der auch schon getestet wurde ;)

Und wäre auch noch nett wenn sie mir auch grad ein Codebeispiel geben wie mann Select Felder und Checkboxen anspricht ;)

Mit freundlichen Grüßen
Speedfighter

toms 12. Jun 2008 14:12

Re: Webbrowser Radiobutton ansprechen
 
Hallo und Willkommen in der DP :cheer:

Für das Mini Webbrowser Demo habe ich solche Funktionen geschrieben. Hast du diese auch schon ausprobiert?

Speedfighter 12. Jun 2008 14:27

Re: Webbrowser Radiobutton ansprechen
 
Danke schön,

Ja den 1500 Zeiler habe ich mir angekuckt ;)

Aber ich habe dort nix gefunden.
Es sollte ja etwa so gehen :

Mann klickt auf einen Button und dann soll er die Checkbox oder den Radiobutton markieren :/

Mit freundlichen Grüßen,
Speedfighter

toms 12. Jun 2008 16:02

Re: Webbrowser Radiobutton ansprechen
 
Die Funktion befindet sich in der Unit WBFuncs und heißt WB_SetRadioCheckboxField()

Aufruf für einen Radiobutton:

Delphi-Quellcode:
  WB_SetRadioCheckboxField(WB, 'checkbox', 'RadioButtonName', True);
Aufruf für eine Checkbox:

Delphi-Quellcode:
  WB_SetRadioCheckboxField(WB, 'radio', 'CheckboxName', True);
In deinem Fall sollte es so gehen:

Delphi-Quellcode:
  WB_SetRadioCheckboxField(WB, 'checkbox', 'spende_modus', True);


Delphi-Quellcode:
function WB_FindFieldByValue(WebBrowser: TWebBrowser; FieldType, FieldValue: string; var Field: TPoint): boolean;
var
  i, j: Integer;
  FormItem: Variant;
begin
  Result := False;
  if Assigned(WebBrowser.Document) then
  begin
  if WebBrowser.OleObject.Document.all.tags('FORM').Length <> 0 then
    for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
    begin
      FormItem := WebBrowser.OleObject.Document.forms.Item(I);
      for j := 0 to FormItem.Length - 1 do
      begin
        try
          if (FormItem.Item(j).Value = FieldValue) and
            (FormItem.Item(j).Type = FieldType) then
          begin
            Field.x := i;
            Field.Y := j;
            Result := True;
            Exit;
          end;
        except
         // Exit;
        end;
      end;
    end;
  end;
end;

function WB_SetRadioCheckboxField(WebBrowser: TWebBrowser; FieldType, FieldValue: string; Checked: boolean): Boolean;
var
  Field: TPoint;
begin
  Result := WB_FindFieldByValue(WebBrowser, FieldType, FieldValue, Field);
  if Result then
  try
    WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Checked := Checked;
    Result := True;
  except
    Result := False;
  end;
end;

Speedfighter 12. Jun 2008 16:12

Re: Webbrowser Radiobutton ansprechen
 
Code:
WB_SetRadioCheckboxField(WebBrowser1, 'checkbox', 'allgemein_datenschutzerklaerung', True);
Den Code den sie oben gepostet haben hat net geklappt wegen dem WB was hat das eigentlich zu bedeuten ...

Es kommt immer ein Fehler

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EOleError mit der Meldung 'Die Methode 'Value' wird vom Automatisierungsobjekt nicht unterstützt' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

In der Zeile ist der Fehler

Code:
    if (FormItem.Item(j).Value = FieldValue) and

Der.Kaktus 12. Jun 2008 16:43

Re: Webbrowser Radiobutton ansprechen
 
Zitat:

Zitat von Speedfighter
Code:
WB_SetRadioCheckboxField(WebBrowser1, 'checkbox', 'allgemein_datenschutzerklaerung', True);
Den Code den sie oben gepostet haben hat net geklappt wegen dem WB was hat das eigentlich zu bedeuten ...

Es kommt immer ein Fehler

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EOleError mit der Meldung 'Die Methode 'Value' wird vom Automatisierungsobjekt nicht unterstützt' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

In der Zeile ist der Fehler

Code:
    if (FormItem.Item(j).Value = FieldValue) and


WB=WebBrowser ....Du musst die UNIT WBFuncs mit einbinden..wie "toms" oben schrieb!!

Speedfighter 12. Jun 2008 16:44

Re: Webbrowser Radiobutton ansprechen
 
Entschuldigen sie aber es kam dort immer dieser Fehler

[Pascal Fataler Fehler] Unit1.pas(7): F1026 Datei nicht gefunden: 'WBFuncs.dcu'

Der.Kaktus 12. Jun 2008 16:51

Re: Webbrowser Radiobutton ansprechen
 
Zitat:

Zitat von Speedfighter
Entschuldigen sie aber es kam dort immer dieser Fehler

[Pascal Fataler Fehler] Unit1.pas(7): F1026 Datei nicht gefunden: 'WBFuncs.dcu'


Die Unit ist beim Webbrowser im Verzeichnis "unit" enthalten...das Verzeichnis muss , beim compilieren, im Suchpfad eingetragen sein..Optionen/Verzeichnisse sowie in der Uses Anweisung angegeben werden.

Speedfighter 12. Jun 2008 17:06

Re: Webbrowser Radiobutton ansprechen
 
Es exestiert kein Ordner mit den Namen "unit" nur mit "Dunit"

toms 12. Jun 2008 17:23

Re: Webbrowser Radiobutton ansprechen
 
Die Unit wird nicht unbedingt benötigt, du kannst einfach die 2 Funktionen von oben nehmen.

Die Fehlermeldung sollte außerhalb von Delphi nicht auftreten.

Speedfighter 12. Jun 2008 17:49

Re: Webbrowser Radiobutton ansprechen
 
[Pascal Fehler] Unit1.pas(93): E2010 Inkompatible Typen: 'TWebBrowser' und 'TGUID'
[Pascal Fataler Fehler] Project1.dpr(5): F2063 Verwendete Unit 'Unit1.pas' kann nicht compiliert werden

Code:
WB_SetRadioCheckboxField(WB, 'checkbox', 'allgemein_datenschutzerklaerung', True);
lol und was ist jetzt der Fehler?

Der.Kaktus 12. Jun 2008 17:50

Re: Webbrowser Radiobutton ansprechen
 
Zitat:

Zitat von Speedfighter
[Pascal Fehler] Unit1.pas(93): E2010 Inkompatible Typen: 'TWebBrowser' und 'TGUID'
[Pascal Fataler Fehler] Project1.dpr(5): F2063 Verwendete Unit 'Unit1.pas' kann nicht compiliert werden

Code:
WB_SetRadioCheckboxField(WB, 'checkbox', 'allgemein_datenschutzerklaerung', True);
lol und was ist jetzt der Fehler?


Poste mal Deinen Quelltext...wir schauen mal....

Speedfighter 12. Jun 2008 17:51

Re: Webbrowser Radiobutton ansprechen
 
Hier mein Kompletter Quelltext

Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw, XPMan, ExtCtrls;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    GroupBox1: TGroupBox;
    LabeledEdit1: TLabeledEdit;
    LabeledEdit2: TLabeledEdit;
    XPManifest1: TXPManifest;
    LabeledEdit3: TLabeledEdit;
    LabeledEdit4: TLabeledEdit;
    LabeledEdit5: TLabeledEdit;
    LabeledEdit6: TLabeledEdit;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

function WB_FindFieldByValue(WebBrowser: TWebBrowser; FieldType, FieldValue: string; var Field: TPoint): boolean;
var
  i, j: Integer;
  FormItem: Variant;
begin
  Result := False;
  if Assigned(WebBrowser.Document) then
  begin
  if WebBrowser.OleObject.Document.all.tags('FORM').Length <> 0 then
    for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
    begin
      FormItem := WebBrowser.OleObject.Document.forms.Item(I);
      for j := 0 to FormItem.Length - 1 do
      begin
        try
          if (FormItem.Item(j).Value = FieldValue) and
            (FormItem.Item(j).Type = FieldType) then
          begin
            Field.x := i;
            Field.Y := j;
            Result := True;
            Exit;
          end;
        except
         // Exit;
        end;
      end;
    end;
  end;
end;

function WB_SetRadioCheckboxField(WebBrowser: TWebBrowser; FieldType, FieldValue: string; Checked: boolean): Boolean;
var
  Field: TPoint;
begin
  Result := WB_FindFieldByValue(WebBrowser, FieldType, FieldValue, Field);
  if Result then
  try
    WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Checked := Checked;
    Result := True;
  except
    Result := False;
  end;
end;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.OleObject.document.forms.item(0).elements.item('person_vorname').value:='Eric';
WebBrowser1.OleObject.document.forms.item(0).elements.item('person_nachname').value:='Abt';
WebBrowser1.OleObject.document.forms.item(0).elements.item('adresse_strasse').value:='Knesebeckstrasse';
WebBrowser1.OleObject.document.forms.item(0).elements.item('adresse_postleitzahl').value:='57639';
WebBrowser1.OleObject.document.forms.item(0).elements.item('person_email').value:='Spende@discardmail.com';
WebBrowser1.OleObject.document.forms.item(0).elements.item('adresse_hausnummer').value:='43';
WebBrowser1.OleObject.document.forms.item(0).elements.item('adresse_ort').value:='Oberdreis';
WebBrowser1.OleObject.document.forms.item(0).elements.item('kreditkarte_nummer').value:=LabeledEdit1.text;
WebBrowser1.OleObject.document.forms.item(0).elements.item('kreditkarte_inhaber').value:=LabeledEdit2.text;
WebBrowser1.OleObject.document.forms.item(0).elements.item('kreditkarte_kpn').value:=LabeledEdit6.text;
WB_SetRadioCheckboxField(WB, 'checkbox', 'allgemein_datenschutzerklaerung', True);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
webbrowser1.Navigate('https://www.aerzte-ohne-grenzen.de/Spenden/Online.php');
end;

end.

Der.Kaktus 12. Jun 2008 17:54

Re: Webbrowser Radiobutton ansprechen
 
noch keine Antwort, erst schauen muss..aber mal eins...

[OT]
Dir mal nen Lob aussprech...wenn alle so waeren hier in der DP...weiter so..dann machts auch wieder Spass zu helfen..
Sollten sich einige mal abschauen!!!!
[/OT]

[EDIT]

Delphi-Quellcode:
WB_SetRadioCheckboxField(WB, 'checkbox', 'allgemein_datenschutzerklaerung', True);
Du musst anstatt "WB"..."Webbrowser1" schreiben!!

[/EDIT]

Speedfighter 12. Jun 2008 18:13

Re: Webbrowser Radiobutton ansprechen
 
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EOleError mit der Meldung 'Die Methode 'Value' wird vom Automatisierungsobjekt nicht unterstützt' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

da kommt immer wieder dieser Fehler :(

Wie kann ich die Unit da in Delphi benutzen?

vllt hat jemand Teamviewer oder VNC?

Der.Kaktus 12. Jun 2008 18:24

Re: Webbrowser Radiobutton ansprechen
 
Der Wert "VALUE" ist nich definiert auf der Web-Site..schau mal mit "toms" seinem WINSPY 2008 (suche in der DP)..wie die Felder genau heissen.

Speedfighter 12. Jun 2008 19:17

Re: Webbrowser Radiobutton ansprechen
 
So hab das Tool jetzt aber kann mann damit echt herausfinden wie der Radiobutton heisst :P sieht net so aus bei mir

Der.Kaktus 12. Jun 2008 19:25

Re: Webbrowser Radiobutton ansprechen
 
Zitat:

Zitat von Speedfighter
So hab das Tool jetzt aber kann mann damit echt herausfinden wie der Radiobutton heisst :P sieht net so aus bei mir

Du siehst den Code bei Mouseover..teste mal bissl...bin weg fuer heute..schoenen Abend...

toms 15. Jun 2008 06:18

Re: Webbrowser Radiobutton ansprechen
 
Bei welcher Zeile tritt der Fehler auf?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz