Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1912to1916
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Browser Automatisierung mit Selenium

Browser Automatisierung mit Selenium
15.01.2023 18:13:09
Marc
Hallo Forumsgemeinde,
ich versuche aktuell mit Selenium auf meinen Browser (Chrome, Edge) zuzugreifen und bekomme jedes Mal einen Automatisierungsfehler, ganz gleich ob ich es mit Late-Binding oder Early-Binding versuche. Ich habe im Netz schon gesehen, dass es wohl zahlreiche Leute gibt, denen es genauso geht, allerdings habe ich nirgends eine brauchbare Lösung gefunden oder eine alternative Lösung. Ich habe bereits den aktuellsten Treiber für Chrome installiert, so dass es daran nicht liegen dürfte.
Es gab Leute, die meinten man könne das Problem lösen indem man .NET Framework 3.5 installiert aber Microsoft sagt es sei nicht möglich eine ältere Version von .NET Framework zu installieren und ich will da nichts falsch oder kaputt machen. Ist das korrekt?
Früher mit dem IE war das alles kein Problem für mich aber aktuell ist es wirklich eine Katastrophe, zumindest wenn man einen Rechner (MS Surface Pro3) verwendet, auf dem Selenium Probleme macht.
Hat jemand einen Vorschlag welche Library oder Methode man noch zum Automatisieren von Chrome oder Edge verwenden könnte? Ich verwende Windows 10 und der IE ist keine Alternative, da die Webseite mit der ich arbeiten möchte den IE nicht unterstützt.
Beste Grüße
Marc

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Alternative Http-Request
15.01.2023 19:54:59
Marc
Ich will es mal etwas konkreter machen.
Kann mir jemand sagen wie ich die Formulare und den Button auf der folgenden Seite mittels Http-Request anspreche?
https://onlinereconciliation.com/
Beste Grüße
Marc
AW: Alternative Http-Request
15.01.2023 20:09:15
Zwenn
Ah,
da ist die URL ja schonmal.
Kurz zu xhr:
Damit kann nur eine Datei von einem WebServer geladen werden, mit der nicht interagiert werden kann. Also Formulare ausfüllen und Buttons klicken funktioniert nicht. xhr ist nicht dynamisch. Je nachdem, wie die Information vom Browser beim Absenden des Formulars gesendet wird, ist es aber mitunter möglich xhr zu verwenden. Entweder, wenn die Informationen in der URL mitgesendet werden(GET Request) oder wenn sie im HTTP Header mitgesendet werden (POST Request). Muss zum Beispiel eine SeassionID aus einem Cookie ausgelesen werden, hgeht das mit xhr nicht. Dann mus WinHTTP verwendet werden. Das sind allerdings dann schon Techniken für Fortgeschrittene. Mit Basiskenntnissen in VBA wird das schwierig nehme ich an.
Viele Grüße,
Zwenn
Anzeige
AW: Alternative Http-Request
15.01.2023 21:12:16
Yal
Hallo Marc,
diese Webseite ist eine reine Krankheit (Cookies, Pop-up, usw.) Darauf wird es nichts geben, was Du stabil automatisierten kannst.
Vielleicht wäre es leichter zu beschreiben, was Du mit dieser "reconciliation" berechnen möchtest. Es gibt in Forum genug Käpsele, die mit ein paar VBA-Zeilen genau dasselbe berechnen können.
VG
Yal
AW: Alternative Http-Request
15.01.2023 21:49:26
Marc
Hi Yal,
danke für Deine Antwort. Dieser Dienst bietet die Möglichkeit zu einer gegebenen Summe aus einer beliebigen Zahlenreihe die Werte zu nennen, die die angegebene Summe ergeben und das tut dieser Dienst tatsächlich sehr schnell und zuverlässig. Das AddIn von Kutools beispielsweise hängt sich bei dieser Aufgabe regelmäßig auf, sobald man mehr als 10 Werte in der Zahlenreihe hat. Eine Excel-basierte Lösung die das gleiche kann habe ich nirgends gefunden und deshalb wollte ich diese Seite aus Excel heraus aufrufen und den Vorgang automatisieren weil ich das sehr häufig tun muss um Bilanzwerte zu mappen, die zusammengefasst wurden.
VG
Marc
Anzeige
AW: Alternative Http-Request
15.01.2023 21:20:42
Zwenn
Kanst Du mal ein Beispiel angeben, was man in die Felder eintragen kann, damit bei Result keine leere Menge rauskommt? Das Formular wird als POST Request abgesendet. Als Anwort kommt ein JSON zurück. Ob es sich mit xhr wirklich lösen lässt habe ich nicht ausprobiert, weil ich das Tool nicht wirklich verstehe.
Das ist die URL, die für den POST Request verwendet werden muss (kann so nicht im Browser aufgerufen werden):

https://onlinereconciliation.com/wp-admin/admin-ajax.php
Das ist der Payload für den POST Request (kann natürlich im Makro mit Variablen verwendet werden):

