Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Vom Programm aus auf Webseitenelemente zugreifen (https://www.delphipraxis.net/212257-vom-programm-aus-auf-webseitenelemente-zugreifen.html)

Rued 13. Jan 2023 12:29

Vom Programm aus auf Webseitenelemente zugreifen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!

Da mein TWebBrowser (in Delphi 2010) mit den zahlreichen Scripten der Seite www.trotto.de/index.htm nicht klarkommt (Beispiel für Fehlermeldung im Anhang), lade ich die Seite in einen externen Browser. Wie greife ich aus meinem Programm auf Checkboxen und Button der Seite zu? Für die entscheidenden Checkboxen muss ein bevorstehndes Rennen ausgewählt werden.

Wie komme ich z. B. an die Handles der Checkboxen?

Gruß
Rued

P.S.: Silent = true für TWebBrowser ist keine Lösung, da die Scripte ausgeführt werden müssen.

omnibrain 13. Jan 2023 13:10

AW: Vom Programm aus auf Webseitenelemente zugreifen
 
Der IE basierte Webview steckt standardmäßig auf dem Funktionsniveau von IE 6 oder 7 fest. Du kannst ihm per Registry-Eintrag aber sagen, dass für dein Programm ein höheres Niveau gelten soll:
Code:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"programmname.exe"=dword:00002af8

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]

"programmname.exe"=dword:00002af8
Der eine ist für 32 Bit, der andere für 64 Bit.

Alternativ kannst du schauen ob du den Edge(Chromium) basierten WebView2 mit folgender Komponenten nurtzen kannst: https://github.com/salvadordf/WebView4Delphi

Oder du automatisierst den Zugriff ganz anders, mit einem Tool wie Selenium?

Die Frage ist aber auch: Hat die Seite "Abwehrmaßnamen" und lassen die Nutzungsbedingungen automatisierten Zugriff zu?

himitsu 13. Jan 2023 14:38

AW: Vom Programm aus auf Webseitenelemente zugreifen
 
Der TWebBrowser lässt sich auch auf Edge umstellen,
bzw. direkt TEdgeBrowser.

Delphi-Referenz durchsuchenTWebBrowser.SelectedEngine = EdgeOnly oder EdgeIfAvailable

Rued 13. Jan 2023 15:14

AW: Vom Programm aus auf Webseitenelemente zugreifen
 
Zitat:

Zitat von himitsu (Beitrag 1517392)
Der TWebBrowser lässt sich auch auf Edge umstellen,
bzw. direkt TEdgeBrowser.

Delphi-Referenz durchsuchenTWebBrowser.SelectedEngine = EdgeOnly oder EdgeIfAvailable

Die TWebBrowser-Komponente in Delphi 2010 verfügt nicht über die SelectedEngine-property.

Rued 13. Jan 2023 15:25

AW: Vom Programm aus auf Webseitenelemente zugreifen
 
@omnibrain:
  • Habe den Registry-Eintrag erfolglos gemacht.
  • Mit der WebView2-Komponente scheint mein Delphi 2010 überfordert zu sein, jedenfalls kann es mit dem Package von nuget nichts anfangen. [Vorausgesetzt, ich habe mit "microsoft.web.webview2.1.0.1462.37.nupkg" das richtige heruntergeladen.]
  • Mit Selenium bin ich überfordert.

Aktualisierung zu Punkt 2:
Die WebView2Loader.dll habe ich zu meinen dlls geschoben und das Post-Build-Ereignis im Projekt hinzugefügt. Jetzt fehlt mir noch die Komponente.

himitsu 13. Jan 2023 15:48

AW: Vom Programm aus auf Webseitenelemente zugreifen
 
Das mit der Registry hat nichts mit Delphi zu tun.
Es macht Windows innerhalb der ActiveX-Komponente, welche Delphi hier nutzt.



Ohhh, das ist natürlich etwas unpraktisch. :oops:

Nja, erstmal kannst dir ja im TWebBrowser anzeigen lassen, was du eigentlich aktuell hast,
bzw. es von Seiten des Delphi-Codes auslesen.


JavaScript: navigator.appName , navigator.appVersion und navigator.userAgent

oder HTML-Conditionals:
HTML-Code:
<!--[if IE 6]> IE6 <![endif]-->
<!--[if IE 7]> IE7 <![endif]-->
<!--[if IE 8]> IE8 <![endif]-->
...

Phoenix 13. Jan 2023 15:56

AW: Vom Programm aus auf Webseitenelemente zugreifen
 
Zitat:

Zitat von himitsu (Beitrag 1517400)
oder HTML-Conditionals:
HTML-Code:
<!--[if IE 6]> IE6 <![endif]-->
<!--[if IE 7]> IE7 <![endif]-->
<!--[if IE 8]> IE8 <![endif]-->
...

Die Seite ist wohl eher nicht seine, so das er das nicht machen kann.

Delphi.Narium 13. Jan 2023 16:09

AW: Vom Programm aus auf Webseitenelemente zugreifen
 
Dafür kann man doch auch eine eigene, lokale, HTML-Datei nehmen, es geht doch nur darum herauszufinden, welche IE-Version auf dem eigenen Rechner ist bzw. welche IE-Version vom TWebBrowser im Delphi-2010-Programm emuliert wird. (Und mit der lokalen HTML-Datei kann man dann ggfls. auch prüfen, ob Änderungen in der Registry beim TWebBrowser "ankommen".)

Wenn man das weiß, kann man prüfen, welche IE-Version die Webseite (mindestens) benötigt und dann (mit ein bisserl Glück) für das eigene Programm den erforderlichen Wert in der Registry eintragen. Wird von der WebSeite eine höhere IE-Version benötigt, als man auf dem Rechner hat, wird's halt vergebliche Liebesmüh.

Weitere Werte für die Registry, die eventuell zum Erfolg führen könnten: Internet Feature Controls (B..C)

omnibrain 13. Jan 2023 16:35

AW: Vom Programm aus auf Webseitenelemente zugreifen
 
Zitat:

Zitat von Rued (Beitrag 1517396)
@omnibrain:
  • Habe den Registry-Eintrag erfolglos gemacht.

Hast du "programmname.exe" durch den Dateinamen deines Programmes ersetzt?
Zitat:

Zitat von Rued (Beitrag 1517396)
@omnibrain:
  • Mit der WebView2-Komponente scheint mein Delphi 2010 überfordert zu sein, jedenfalls kann es mit dem Package von nuget nichts anfangen. [Vorausgesetzt, ich habe mit "microsoft.web.webview2.1.0.1462.37.nupkg" das richtige heruntergeladen.]

Aktualisierung zu Punkt 2:
Die WebView2Loader.dll habe ich zu meinen dlls geschoben und das Post-Build-Ereignis im Projekt hinzugefügt. Jetzt fehlt mir noch die Komponente.

Vergiss alles was du zu Delphi und WebView2 (TEdgeBrowser) gelesen hast. Ausschlaggebend ist die Anleitung bei https://www.briskbard.com/index.php?...pageid=webview ab "Installation" für das von mir verlinkte.

himitsu 13. Jan 2023 17:27

AW: Vom Programm aus auf Webseitenelemente zugreifen
 
Zitat:

Zitat von Phoenix (Beitrag 1517401)
Die Seite ist wohl eher nicht seine, so das er das nicht machen kann.

Er kann aber erstmal eine eigene Testseite laden und schauen was der IE macht. :stupid:

Rued 13. Jan 2023 17:33

AW: Vom Programm aus auf Webseitenelemente zugreifen
 
@himitsu: IE7

@omnibrain: Ja, "programmname.exe" habe ich durch den Dateinamen meines Programms ersetzt. Danke für den Link, schaue ich mir später an.

Dank an alle, die hier posten.

omnibrain 13. Jan 2023 19:59

AW: Vom Programm aus auf Webseitenelemente zugreifen
 
Zitat:

Zitat von Rued (Beitrag 1517407)
@omnibrain: Ja, "programmname.exe" habe ich durch den Dateinamen meines Programms ersetzt. Danke für den Link, schaue ich mir später an.

Das ist halt DIE Alternative zum TWebBrowser für ältere Delphi-Versionen. Und auch mit aktuellem Delphi kann es eine Alternative zum halbherzigen TEdgeBrowser sein.

Bernhard Geyer 13. Jan 2023 20:15

AW: Vom Programm aus auf Webseitenelemente zugreifen
 
Für eine solche antike Delphi-Version wie D2010 benötigt man auf jedenfall die EmbeddedWB-Komponenten wie von hier:
https://github.com/ghquant/Delphi-Em...Me_Install.txt
(Leider hat der ursprüngliche Entwickler das Projekt nicht gut übergeben, so es es diverse Versionstände mit unterschiedlichen Fixes für neuere Delphis gibt).
Warum ist das nötig: Der TWebbrowser von dieser alten Delphi-Version hat ein paar Bugs und unzulänglichkeiten (z.B. fehlerhafte Referenzzählung bei Interfaces auf HTML-Elemente).

in neueren Delphi-Versionen wurden diese gefixt, so das man dann direkt TWebbrowser nutzen konnte..

Das CEF (Chromium Embedded Framework) hatten wir einige Zeit genutzt, da TWebbrowser auch im IE11 einfach zu langsam und zu viele Fehler beim Render komplexerer Webdaten hatte.
Mittlerweile sind wir bei TEdge-Control von Delphi 10.4. Damit sparen wir die mittlerweile sehr große Runtime mitzuliefern und haben auch MP4 "out of the box" dabei.

Ich würde auf jedenfalls mal aktuelles Delphi in der Community-Edition anschauen.
Würde heute nicht mehr (von 10.4) zurück auf eine solch alte Delphi-Version wollen.
Zu groß sind die Vorteile der moderneren VCL und der Sprachfeatures.
Und gefühlt ist es (Unser weg war D6 -> XE6 -> 10.2 -> 10.4) das stabilste Delphi das wir bisher hatten.

Rued 14. Jan 2023 16:11

AW: Vom Programm aus auf Webseitenelemente zugreifen
 
Liste der Anhänge anzeigen (Anzahl: 2)
@Bernhard Geyer:

Die EmbeddedWB-Komponenten habe ich früher verwendet, dann wieder rausgeschmissen, will ich sie jetzt wieder installieren, kommt die Fehlermeldung, "Fehler im Modul: Modul-Header fehlt oder ist fehlerhaft".

Die Community-Edition 10.4 versuche ich seit drei Tagen zu registrieren, mit dem im Anhang sichtbaren Ergebnis.

Der kontaktierte Support unterstellt, ich hätte das falsche Produkt installiert:

Zitat:

Hello ,

This is Ken from the Embarcadero IDERA Technical Support team. I am contacting you regarding Case # 00980274 - "Keine gültigen Lizenzinformationen..."

The serial provided is a community edition license, in the case you list the product as version 11. The license is for 10.4.2 not for version 11. If you are really installing 10.4.2 then you might want to try the following below:

1. uninstall the product
2. rename the Embarcadero folder from C:\ProgramData\Embarcadero
-program data is a hidden folder-
3. create new folder move install exe file from downloads folder to an isolated folder
4. right click run as admin to install
5. register product with serial number
Serial number: 34CL-FX.....
Vermutlich muss ich die Prozedur jetzt doch auf mich nehmen. Das sind alles solche Zeitfresser...

Gruß
Rued


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 Uhr.

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