/ / Das Ausführen einer Python-App mit Selenium und Chromedriver mit PM2 stürzt ständig ab und startet neu - Python-3.x, Google-Chrome, Selenium, PM2

Das Ausführen einer Python-App mit Selenium und Chromedriver mit PM2 stürzt ständig ab und startet neu - python-3.x, google-chrome, selen, pm2

Ich habe ein Problem damit, meine App zum Laufen zu bringenin PM2. Es ist eine einfache Python 3-App, die Selenium und Chrome / Chromedriver verwendet, um unsere Website zu durchsuchen. Ich denke, das Problem liegt entweder darin, dass Chrome sich in einem anderen Ordner außerhalb der Apps-Ordner befindet oder dass die Verbindung zum Chrome / Chromedriver-Prozess einmal unterbrochen wird es beginnt, und ich weiß nur nicht, wie ich PM2 anweisen soll, diese Prozesse einzubeziehen.

Das Skript läuft einwandfrei ohne PM2, daher bin ich mir nicht sicherWo liegt das Problem oder wie kann es behoben werden? Hier ist die Ausgabe, die nach jedem Neustart generiert wird (sie startet, stürzt ab und startet ständig neu, ohne jemals eine Verbindung zur Website herzustellen):

0|Scraper  | [2018-04-11 10:07:32.222861] STARTING SCRAPER
0|Scraper  | Traceback (most recent call last):
0|Scraper  |   File "/home/myapp/Scraper.py", line 1617, in <module>
0|Scraper  |     process()
0|Scraper  |   File "/home/myapp/Scraper.py", line 164, in process
0|Scraper  |     browser              = webdriver.Chrome(chrome_options = options, executable_path = path_to_chromedriver)
0|Scraper  |   File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/chrome/webdriver.py", line 62, in __init__
0|Scraper  |     self.service.start()
0|Scraper  |   File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/common/service.py", line 100, in start
0|Scraper  |     time.sleep(1)
0|Scraper  | KeyboardInterrupt  <--- I"m guessing this is PM2 killing the app after an error?
0|Scraper  |     Progress is Empty  <--- "Empty" because it never did anything
0|Scraper  |     Progress SAVED

Dies sind meine Chrome-Optionen:

options  = webdriver.ChromeOptions()
options.binary_location = "/usr/bin/google-chrome"
options.add_argument("headless")
options.add_argument("--log-level=3")
options.add_argument("window-size=1920x1080")
options.add_argument("--mute-audio")
options.add_argument("no-sandbox")

Der Chromedriver selbst befindet sich direkt im übergeordneten Verzeichnis der Apps.

Hier ist meine PM2-Prozess-JSON-Datei:

{
"apps" :
[
{
"name"        : "Scraper",
"script"      : "Scraper.py",
"interpreter" : "python3",
"watch"       : true
}
]
}

Ich mache nur PM2 start Scraper-process.json und dann PM2 logs Scraper um die Ausgabe anzuzeigen.

BEARBEITEN: Hier ist die Initialisierung des Chromtreibers

try:
path_to_chromedriver = "chromedriver"
browser              = webdriver.Chrome(chrome_options = options, executable_path = path_to_chromedriver)
except Exception as e:
print("[ERROR] Chromedriver: " + str(e))

Und dann schicke ich es an unsere Seite:

browser.get(ourURL)

Antworten:

0 für die Antwort № 1

Es scheint, dass das Problem in meiner PM2-Prozessdatei lag. Ich habe "watch" fälschlicherweise auf "true" gesetzt und dabei vergessen, dass die App häufig Änderungen an Dateien vornimmt, wodurch pm2 die App jedes Mal neu startet.