action=sumResolver_ajax_request&combination=20+20+30+&theTarget=200&threshold=50
Das ist die Antwort (Wie zu sehen ist, habe ich keine Erbenismenge hinbekommen):

{
"status":"success",
"resolved":"[]"
}

Anzeige
AW: Alternative Http-Request
15.01.2023 21:54:41
Marc
Hi Zwenn,
auch an Dich vielen Dank für die ausführliche Antwort. Im Folgenden mal ein Beispiel:
Ich suche den Wert: 2000,00
Gegeben sind folgende Werte:
100,00
2500,00
-300,00
-200,00
6000,00
Das Tool wird in diesem Fall folgende Kombination ausgeben: 2500,00 / -300,00 / -200,00
In der Praxis sind es natürlich wesentlich mehr Werte und sehr krumme Werte und so ein Tool erleichtert einem die Arbeit ungemein diese Werte richtig zuzuordnen.
VG
Marc
AW: Alternative Http-Request
15.01.2023 21:59:36
Marc
Ach so, noch ein Hinweis an Dich Zwenn.
Der Treshold stellt meiner Meinung nach die Abweichungstoleranz dar. Bislang habe ich dort immer null angegeben.
Anzeige
AW: Alternative Http-Request
15.01.2023 22:43:11
Marc
Hallo nochmal,
ich hab es jetzt mal folgendermaßen versucht aber ich bekomme einen "bad request" error.

Sub HttpRequest()
Dim strUrl As String
strUrl = "https://onlinereconciliation.com/wp-admin/admin-ajax.php"
Set hReq = CreateObject("MSXML2.XMLHTTP")
With hReq
.Open "POST", strUrl, False
.Send "action=sumResolver_ajax_request&combination=50+50+100+30+10&theTarget=200&threshold=0"
End With
Dim response As String
response = hReq.ResponseText
ThisWorkbook.Worksheets(1).Range("A1").Value = response
End Sub
Ich finde leider nirgends eine brauchbare Anleitung wie man so einen Http-Request richtig aufbaut.
VG
Marc
Anzeige
den Solver schon probiert?
16.01.2023 09:33:32
Yal
Hallo Marc,
eine Lösung könnte mit dem Solver erreicht werden:
_ Solver-Addin in den Opitionen, Add-in anschalten
_ in Bereich A1:A14 deine Werte eingeben (weil ich den Test mit 14 Werte gemacht habe)
_ in B16 die Formel =SUMMENPRODUKT(A1:A14;B1:B14)
_ in B17 die Wert, die zu treffen ist
_ in B18 der Delta B17-B16
dann Solver im Menü "Daten" starten
_ Ziel festlegen: $B$18
_ bis: Wert gleich null
_ veränderbare Zellen: B1:B14
_ Bedingung: B1:B14 binär ( also entw. null oder 1)
_ Lösen
Userbild
VG
Yal
Anzeige
AW: den Solver schon probiert?
16.01.2023 13:29:58
Zwenn
Hallo Yal, hallo Marc,
der Solver klingt für mich auch nach einem guten Ansatz. Ich weiß nur nicht, wie aufwändig dieser Weg ist, wenn viele Daten verarbeitet werden müssen. Wieviele Anfragen die Webseite schluckt, bevor sie bei einer Automatisierung zumacht, falls sie zumacht, ist allerdings auch unbekannt.
Das Problem, überhaupt eine Automatisierung hinzubekommen besteht allerdings auch bei mir darin, dass ich ebenfalls nur bis zum Serverstatus 400 (Bad Request) komme. Es fehlt etwas beim Request an den WebServer. Falls es das Cookie ist, an das komme ich nicht ran, weil es nicht im Header übertragen wird. Es gibt im Header zwei Alphanumerische Strings, die bei jedem Abruf anders aufgebaut sind. Aber im Zusammenhang mit festen Werten, die interessant aussehen, habe ich keine Muse auszuprobieren, was bei einem Folge-Request für die gesuchte Antwort wieder mit an den Server übertragen werden muss. Es kann auch sein, dass die Informationen gar nicht ausreichen. In die Richtung ging ja schon Deine erste Antwort Yal.
Mit POST bekomme ich die 400 geliefert, aber durch den Aufbau des Payload kann auch GET verwendet werden, wie es aussieht. Denn es ist eine Parameterliste, wie sie aus jeder URL mit Parametern bekannt ist.

action=sumResolver_ajax_request&combination=100%0A2500%0A-300%0A-200%0A6000%0A&theTarget=2500&threshold=0
Hängt man diese Zeichenfolge an die "POST URL", und zwischen beide noch das einleitende Fragezeichen, kann das Ganze im Makro mit GET, wie auch im Browser aufgerufen werden. Es gibt dann zwar keinen Bad Request, aber immer eine leere Ergebnismenge. Das hilft also auch nicht wirklich weiter an dieser Stelle:
https://onlinereconciliation.com/wp-admin/admin-ajax.php?action=sumResolver_ajax_request&combination=100%0A2500%0A-300%0A-200%0A6000%0A&theTarget=2500&threshold=0
So kann der RequestHeader abgerufen werden, falls Du experimentieren willst Marc. In CF-Ray: und Report-To: findest Du die beiden dynamischen Strings. So ein Wert kann in einer Folge-Request dann mit setRequestHeader wieder mitgegeben werden. Mit Keep-Alive wird das im Makro für Connection gemacht

