1

我很难让 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```
4

0 回答 0