Я ужасно переживаю, когда Selenium и Chrome надежно работают на моем Raspberry Pi (Buster), работающем без головы, чтобы поцарапать сайт. Я использую Pi 3 Model B, Rev 1.2 и использую Selenium 3.141.0 и Chrome & chromedriver версии 74.0.3729.157.
Приведенный ниже код работает в течение нескольких часов (вызывается cron каждые 15 минут), собирает данные, сохраняет их локально и использует запрос для публикации на внешнем веб-сайте. Но в течение 3 - 4 часов я получаю одну из следующих ошибок:
(<class 'selenium.common.exceptions.WebDriverException'>, WebDriverException()'
'(<class 'selenium.common.exceptions.TimeoutException'>, TimeoutException()'
'(<type 'exceptions.NameError'>, NameError("name 'display' is not defined",)
Даже при моей попытке поймать исключение ошибка приводит к полной остановке Pi, что требуетсброс питания.
Может кто-нибудь увидеть какие-либо ошибки в том, как я установил селен и хром в своем коде? Или рекомендовать улучшения? (это моя первая попытка с Selenium, и я использовал код из множества онлайн примеров и учебных пособий.)
Поддерживается ли Chrome 74 Raspbian buster? Я видел некоторые предположения, что поддержка Chromium для ARM была официально снята с v65, но я не видел официального объявления. Должен ли я отказаться от Chrome и попробовать Firefox?
#!/usr/bin/env python
# Designed as a once-thru program to be called by cron every 15 minutes
import time
from datetime import datetime, date
from selenium import webdriver
from pyvirtualdisplay import Display
import requests
import sys
try:
options = webdriver.ChromeOptions()
display = Display(visible=0, size=(1600, 1200))
display.start()
options.add_argument('--no-sandbox')
driver = webdriver.Chrome('/usr/lib/chromium-browser/chromedriver', options=options)
# Navigate to target website
driver.get('https://auth.tesla.com/login')
# Sign in ...
# Navigate to desired pages ...
# scrape data, save to local files, use request to post to external website ...
except: # catches ALL errors and writes them to file
error_msg = sys.exc_info()
with open(error_msg_file_name, "a") as error_file:
error_file.write('\n')
error_file.write(str((datetime.now().strftime('%Y-%m-%d %H:%M:%S'))))
error_file.write(', ')
error_file.write(str(error_msg))
error_file.write('\n')
finally: #this will always be executed
driver.quit() # quit webdriver and cleanup before exiting```