Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Auf HTML Seite Feld ausfüllen (https://www.delphipraxis.net/216046-auf-html-seite-feld-ausfuellen.html)

DelTurbo 18. Okt 2024 13:14


Auf HTML Seite Feld ausfüllen
 
Hi,
ich möchte auf einer HTML-Seite ein Feld ausfüllen und auf die Lupe klicken. Natürlich per Software. Bei einer "normalen" Form weiß ich wie das geht. Aber das hier bringt mich um das bissll verstand was ich noch habe. Es sieht wie folgt aus...

Code:
<div data-v-3f9000bc="" data-v-68db1b7e="" class="search-bar"><div data-v-3f9000bc="" class="search-textbox"><input data-v-3f9000bc="" type="text" placeholder="Wonach suchen Sie?"><button data-v-3f9000bc=""><svg data-v-3f9000bc="" class="svg-inline--fa fa-search fa-w-16" aria-hidden="true" focusable="false" data-prefix="far" data-icon="search" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path class="" fill="currentColor" d="DATEN"></path></svg></button></div><!----></div>
Es gibt in dem ganzen HTML Source keine <form>. Ich hoffe jemand weiß wie ich Text "eingeben" kann und suchen lassen kann.

Vielen Dank im voraus

PS.: Ich habe eine mitm Attacke gemacht und weiß nun was er aufruft. Trotzdem würde es mich noch interessieren.

Phoenix 18. Okt 2024 13:50

AW: Auf HTML Seite Feld ausfüllen
 
Das <input type="text" /> ist das Eingabefeld, und der <button /> wird wohl die Suche auslösen.

Du kannst also mittels JavaScript die Elemente finden.
Zum Beispiel das Eingabefeld:

Code:
const inputField = document.querySelector('input[placeholder="Wonach suchen Sie?"]');
Hier suchen wir nach einem Input-Feld mit dem Placeholder-Text. Wir haben ja sonst keinen Anhaltspunkt.
Der <button> liegt im gleichen Div wie auch das Eingabefeld, also können wir uns dann von dort aus weiterhangeln.

Code:
const button = inputField.parentElement.querySelector('button');
Eingeben und suchen kannst Du dann folgendermassen:

Code:
inputField.value = 'suchtext';
button.click();

DelTurbo 18. Okt 2024 14:21

AW: Auf HTML Seite Feld ausfüllen
 
Erstmal danke. Aber nun bin ich verwirrt. Ich habe mittlerweile WebView4Delphi und CEF4 Probiert.

Ich weiß wie ich damit die Seite laden kann. Das ist immer die gleiche Seite. Also suchen werde ich nicht müssen.

Nun zu meiner Frage: Kannst du mir eventuell die 2 Zeilen als Pascal Quelltext schreiben? Entweder mit WebView4Delphi oder CEF4 (bitte bei schreiben was du genommen hast).

Vielen Dank

himitsu 18. Okt 2024 15:27

AW: Auf HTML Seite Feld ausfüllen
 
@Phoenix
const? :shock:
[edit] Achso, im JavaScript, nicht im Delphi. :oops: (dort ist sowas Grauenhaftes Eigenartiges ja normal) [/edit]

"Suchen" meint, dass du dir die Instanz dieses Elements im DOM besorgst (nicht die Definition im XML-Text)
und damit kannst du dann was machen.

DelTurbo 19. Okt 2024 09:05

AW: Auf HTML Seite Feld ausfüllen
 
Achso, nun hab ich kapiert. Manchmal hab ich ne lange Leitung. :oops:

DelTurbo 19. Okt 2024 11:09

AW: Auf HTML Seite Feld ausfüllen
 
Leider klappt der "click" nicht. Ich mache das mit WebView2Delphi. Hier das was ich mache. Im Suchfeld kann man "Sony" sehen.

Delphi-Quellcode:
    WVBrowser.ExecuteScript('const inputField = document.querySelector(''input[placeholder="Wonach suchen Sie?  (Tipp: Suche mit englischen Begriffen)"]'');');
    WVBrowser.ExecuteScript('const button = inputField.parentElement.querySelector(''button'');');
    WVBrowser.ExecuteScript('inputField.value = ''Sony'';');
    WVBrowser.ExecuteScript('button.click();');
Nachtrag: Trage ich von Hand Samsung ein, dann klappt der click. Lasse ich das Script durch laufen kann ich nicht mal mehr per Hand klicken.
Der Testablauf: Seite kommt. Ich klicke auf einen Button der den Code oben ausführt. Dann kann ich nicht mehr auf den button klicken. Änder ich den Test von Hand und lasse das Skript wieder laufen klappt der klick. Er trägt zwar wieder Sony ein, aber gesucht wird nach dem Wort was ich eingetippt habe.

Olli73 19. Okt 2024 11:29

AW: Auf HTML Seite Feld ausfüllen
 
Ist die Seite auch zuvor vollständig geladen?

Der Button hat kein onClick oder Ähnliches. Da gibt es im Hintergrund bestimmt noch etwas Javascript für.

DelTurbo 19. Okt 2024 11:33

AW: Auf HTML Seite Feld ausfüllen
 
Jop, die Seite ist komplett geladen. Deswegen habe ich mich erstmal dafür entschieden selber das Script zu starten. Trage ich z.b. Samsung ein und Starte dann das Script, dann steht dort wieder Sony, aber der klickt geht. Allerdings sucht er dann nach Samsung. Nicht nach dem was im Suchfeld steht.

Olli73 19. Okt 2024 12:01

AW: Auf HTML Seite Feld ausfüllen
 
Dann würde ich das mal in zwei Schritten machen: Zuerst den Text setzen und in einem zweiten Befehl den Button drücken.

Edit: Du scheinst es ja schon in 4 Befehlen zu machen!?

Olli73 19. Okt 2024 12:04

AW: Auf HTML Seite Feld ausfüllen
 
geht das?

Code:
    WVBrowser.ExecuteScript('var inputField = document.querySelector(''input[placeholder="Wonach suchen Sie? (Tipp: Suche mit englischen Begriffen)"]'');');
    WVBrowser.ExecuteScript('inputField.value = ''Sony'';');
    WVBrowser.ExecuteScript('var inputField = document.querySelector(''input[value="Sony"]'');');
    WVBrowser.ExecuteScript('var button = inputField.parentElement.querySelector(''button'');');
    WVBrowser.ExecuteScript('button.click();');

DelTurbo 19. Okt 2024 12:11

AW: Auf HTML Seite Feld ausfüllen
 
Nein, dann geht gar nichts mehr.

Olli73 19. Okt 2024 12:11

AW: Auf HTML Seite Feld ausfüllen
 
hast du meine editierte Version verwendet?

DelTurbo 19. Okt 2024 12:14

AW: Auf HTML Seite Feld ausfüllen
 
Jop, per Copy & Paste... das hier.

Delphi-Quellcode:
    WVBrowser.ExecuteScript('var inputField = document.querySelector(''input[placeholder="Wonach suchen Sie? (Tipp: Suche mit englischen Begriffen)"]'');');
    WVBrowser.ExecuteScript('inputField.value = ''Sony'';');
    WVBrowser.ExecuteScript('var inputField = document.querySelector(''input[value="Sony"]'');');
    WVBrowser.ExecuteScript('var button = inputField.parentElement.querySelector(''button'');');
    WVBrowser.ExecuteScript('button.click();');

EDIT:
Code:
Wonach suchen Sie? (Tipp:
Da gehören 2 Spaces rein. Nach dem ?. Das habe ich gemacht dann trägt er wieder was ein. Aber es läuft genauso vorher.

DelTurbo 19. Okt 2024 14:35

AW: Auf HTML Seite Feld ausfüllen
 
Ich habe noch getestet und dabei ist mir aufgefallen das er meint, in input würde nichts drinstehen.

Das heißt natürlich um Umkehrschluss das das button.click klappt. Er nimmt es halt nicht weil seiner Meinung nach nichts eingetragen wurde.

Vielleicht fällt noch jemanden etwas ein...

Olli73 20. Okt 2024 10:53

AW: Auf HTML Seite Feld ausfüllen
 
Vielleicht hilft es ja zwischen dem Setzen des Values und dem ButtonClick ein ProcessMessages und/oder Sleep einzubauen!?

DelTurbo 20. Okt 2024 11:02

AW: Auf HTML Seite Feld ausfüllen
 
Das habe ich schon alles versucht. Auch button.click("Sony");. Ich bin auf die blödesten Sachen gekommen.

Ich habe auch mal FireFox installiert um mal das inputfeld zu unter suchen. Da habe ich festgestellt das 4 js Routinen aufgerufen werden. Die kann man beim FF einzeln abschalten. Da gibt es eine keypress. Die muss als einziges an bleiben, dann merkt er das man etwas ins Feld eingetragen hat (natürlich von Hand).

Aber wenn ich input.keypress("S"); aufrufe meint er immer noch das nichts eingegeben wurde.

Trotzdem danke

Olli73 20. Okt 2024 11:27

AW: Auf HTML Seite Feld ausfüllen
 
Und sowas?

Code:
  WVBrowser.ExecuteScript('inputField.dispatchEvent(new KeyboardEvent("keypress", {"key": "a"}));');

DelTurbo 20. Okt 2024 11:40

AW: Auf HTML Seite Feld ausfüllen
 
Nein, auch nix. Ich glaube wir vergessen es. Folgenden Code habe ich genutzt.

Delphi-Quellcode:
    WVBrowser.ExecuteScript('var inputField = document.querySelector(''input[placeholder="Wonach suchen Sie?  (Tipp: Suche mit englischen Begriffen)"]'');');
    WVBrowser.ExecuteScript('var button = inputField.parentElement.querySelector(''button'');');
    WVBrowser.ExecuteScript('inputField.dispatchEvent(new KeyboardEvent("keypress", {"key": "a"}));');
    Sleep(1000);
    Writeln(WVBrowser.ExecuteScript('button.click();'));
Ich danke dir für deine Hilfe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:39 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