【问题标题】:Trying to run a python script through crontab but getting errors related to Remote webdriver init尝试通过 crontab 运行 python 脚本,但出现与远程 webdriver init 相关的错误
【发布时间】:2021-05-12 09:18:27
【问题描述】:

这是一个python脚本。在 Python 3.8 中运行。浏览器 - Firefox 和 geckodriver(最新版本)

#!/usr/bin/python3

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary (#added later to solve)

if __name__ == '__main__': (#added later to solve error)

binary = FirefoxBinary('/usr/bin/firefox') (#added later to solve error)
z=''
with open('dailynews.txt','w+') as fileobj: 
    dailynews=['State Bank of India']

for z in dailynews:
  
    wbpg='https://news.google.com/search?q=' + str(z) + ' when:1d'
    driver=webdriver.Firefox() (#This was earlier and worked fine.)        
    driver=webdriver.Firefox(firefox_binary=binary,executable_path='/usr/bin/geckodriver')
    (#added later to solve)
    driver.get(wbpg)
    
    articlelist=WebDriverWait(driver,20).until(EC.presence_of_all_elements_located
    ((By.XPATH,"//*@class='DY5T1d RZIKme']")))  
    articlelist=driver.find_elements_by_xpath("//*[@class='DY5T1d RZIKme']")
    
    for i in articlelist:
        print(i.text,file=fileobj) #,file=fileobj >> to write to a file
    driver.quit()

'''

此脚本在 python ide (eclipse>PyDev) 中运行良好,并且在终端中运行良好。 但是,我在 crontab 中安排了相同的计划(使用 crontab -e)。

* * * * * /usr/bin/python3 /Documents/morning_newspaper.py >> ~/Documents/cron.log 2>&1)

作业正在运行,但出现以下错误:

Traceback(最近一次调用最后一次):文件 “/home/leopard/Documents/morning_newspaper.py”,第 22 行,在 driver=webdriver.Firefox(firefox_binary=binary,executable_path='/usr/bin/geckodriver') 文件 “/home/leopard/.local/lib/python3.8/site-packages/selenium/webdriver/firefox webdriver.py",第 170 行,在 init RemoteWebDriver.init( 文件 "/home/leopard/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", 第 157 行,在 init self.start_session(capabilities, browser_profile) 文件 "/home/leopard/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", 第 252 行,在 start_session 响应中 = self.execute(Command.NEW_SESSION,参数)文件 "/home/leopard/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", 第 321 行,在执行 self.error_handler.check_response(response) 文件 “/home/leopard/.local/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py”, 第 242 行,在 check_response raise exception_class(message, screen, 堆栈跟踪)selenium.common.exceptions.WebDriverException:消息: 进程意外关闭,状态为 1

这是作业中的系统日志 sn-p:

2 月 8 日 12:23:01 豹 CRON[7344]: (豹) CMD (/usr/bin/python3 /Documents/morning_newspaper.py >> ~/Documents/cron.log 2>&1) 2 月 8 日 12:23:01 leopard dbus-daemon [1552]: [会话 uid=1000 pid=1552] 通过 systemd 激活:service name='org.freedesktop.Tracker1' unit='tracker-store.service' 由 ':1.1' 请求(uid=1000 pid=1548 comm="/usr/libexec/tracker-miner-fs " label="unconfined") 2 月 8 日 12:23:01 leopard systemd[1540]: 启动 Tracker 元数据库 存储和查找管理器... 2 月 8 日 12:23:01 leopard dbus-daemon[1552]: [session uid=1000 pid=1552] 成功激活服务 'org.freedesktop.Tracker1' 2 月 8 日 12:23:01 leopard systemd [1540]: 启动 Tracker 元数据数据库存储和查找管理器。 2月8日 12:23:01 leopard dbus-daemon [1552]: [会话 uid=1000 pid=1552] 通过 systemd 激活:服务 name='org.freedesktop.Tracker1.Miner.Extract' unit='tracker-extract.service' 由 ':1.1' 请求(uid=1000 pid=1548 comm="/usr/libexec/tracker-miner-fs " label="unconfined") 2 月 8 日 12:23:01 leopard systemd[1540]: 启动 Tracker 元数据提取器... 2 月 8 日 12:23:01 leopard tracker-extract[7356]:将调度程序策略设置为 SCHED_IDLE Feb 8 12:23:01 leopard tracker-extract[7356]:设置 优先级为 8 月 19 日 12:23:01 leopard dbus-daemon [1552]: [session uid=1000 pid=1552] 成功激活服务 'org.freedesktop.Tracker1.Miner.Extract' 2 月 8 日 12:23:01 豹 systemd[1540]:已启动 Tracker 元数据提取器。 2月8日 12:23:12 leopard systemd [1540]:tracker-extract.service:成功。 2月8日 12:23:31 leopard tracker-store[7349]: OK Feb 8 12:23:31 leopard systemd[1540]: tracker-store.service: 成功。

最初,认为这将是由于驱动程序启动,因此添加了 Firefox 二进制文件和所有(来自 stackoverflow 上的帖子),但这不起作用。

感谢您提供预期的解决方案。 '''

【问题讨论】:

  • 可能和cron使用的用户有关,试试headless mode
  • 成功了。 :-) 非常感谢和荣誉 DeepSpace
  • 很高兴听到,我会回答的

标签: python selenium selenium-webdriver firefox cron


【解决方案1】:

cron 用于执行任务的用户/环境可能没有启动 UI 进程的权限/能力。

要解决这个问题,您可以使用无头模式:

...
binary = FirefoxBinary('/usr/bin/firefox')
binary.add_command_line_options('-headless')
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多