我很难让 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 的任何错误吗?或者建议改进?(这是我第一次尝试 Selenium,我使用了一堆在线示例和教程中的代码。)
Raspbian buster 是否支持 Chrome 74?我已经看到一些建议,从 v65 开始正式放弃 Chromium 对 ARM 的支持,但我还没有看到官方公告。我应该放弃 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```