【问题标题】:Python script fails using launchd and SeleniumPython 脚本使用 launchd 和 Selenium 失败
【发布时间】:2016-12-30 23:06:54
【问题描述】:

我正在尝试在 OS X 10.10.5 中使用 launchd 运行一个简单的脚本,但作业失败。我认为这与未正确设置权限/特权有关?

这是它抛出的错误代码:

Traceback(最近一次调用最后一次): 文件“/Users/John/Documents/AutoRun/OpenTwitter.py”,第 7 行,在 驱动程序 = webdriver.Firefox() init 中的文件“/Library/Python/2.7/site-packages/selenium-3.0.0.b2-py2.7.egg/selenium/webdriver/firefox/webdriver.py”,第 64 行 self.service = 服务(executable_path, firefox_binary=self.options.binary_location) init 中的文件“/Library/Python/2.7/site-packages/selenium-3.0.0.b2-py2.7.egg/selenium/webdriver/firefox/service.py”,第 44 行 log_file = open(log_path, "a+") IOError:[Errno 13] 权限被拒绝:'geckodriver.log' Exception AttributeError: "'Service' object has no attribute 'log_file'" in <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x10ca6bdd0>>被忽略

我确实在控制台 job.out 中得到了打印的“启动脚本”,我已经硬编码到我的脚本中,所以我假设 launchd 实际上正在启动脚本,但它遇到了 Selenium/Firefox 驱动程序的问题?这就是我的权限问题发挥作用的地方?

它在 IDE/run 和终端中运行良好。

这是我要运行的测试代码:

#!/usr/bin/python

from selenium import webdriver

print("start script")

driver = webdriver.Firefox()
driver.get("https://twitter.com/search?q=news&src=typd&lang=en")


print("twitter open, done")

P.List如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>JohnsJob.job</string>
    <key>Program</key>
    <string>/Users/John/Documents/AutoRun/OpenTwitter.py</string>
    <key>StandardErrorPath</key>
    <string>/tmp/JohnsJob.job.err</string>
    <key>StandardOutPath</key>
    <string>/tmp/JohnsJob.job.out</string>
    <key>StartCalendarInterval</key>
    <array>
        <dict>
            <key>Hour</key>
            <integer>10</integer>
            <key>Minute</key>
            <integer>14</integer>
            <key>Weekday</key>
            <integer>3</integer>
        </dict>
    </array>
</dict>
</plist>

注意:我更改了此代码在 launchd 中运行的时间,以便进行测试。

【问题讨论】:

  • 你完全正确;缺少权限会阻止您的脚本正确执行。我建议您也将 .plist 包含在您的问题中。
  • 感谢您的反馈,我已将 p.list 代码添加到原始问题中,知道为什么权限设置不正确和/或如何/在什么文件上设置权限?跨度>
  • 您是作为启动代理还是启动守护进程启动它,.plist 位于哪个目录?
  • 它位于 /Users/John/Library/LaunchAgents - 我认为它是一个“用户代理”,这就是它在 launchd 中告诉我的(我是新手,所以不确定这是否正确答案)
  • 这些可能很难在第一次就做好,可能需要尝试一些不同的东西。我将从 .plist 开始,也许尝试将 &lt;key&gt;Program&lt;/key&gt;&lt;string&gt;/Users/John/Documents/AutoRun/OpenTwitter.py&lt;/string&gt; 更改为 &lt;key&gt;ProgramArguments&lt;/key&gt; &lt;array&gt; &lt;string&gt;python&lt;/string&gt; &lt;string&gt;/Users/John/Documents/AutoRun/OpenTwitter.py&lt;/string&gt; &lt;/array&gt;

标签: python python-2.7 selenium launchd selenium-firefoxdriver


【解决方案1】:

我已经设法通过将 geckodriver 放入 /usr/bin 来让它工作

  1. 将文件移动到 /usr/bin 目录:sudo mv chromedriver /usr/bin
  2. 转到 /usr/bin 目录,您需要运行类似“chmod a+x geckodriver”之类的东西来将其标记为可执行。

我认为找到驱动程序的 PATH 并停止脚本死机时遇到问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    相关资源
    最近更新 更多