Sub RequestHeader()
With CreateObject("WinHttp.WinHttpRequest.5.1")
.Open "GET", "https://onlinereconciliation.com/wp-admin/admin-ajax.php?action=sumResolver_ajax_request&combination=100%0A2500%0A-300%0A-200%0A6000%0A&theTarget=2500&threshold=0", True
.setRequestHeader "Connection", "Keep-Alive"
.send
.WaitForResponse
Debug.Print .getAllResponseHeaders()
End With
End Sub
Hier ist noch mein Testmakro, für den (fehlschlagenden) Abruf des Ergebnis-JSON:

Sub HttpRequest()
Dim url As String
Dim payload As String
' url = "https://onlinereconciliation.com/wp-admin/admin-ajax.php"
'  payload = "action=sumResolver_ajax_request&combination=50+50+100+30+10&theTarget=200&threshold=0"
url = "https://onlinereconciliation.com/wp-admin/admin-ajax.php?action=sumResolver_ajax_request&combination=100%0A2500%0A-300%0A-200%0A6000%0A&theTarget=2500&threshold=0"
With CreateObject("MSXML2.ServerXMLHTTP.6.0")
.Open "GET", url, False
'.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
'.setRequestHeader "Content-Type", "text/json"
.send 'payload
If .Status = 200 Then
Debug.Print .ResponseText
Else
Debug.Print "Page not loaded. HTTP Status: " & .Status
End If
End With
End Sub
Viele Grüße,
Zwenn
Anzeige
Automatisierung mit Solver
16.01.2023 14:05:46
Yal
Moin!
Mehr als vorab beschrieben ist für den Solver nicht notwendig.
Er lässt sich mit der Datei spiechern und auch mit dem Makrorekorder aufnehmen.
Es bleibt nur die Eingaben B17 (Zielsumme) und A1:A14 zu leeren und neu zu setzen. Wenn nur 10 Werte, dann der Rest null.
Ich habe überlegt, alternatif einen Algo aus dem Netz zu suchen, aber mir scheint diesen Weg nicht notwendig, solang Marc nicht getestet hat.
Performancemässig scheint es auch in Ordnung zu sein.
VG
Yal
AW: Automatisierung mit Solver
16.01.2023 21:27:21
Marc
Hi ihr beiden,
tausend Dank für eure Mühen. Ich hatte vorhin schon mal eine Antwort verfasst aber wie ich eben feststelle hatte ich Sie offenbar nicht geposted.
Na jedenfalls kenne ich den Solver, allerdings hatte ich meine Probleme herauszufinden wie das Teil funktioniert und hatte entnervt aufgegeben und nach anderen Tools gesucht. Das Ding ist gut aber leider sehr langsam. Ein andere Nachteil ist, dass er nur eine Kombination liefert weil ich beim Experimentieren damit nämlich festgestellt habe, dass man für eine Position im Income Statement zig Kombinationen finden kann, die diesen Wert ergeben. Ich hatte allein 4 Kombinationen gefunden und das obwohl ich die Auswahl der Werte zum Schluss schon eingegrenzt hatte. Die tatsächlich gewünschte Kombination wurde tatsächlich in allen Versuchen nicht gefunden.
Ich hatte ein Excel-Tool gefunden, dass eine Tabelle mit Kombinationen ausgibt aber das konnte nicht mit negativen Werten umgehen.
Falls jemand so ein Tool kennt dann als her damit. :)
VG
Marc
Anzeige
AW: Browser Automatisierung mit Selenium
15.01.2023 20:03:50
Zwenn
Hallo Marc,
den IE nicht zu verwenden ist auch bei Seiten die noch in ihm aufgerufen werden können richtig. Der ist seit 22. Juni 2022 komplett aus dem Support und wird quasi aktiv von MS ausgemustert. Die meisten Seiten werden inzwischen automatisch auf Edge umgeleitet. Aber auch Edge lässt sich nur mit Seleniumbasic automatisieren.
Selbst habe ich Seleniumbasic noch immer nicht viel verwendet, aber wenn, dann habe ich auch Chrome genommen. Es ist darauf zu achten, dass immer der richtige WebDriver zur richtigen Browserversion genommen wird. Aber ich gehe davon aus, dass Du darauf geachtet hast. Interessant wäre, wohin Du den WebDriver installiert (kopiert) hast.
Welche Seite willst Du denn automatisieren? In den meisten Fällen komme ich mit xhr gut klar (XML HTTP Request). Teilweise kommt man auch mit WinHTTP weiter. Beide Ansätze benötigen keinen Browser.
Magst Du mal Dein Setup beschreiben und Deinen Quellcode sowie die URL hier posten?
Viele Grüße,
Zwenn
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige