Hallo,
ich bin neu hier im Forum, da ich mit einem Skript ein wenig ratlos bin.
Folgenden Fall möchte ich mit einem Python Skript auf meinem Raspberry Pi4 lösen:
1) Löschen einer XML Datei
2) Download einer neuen XML Datei durch Browseraufruf einer URL:
3) Dies beiden Skripte sollen täglich automatisch ausgeführt werden:
---
---
1)Das Löschen der Datei habe ich mit folgendem Skript gelöst;
import os
os.remove("/home/share/public/file.xml")
Das tägliche Ausführen über einen Eintrag in crontab klappt auch super.
2) Ich habe selenium sowie den Chrome Webdriver installiert und folgendes Skript geschrieben:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--no-sandbox')
driver = webdriver.Chrome()
driver.get("http://...")
Der Aufruf des Skriptes in einer VNC Session auf dem PI klappt super. Es öffnet sich Chromium und der Link wird. aufgerufen.
Wenn ich das Skript automatisch über crontab starten will passiert nichts und ich bekomme folgende Message in /var/mail
From: root@raspberrypi (Cron Daemon)
To: pi@raspberrypi
Subject: Cron <pi@pi> /usr/bin/python3 /home/pi/Downloads/scripts/loadepg.py
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/pi>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=pi>
Message-Id: <E1n6uwx-0000MO-Ie@pi>
Date: Mon, 10 Jan 2022 14:43:03 +0100
Traceback (most recent call last):
File "/home/pi/Downloads/scripts/loadxml.py", line 13, in <module>
driver = webdriver.Chrome()
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/chrome/webdriver.py", line 73, in __init__
service_log_path, service, keep_alive)
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/chromium/webdriver.py", line 99, in __init__
options=options)
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 268, in __init__
self.start_session(capabilities, browser_profile)
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 359, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 424, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 247, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: crashed.
(unknown error: DevToolsActivePort file doesn't exist)
(The process started from chrome location /usr/bin/chromium-browser is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
Stacktrace:
#0 0x000000a4a618 <unknown>
#1 0x0000007b09f4 <unknown>
#2 0x0000007d2814 <unknown>
#3 0x0000007cec04 <unknown>
#4 0x00000080528c <unknown>
#5 0x0000007ffa14 <unknown>
#6 0x0000007d8478 <unknown>
#7 0x0000007d93a4 <unknown>
#8 0x000000a77944 <unknown>
#9 0x000000a8990c <unknown>
#10 0x000000a89550 <unknown>
#11 0x000000a8ad40 <unknown>
#12 0x000000a78944 <unknown>
#13 0x000000a8afec <unknown>
#14 0x000000a6f3ac <unknown>
#15 0x000000aa26e8 <unknown>
#16 0x000000aa2858 <unknown>
#17 0x000000abcf4c <unknown>
#18 0x0000b6f27494 start_thread
#19 0x000000000000 <unknown>
Kann mir vielleicht jemand weiterhelfen? Wie kann ich diesen Chrome-Aufruf automatisieren. Mein PI läuft 24x7 und somit ist auch die grafische Umgebung dauerhaft aktiv.
Gruß
Chris
Skript Chrome URL-Aufruf automatisieren
Wie man eine Datei heruntetlädt, kommt darauf an, wie die Seite funktioniert. Um welche Seite handelt es sich denn?
Es ist kaum vorstellbar, dass ein Service, der es erlaubt XML-Dateien herunterzuladen, keine Möglichkeit vorsieht, das automatisiert zu machen.
Es ist kaum vorstellbar, dass ein Service, der es erlaubt XML-Dateien herunterzuladen, keine Möglichkeit vorsieht, das automatisiert zu machen.
Wenn ich das Skript als conjob laufen lasse erhalte ich immer den Fehler den ich in meinem ersten Post beschrieben habe. Ich muss also das Skript aktiv als Benutzer in der grafischen Oberfläche aus dem Terminal starten. Ich sehe dann ja wie sich der Chrome Browser öffnet und der Link aufgerufen wird.
Ich bin gerne über Hinweise dankbar wie ich es anderweitig lösen könnte. Gibt es denn ein grafisches Tool mit dem ich Skripte einplanen kann?
Ich bin gerne über Hinweise dankbar wie ich es anderweitig lösen könnte. Gibt es denn ein grafisches Tool mit dem ich Skripte einplanen kann?
Vielen Dank. Ist die Headerless-Option so richtig?
---
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
driver = webdriver.Chrome()
driver.get("http://...")
---
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
driver = webdriver.Chrome()
driver.get("http://...")
Wo genau verwendest du die Options eigentlich, die du alle zusammenträgst?
Ich habe mit Selenium noch nicht gearbeitet, aber es kommt mir sehr seltsam vor, dass man die einfach alle in ein Objekt tut und das Objekt dann nicht verwendet.
Noch komischer kommt mir allerdings vor - wie bereits hier im Thread mehrfach erwähnt -, dass Selenium überhaupt nötig ist. Aber da du Hilfe eher selektiv annimmst, wirst du wohl deine Gründe haben.
Ich habe mit Selenium noch nicht gearbeitet, aber es kommt mir sehr seltsam vor, dass man die einfach alle in ein Objekt tut und das Objekt dann nicht verwendet.
Noch komischer kommt mir allerdings vor - wie bereits hier im Thread mehrfach erwähnt -, dass Selenium überhaupt nötig ist. Aber da du Hilfe eher selektiv annimmst, wirst du wohl deine Gründe haben.
Dann ist es ja nicht richtig gewesen. Die Frage also doch schon beantwortet. Ich verstehe nicht, wieso man das so handhabt. Statt dann eine Frage zu stellen, deren Antwort man nicht kennt. Apropos Antwort: was sparrow sagt.
Ich bin kompletter Neuling in Python und bin durch meine Anforderung auf diese Möglichkeit aufmerksam geworden.
Hier mein aktueller Code
Über Hinweise wie ich es besser machen könnte bin ich sehr dankbar
# -*- coding: utf-8 -*-
"""
Spyder Editor
Dies ist eine temporäre Skriptdatei.
"""
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--remote-debugging-port=9222")
driver = webdriver.Chrome('/usr/bin/chromedriver')
driver.get("http://.....")
time.sleep(90)
driver.close()
Hier mein aktueller Code
Über Hinweise wie ich es besser machen könnte bin ich sehr dankbar
# -*- coding: utf-8 -*-
"""
Spyder Editor
Dies ist eine temporäre Skriptdatei.
"""
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--remote-debugging-port=9222")
driver = webdriver.Chrome('/usr/bin/chromedriver')
driver.get("http://.....")
time.sleep(90)
driver.close()
-
- User
- Beiträge: 491
- Registriert: Mittwoch 13. November 2019, 08:38
Du musst die gesetzten Optionen schon dem driver mitgeben (mit dem Keyword-Argument `options`).
Aber so lange du nicht verrätst um welche Seite es sich handelt, kann man hier auch nicht weiter helfen. Wie die Vorposter hier schon geschrieben haben, ist davon auszugehen, dass Selenium und dein Konstrukt zum Starten des Pythonprogrammes gar nicht erforderlich sind.
Code: Alles auswählen
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--remote-debugging-port=9222")
driver = webdriver.Chrome('/usr/bin/chromedriver', options=chrome_options)
Was hat denn die Seite mit dem Zugang zu tun? Niemand hat gesagt, dass du die Zugangsdaten hier abliefern sollst. Und selbst wenn man ohne Zugang nur beschränkt weit kommt, kann man ja durch zb den Quelltext schon viel erfahren. Erst recht, wenn der von dir ggf für zb die Seite nach dem Login geliefert wird.