簡體   English   中英

Selenium - Python 腳本可從 CLI 運行,但使用 cron 啟動時出錯

[英]Selenium - Python script works from CLI, but errors when launching with cron

首先,我是 Python 腳本和編程的初學者。 我想自動化 Raspberry Pi 啟動,全屏打開 Chromium,go 到 web 頁面,然后自動登錄。 基本上,非技術人員可以打開它並砰的一聲,沒有鍵盤或任何需要的東西,只是一個顯示器。 我已經為此工作了大約一個星期,並且學到了很多東西,但是我碰壁了,無法超越它。

在帶有 Raspbian 10 的 Ras Pi 4+ 上運行

安裝 Selenium 和 Chromedriver

我在 Python 中完成了 Selenium 腳本:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options


chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--start-fullscreen')
chrome_options.add_argument('user-data-dir=/home/pi/Documents/website_login/Chromium_user_data')
chrome_options.add_argument('disable-infobars')
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--disable-gpu")

driver = webdriver.Chrome('/usr/lib/chromium-browser/chromedriver', options=chrome_options)

driver.get("https://www.mywebsite.com")

driver.implicitly_wait(10)

#driver.find_element_by_id('rcc-confirm-button').click()  #comment out because after run once the cookies banner gets saves in user settings

driver.find_element_by_link_text('Log in').click()

delay = 5

driver.find_element_by_id('ddlsubsciribers').send_keys('agency')
driver.find_element_by_id('memberfname').send_keys('user')
driver.find_element_by_id('memberpwd').send_keys('password')
driver.find_element_by_id('login').click()

當我從終端運行它時它工作正常。 打開鉻,轉到頁面,執行 Selenium 魔術,登錄,這正是我想要的。

然后我嘗試使用以下命令在 Pi 上使用 crontab -e 啟動它:

@reboot sleep 20; /usr/bin/python3 /home/pi/Documents/website_login/iar_login.py > /home/pi/Documents/website_login/iar_errorlog.err >2&1

重新啟動時沒有任何反應,並且在日志文件中收到以下錯誤消息:

Traceback (most recent call last):
  File "/home/pi/Documents/website_login/iar_login.py", line 16, in <module>
    driver = webdriver.Chrome('/usr/lib/chromium-browser/chromedriver', options=chrome_options)
  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/chrome/webdriver.py", line 81, in __init__
    desired_capabilities=desired_capabilities)
  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally.
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /usr/bin/chromium-browser is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

我已經搜索並閱讀了有關錯誤的所有內容。 我認為這可能是某種類型的權限錯誤,但我沒有想法嘗試。

固定的。 在 crontab 文件中添加 'export DISPLAY=:0' 修復了它。 Selenium 試圖執行但找不到顯示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM