Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1732to1736
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

SAP-Browser aus SAP fernsteuern

SAP-Browser aus SAP fernsteuern
09.01.2020 14:22:31
Klaus
Hallo Leute,
ich habe ein Feld in einem Browser (genau gesagt: einer SAP-Browsermaske) und möchte dieses aus Excel ansteuern. Das ist für mich absolutes Neuland! Wer kann helfen?
Die Vorraussetzungen: Chrome ist mit genau einem Fenster offen, in dem Fenster ist das Fehld vorhanden. Chrome muss also nicht geöffnet werden (Ich will die SAP-Anmeldung nicht auch noch über Excel machen).
Das Feld heißt "Quick Order Search". Wenn ich mit rechts drauf clicke und "Inspect" anwähle, kommt das:
Userbild
Ich kann den HTML-Code leider nicht als Text einfügen, weil das Forum ihn auch innerhalb von Zitateklammern interpretiert.
Ich würde jetzt darauf tippen, dass ich aus VBA mit id="C14_W46_V47_zordersearch_order_id" etwas anfangen kann.
Mein Google-Fu hat mich leider verlassen und ich finde kein vernünftiges Beispiel. Wenn mir einer zeigt wie ich Tabelle1.Range("A1").value in das o.g. Feld schreibe (und Enter drücke), reicht mir das schon - den Rest bekomme ich dann alleine hin :-)
LG,
Klaus

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SAP-Browser aus SAP fernsteuern
09.01.2020 15:31:24
Zwenn
Hallo Klaus,
wenn Google Chrome ein absolutes Muss ist, geht das nur über Selenium. Aus VBA heraus kann man nur den Internet Explorer direkt "Fernsteuern", weil er der einzige ist, der eine COM Schnittstelle hat.
Infos zu Selenium:
https://selenium.dev/
https://de.wikipedia.org/wiki/Selenium
Infos zur COM Schnittstelle:
https://de.wikipedia.org/wiki/Component_Object_Model
Um Deinen HTML Code hier anzeigen zu lassen, kannst Du die spitzen Klammern durch die entsprechenden HTML Steuerzeichen ersetzen. Oder Du lädst ihn als txt Datei hoch.
Viele Grüße,
Zwenn
Anzeige
AW: SAP-Browser aus SAP fernsteuern
09.01.2020 18:16:10
Klaus
Hi,
es muss nicht unbedingt Chrome sein - IE haben wir auch.
Für ein banales Beispiel - sagen wir, Zelle A1 in die Google Suchmaske eingeben und Enter drücken, wäre ich sehr dankbar.
LG,
Klaus
AW: SAP-Browser aus SAP fernsteuern
09.01.2020 20:05:44
Zwenn
Hallo Klaus,
ich baue mal darauf, dass Dein angegebener VBA Lvl stimmt :-)
Aus den folgenden Grundlagen solltest Du Dir was zusammenbasteln können:

Sub BrowserSAP()
'Mal etwas so nicht lauffähiger Code für einige grundsätzliche Erklärungen
Dim objShell As Object
Dim objWindow As Object
Dim browser As Object
Dim url As String
Dim knotenEingabe As Object
Dim stringVariable As String
'Wenn man alles automatisieren will:
url = "SAP-Anwendung URL für Browser" ' 0 Then
'Prüfen ob es der richtige IE ist
'Jeder Tab im IE wird als eigenes Fenster behandelt
'Es ist also (fast) egal, wieviele Tabs geöffnet sind
'Möglichkeit 1: Über den Titel
If InStr(1, objWindow.Document.getElementsByTagName("title")(0).innertext, _
"Statischer immer gleicher Titel des Tabs") Then
'Gefundenes Fenster auf besser klingende Objekt Variable umswitchen ;-)
Set browser = objWindow
'Richtiger Tab in richtigem IE gefunden
'Also nicht weitersuchen
Exit For
End If
'Möglichkeit 2: Über die URL
If objWindow.Document.Location = url Then
'Gefundenes Fenster auf besser klingende Objekt Variable umswitchen ;-)
Set browser = objWindow
'Richtiger Tab in richtigem IE gefunden
'Also nicht weitersuchen
Exit For
End If
End If
Next objWindow
'Zugriff auf HTML-Elemente
'Wenn es nur das eine HTML-Element mit der CSS-Klasse
'"th-if th-ellipsis" gibt, könnte man das Eingabefeld
'wie folgt referenzieren:
Set knotenEingabe = browser.Document.getElementsByClassName("th-if th-ellipsis")(0)
'Es wird eine Node Collection gebildet, auf deren Elemente über ihre Indizes ab 0
'zugegriffen werden kann. Wenn es nur ein Element gibt, muss man es also über (0)
'referenzieren
'Es gibt aber eine ID, wie Du richtig erkannt hast
'Wurde der HTML Standard eingehalten und es gibt
'die ID nur einmal, kann man direkt auf das
'Element zugreifen:
Set knotenEingabe = browser.Document.getElementByID("C14_W46_V47_zordersearch_order_id")
'Hier wird keine Node Collection gebildet, weil eine ID in einem HTML Dokument
'eindeutig sein sollte. Es sollte aber immer geprüft werden, ob das auch der Fall
'ist. Sonst wird immer das erste Element mit der angegebenen ID referenziert
'Es gibt auch noch getElementsByTagName(), womit ebenfalls eine Node Collection
'gebildet wird und getAttribute(), womit nicht dirtekt auf HTML-Elemente
'zugegriffen werden kann. In Attributen stehen aber oft auch Informationen
'die man gern abgreifen möchte
'Die beiden sind für Dein Vorhaben an dieser Stelle aber nicht praktikabel
'Etwas mit einem HTML-Element machen
'Wenn es ein Button ist, kann man ihn nun wie folgt anklicken:
knotenEingabe.Click
'Wenn es ein Textfeld ist, kann man so Text eintragen:
knotenEingabe.Value = "Wunschtext"
'Wenn es eine Checkbox ist, kann man den Haken so setzen:
knotenEingabe.Checked = True
'Wenn es ein Element ist, das Text enthält, den man will:
stringVariable = knotenEingabe.innertext
'Wenn es ein Element ist, dessen HTML man ganz will:
stringVariable = knotenEingabe.outerHTML
'Wenn es ein Element ist, dessen HTML man ohne die einschließenden Tags will:
stringVariable = knotenEingabe.innerHTML
End Sub
Im Folgenden noch ein paar Links, wo Du Beispiele aus der Praxis einsehen kannst. Davon gibts natürlich im Netz haufenweise. Wenn Du selber recherchieren willst/ musst, sind Deine Suchbegriffe von denen Du ausgehen kannst "webscraping" und "document object model"
Es gibt auch noch weitere Möglichkeiten auf Inhalte von Webseiten zuzugreifen, wenn man mit den Get-Methoden nicht ans Ziel kommt. Zusätzlich kann man z.B. auch auf iFrames zugreifen, HTML-Events triggern, JS auslösen, usw.
Hier gibt es zwei Lösungen für das gleiche Problem. Die erste von Anton, meine folgt als Antwort auf seine:
https://www.herber.de/forum/cgi-bin/callthread.pl?index=1732523
Hier zeige ich, wie man an Infos in einem JS kommt (Text zerfleddern, vorletzte Antwort):
https://www.herber.de/forum/cgi-bin/callthread.pl?index=1722065
Hier gibts noch Erklärungen zum direkten Aufbau einer URL mit Parametern (nur wenn get statt post von der Seite verwendet wird). Sowas weißt Du aber vielleicht auch alles schon:
https://www.herber.de/forum/cgi-bin/callthread.pl?index=1696480
Hier noch ein sehr ausführliches Projekt mit vielen Kommentaren und HTML Ausschnitten im Quellcode des Makros. Lass Dich davon nicht erschlagen, sondern nutze es ggf. als Referenz:
https://www.herber.de/forum/cgi-bin/callthread.pl?index=1678466
Wenn Du weitere Fragen hast, lade bitte den HTML-Quellcode als Textdatei hoch. Ansonsten kann man nicht gezielt ansetzen, sondern immer nur eine allgemeine Hilfestellung geben oder im Nebel stochern.
Viele Grüße,
Zwenn
Anzeige
kurze Zwischen-Rückmeldung
10.01.2020 18:26:42
Klaus
Zwenn,
vielen Dank für deine ausführliche Antwort! Leider ist heute in der Fabrik quasi die Welt unter gegangen und ich hatte noch keine Zeit mich damit zu beschäftigen - und am Wochenende mache ich es auch nicht :-)
Ich melde mich Montag wieder - bis dahin schönes Wochenende!
LG,
Klaus
AW: kurze Zwischen-Rückmeldung
11.01.2020 15:46:01
Zwenn
Hallo Klaus,
danke für die Rückmeldung :-) Dann sehen wir am Montag weiter, wenn Du soweit bist.
Viele Grüße,
Zwenn
AW: kurze Zwischen-Rückmeldung
13.01.2020 12:23:25
Klaus
Hallo Zwenn,
leider bekomme ich immer Laufzeitfehler 91: Objektvariable oder WITH-Blockvariable nicht festgelegt.
Ich nehme an, dass ich einen Verweis auf eine Bibliothek setzten muss. Aber auf welche?
LG,
Klaus M.
Anzeige
AW: kurze Zwischen-Rückmeldung
13.01.2020 14:14:01
Zwenn
Hallo Klaus,
es ist kein lauffähiger Code, sondern ich habe Codefragmente zusammengelegt, die jeweils mit erklärenden Kommentaren versehen sind. Deshalb steht als allererster Satz im Code:
'Mal etwas so nicht lauffähiger Code für einige grundsätzliche Erklärungen
Du kannst Dir mit den Beispielen im Code und den Erklärungen dazu selbst entwickeln, was Du brauchst um Dein Eingabefeld im Browser anzusprechen. Deshalb schrieb ich, ich baue darauf, dass Dein angegebener VBA Lvl stimmt. Wenn Du ein Makro erstellt hast und es läuft nicht, dann poste es hier und dazu den HTML-Code als Text Datei.
Viele Grüße,
Zwenn
Anzeige
AW: kurze Zwischen-Rückmeldung
15.01.2020 20:36:01
Klaus
So ein Mist, Zwenn. Du versuchst mir zu helfen und ich komm nicht dazu dir zu antworten - ich bin ein doofer Frager! :-(
Habe auf der Arbeit einen herben Dämpfer verpasst bekommen. Der SAP-Verantwortliche des Konzerns hat Wind von meinem Vorhaben bekommen und jeglichen automatisierten Eingriff in "sein" System pauschal verboten - und das nicht direkt mir, sondern praktischerweise direkt meinem Vorgesetzen. Zuerst wollte ich ja per SQL aus VBA direkt auf die SAP-Datenbank schreiben, dass er das verboten hat habe ich ja noch eingesehen. Stattdessen den Browser zu benutzen war mein Plan B, einen Plan C habe ich nicht.
Ich schieb jetzt erstmal doppelt Frust, erstens weil jemand der wahrscheinlich noch nie einen Fuß in die Fabrik gesetzt und keinen blassen Schimmer von den Abläufen hat erstmal pauschal eine Verbesserung verbieten kann, und zweitens weil ich die tollen Beispiele von Zwenn nicht selbstständig zum laufen bekommen habe.
Seis drum, ist nicht das letzte Excel Projekt. Vielen Dank für deine Mühen, Zwenn, auch wenn es nicht gefruchtet hat. Hoffentlich hilft es zumindest jemandem im Archiv.
Aus inzwischen rein akademischen Gründen hätte ich trotzdem gerne einen Mustercode, um Range("A1").value in www.google.de einzutragen :-)
LG,
Klaus M.
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige