[Selenium] GeckoDriver-Console verbergen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
marcel_at_work
User
Beiträge: 7
Registriert: Sonntag 1. September 2019, 09:29

Hallo liebe Gemeinde,

seit letzter Woche bin ich erfolgreicher Benutzer von Selenium.

Ich benutze LibreOffice 6.3 (Windows 7; Python 3.7.4; PIP) und starte aus Starbasic heraus ein externes Python-Script, welches mit folgendem Code den Selenium-Treiber initiiert:

Code: Alles auswählen

# Laden des Selenium-Treibers
import selenium

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support.ui import Select

# Laden des Zeit-Managements für Pausen zwischen dem Navigieren
import time

import datetime

# Unterstützung für die Interaktion mit dem Betriebssystem
import os

def addToWebPortalIncident(*listIncidentFields):
	# Aktivierung des Hintergrundmodus ohne sichtbares Fenster 
	options = webdriver.FirefoxOptions()
	options.add_argument('-headless')
	# Zuweisung des Firefox-Treibers zur Interaktion mit dem Web
	driver = webdriver.Firefox(executable_path = 'C:\Program Files\LibreOffice\geckodriver.exe', options = options)

	# Start des Browsers und Laden des URL
	sURL = '...'
	driver.get(sURL)

	# Lokalisierung der Eingabefelder
	txtUsername	= driver.find_element_by_name('username')
	txtPassword = driver.find_element_by_name('password')

	...
	...
Ich habe jetzt fast eine Woche im Netz gesucht und verschiedene Workarrounds getestet, aber ich bekomme einfach dieses Konsolenfenster vom GeckoDriver nicht ausgeblendet.

Kann mir hier vielleicht irgendjemand einen Rat geben?

Viele Grüße,

Marcel
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das hat mit dem Python Code oben nichts zu tun. Sondern mit dem Python Interpreter selbst. Du musst pythonw.exe benutzen, das ist das "GUI"-Python das keine eigene Konsole aufmacht. Wie du das machst haengt von dem Teil ab, den du nicht zeigst - dem Starbasic-Script.
marcel_at_work
User
Beiträge: 7
Registriert: Sonntag 1. September 2019, 09:29

Hey hey,

danke für die schnelle Antwort. :)

Code: Alles auswählen

	...
	
	sScript	  = "webDriving.py$addToWebPortalIncident" 'Zuweisung von Python-Script und seiner spezifischen Funktion
	'Zuweisung des Scipt-Pfades:
	'user	  = LibreOffice Benutzerverzeichnis/während der Entwicklungsphase ("C:\Users\...\AppData\Roaming\LibreOffice\4\user\Scripts\python\")
	'document = im Dokument selbst (durch Einbindung des Scripts per APSO.oxt-Erweiterung, nach Ende der Entwicklung)
	sLocation = "user"

	oScriptProvider = thisComponent.getScriptProvider()
	oScript = oScriptProvider.getScript("vnd.sun.star.script:" & sScript & "?language=Python&location=" & sLocation)

	On Error Goto NOACCESS
	If oScript.invoke(arrIncidentFields(), Array(), Array()) Then addToWebPortalIncident = True 'Übergabe an das Python-Script und Zuweisung des Rückgabewertes
	Exit Function
	
	...
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da wird kein Python Intepreter erwaehnt. Womit wohl implizit die Assoziaton von .py mit python.exe gewaehlt wird. Eine Moeglichkeit waere, das auf pythonw zu aendern. Oder du fummelst raus, wie du den Python Interpreter explizit setzt.
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Unter Windows kann man die Datei einfach .pyw nennen, das ist mit pythonw assoziiert.
marcel_at_work
User
Beiträge: 7
Registriert: Sonntag 1. September 2019, 09:29

Hallo Jungs,

welche Datei soll wie geändert werden? :?:

LG
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na die Python-Datei sollte die Endung .pyw bekommen (hatte ich vergessen, Windows ist eher selten mein System). Oder eben explizit den Python Interpreter beim Aufruf angeben.
marcel_at_work
User
Beiträge: 7
Registriert: Sonntag 1. September 2019, 09:29

Hi,

meine Datei habe ich umbenannt, aber es ändert sich nichts.

In welcher Form soll/kann ich bei meinem Funktionsaufruf noch einen Parameter zwecks dem Interpreter übergeben?

LG
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist eine Frage von dem oScriptProvider, keine Ahnung - das ist hier ja das Python-Forum, nicht das StarScript-Forum. Wie auch immer da der Aufruf genau aussieht, ich sehe da momentan nicht so recht durch.
marcel_at_work
User
Beiträge: 7
Registriert: Sonntag 1. September 2019, 09:29

@__deets__

Erstmal danke für die Versuche.

Japp, das Python-Forum ist genau richtig...
Python und Starbasic benutzen, neben verschiedenen anderen Sprachen, über UNO, gemeinsame Modelle und Bibliotheken. Sollte man sich dieser Interoperabilität als mehr-als-normal-User nicht zumindest ein wenig bewusst sein?

Nun ja, schade... mal schauen, vielleicht kommt ja irgendwann doch noch eine Lösung für das Problem daher.

Viele Grüße,

Marcel
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

UNO ist Open/LibreOffice. Man kann ein ganzes Leben mit der Nutzung von Python und diversen anderen Programmiersprachen, sowie einem ganzen Zoo von Technologien und Bibliotheken verbringen, OHNE sich das auch nur im Ansatz angeschaut zu haben. Glaub mir. Geht mir persönlich so.

Aber dieser rhetorische Kniff, aus einer Position eigenen Unverständnisses anderen Leuten Inkompetenz zu unterstellen - 👍🏻 Ich bin sicher, das ist eine echte Erfolgsstrategie.
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ausserdem ist UNO furchtbar. Ich habe mir das vor Jahren mal angeschaut und das ist eine überkomplizierte, javaesque API. Gerade als Python-Programmierer will man sich mit so etwas eigentlich gar nicht auseinandersetzen müssen. Also ich weiss das es das gibt, wünschte mir aber es nicht zu wissen, und möchte das auch mit Handschuhen nicht anfassen müssen. Bäh… 🤮
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
marcel_at_work
User
Beiträge: 7
Registriert: Sonntag 1. September 2019, 09:29

Hi,

sorry, wenn das vielleicht falsch rüber kam. Niemand hat hier irgendjemandem "Inkompetenz" vorgeworfen - nur vielleicht ein wenig Verantwortungslosigkeit. :roll:

Spass bei Seite: die Schnittstelle "geckodriver" ist u.a. für Python dokumentiert. Und diese Dokumentation suche ich natürlich auch (und ganz besonders) in einem Forum für die Sprache Python. Wo denn sonst...? Für Probleme mit Interaktion direkt auf einer Schnittstelle ist es immer etwas schwierig, Rat zu bekommen - Aussagen wie "ich NIX zuständig" sind nicht praktikabel.

Ich verstehe euch voll und ganz. Ist Geschmackssache. Ich bin halt hin und wieder einmal auf solche Schnittstellen angewiesen - mit wiederkehrenden "Aufgabenstellungen". :lol:

Nun ja,

schönen Abend zusammen...
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@marcel_at_work: Selenium/geckodriver hat doch jetzt aber auch nichts mit LibreOffice/UNO zu tun. Und vor allem auch nichts mit dem Konsolenfenster. Da kann man von Python-Seite aus nur sagen das Windows zwischen Konsolen- und GUI-Anwendungen unterscheidet und man deshalb bei ``python.exe`` immer ein Konsolenfenster bekommt, weil das eine Konsolenanwendung ist, und bei ``pythonw.exe`` kein Konsolenfenster bekommt, weil das eine GUI-Anwendung ist.

Auf Betriebssystemebene ist das unter Windows dann so gelöst, dass die Dateiendung ``.py`` mit ``python.exe`` verknüpft ist und ``.pyw`` mit ``pythonw.exe``. Es ist bei Python 3 noch ein kleines bisschen komplizierter aber dadurch auch flexibler weil da ein Umweg über ``py.exe`` gegangen wird. Wobei das alles auch schon wieder nicht stimmen kann wenn man ein eingebettetes Python verwendet. Wenn das Python das LibreOffice verwendet also nicht vollständig und alleine für sich ausgeführt werden kann, dann müssen die normalen Regeln alle nicht mehr gelten.

Die Frage ist also wie man LibreOffice dazu bekommt das verwendete Python ohne Konsolenfenster laufen zu lassen. Und das ist eine LibreOffice-Frage, die man als allgemeiner Python-Programmierer nicht beantworten kann wenn so Standards wie ``*.pyw`` nicht greifen. Dazu braucht man Erfahrung mit LibreOffice-Programmierung mit Python. Das ist ein Nischenfall so wie ich das sehe. Zumindest hier im Forum scheint das keiner zu machen. Oder zumindest nicht darüber zu reden.

Darum denke ich ist ein Hinweis sich nach spezialisierteren Foren umzuschauen das Beste was man machen kann um zu helfen. Alternativ müsste sich hier ja sonst jemand in seiner Freizeit mit LibreOffice/UNO unter Windows beschäftigen auch wenn ihn das gar nicht interessiert – oder gar abschreckt.

Mir geht es wie __deets__: Ich habe das noch nie gebraucht. Ich habe schon Tabellenkalkulationsdokumente erstellt, sowohl im OpenDocument- als auch im Excel-Format, aber $GOTT sei Dank immer ausserhalb von LibreOffice (oder einer anderen Office-Suite). Ich hoffe ich werde das auch nie brauchen, und falls doch würde ich wahrscheinlich erst einmal suchen ob es eine Python-Bibliothek gibt, welche die UNO-API ”pythonisch” verpackt. Also quasi so etwas wie ElementTree statt DOM/SAX für UNO.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
marcel_at_work
User
Beiträge: 7
Registriert: Sonntag 1. September 2019, 09:29

Danke für die ausführliche Erklärung.

Das ist wohl so, ja.

Ich werd' anderweitig schauen, diese Aufgabe zu lösen.

Einen wundervollen Abend an alle...
Antworten