/ / Uruchamianie aplikacji Python z Selenium i Chromedriver przy użyciu PM2 ciągle ulega awarii i restartuje - Python-3.x, Google-Chrome, Selenium, PM2

Uruchamianie aplikacji Python z Selenium i Chromedriverem przy użyciu PM2 powoduje ciągłe awarie i restartowanie - python-3.x, google-chrome, selen, pm2

Wystąpił problem z uruchomieniem mojej aplikacjiw PM2. Jest to prosta aplikacja Python 3, która korzysta ze Selenium i Chrome / chromedriver do zeskrobywania naszej witryny. Myślę, że problem polega na tym, że sam Chrome znajduje się w innym folderze poza folderami aplikacji lub że raz traci połączenie z procesem Chrome / chromedriver zaczyna się, a ja po prostu nie wiem, jak powiedzieć PM2, aby uwzględnił te procesy.

Skrypt działa poprawnie bez PM2, więc nie jestem pewiengdzie jest problem lub jak go naprawić. Oto dane wyjściowe, które generuje po każdym ponownym uruchomieniu (w zasadzie uruchamia się, ulega awarii i restartuje się stale, bez konieczności łączenia się ze stroną internetową):

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

Oto moje opcje chrome:

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")

Sam chromedriver znajduje się bezpośrednio w katalogu nadrzędnym aplikacji.

Oto mój plik json procesu PM2:

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

Wszystko co robię to PM2 start Scraper-process.json i wtedy PM2 logs Scraper aby zobaczyć wyjście.

EDYTOWAĆ: Oto inicjalizacja chromedrivera

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))

A potem zaczynam od wysłania go na naszą stronę:

browser.get(ourURL)

Odpowiedzi:

0 dla odpowiedzi № 1

Wygląda na to, że problem występuje w moim pliku procesu PM2. Przez pomyłkę ustawiłem „watch” na true, zapominając, że aplikacja często wprowadza zmiany w plikach, co powoduje, że pm2 uruchamia aplikację za każdym razem.