使用 Python/Crontab/Selenium/Time on mac 自动截图

Automated Screenshot with Python / Crontab / Selenium / Time on mac

我今天从其他答案中提取了一些东西(例如:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
browser = webdriver.Firefox()
browser.implicitly_wait(30)
browser.get('https://weather.com/en-AU/weather/today/l/ASXX0023:1:AS?Goto=Redirected')
time.sleep(10)
browser.save_screenshot('screen_shot.png')
browser.close()

除了我不确定如何在 crontab 中执行之外,此解决方案运行良好。

我在输入 crontab -e 之后尝试了这个:

*/30 * * * * export DISPLAY=:0 /usr/local/bin/python3.9 /Users/path/script.py >> /path/screenshot.png

它会打开 firefox window,但屏幕截图是零字节..所以它接近我想要的,但还不够。

我也尝试了一些其他方法 - 使用 script.sh - 虽然我也不确定如何让它起作用。

此外 - 最好在屏幕截图中添加时间和日期,所以任何帮助都是一种祝福。

您能提供任何指导吗?谢谢!

cron 作业将从您的主目录开始,并将屏幕截图写入当前目录。

您的 cron 工作将 将 Python 的标准输出写入一个名称容易误导的 PNG 文件,该文件可能是空的。可能这就是您一直在检查的文件。

可能重组以切换到不同的目录(或修改 Python 脚本以读取输出文件名作为其命令行参数)并编写脚本的输出到一个不同名称的文件,然后还包括标准错误。此外,DISPLAY 变量对 Mac 没有任何用处,所以可能会放弃它。

*/30 * * * * cd code; /usr/local/bin/python3.9 /Users/path/script.py >> screenshot_$(date +\%F).log 2>&1

这也说明了如何为每个单独的日期创建一个新的日志文件。在 crontab 中反斜杠百分号的要求是一个常见的错误。

相反,如果您希望 Python 脚本为每次调用生成唯一的文件名,请尝试类似

from datetime import datetime

... 
browser.save_screenshot(
    'screen_shot_' + datetime.now().strftime('%F_%T') + '.png')

这将生成类似 screen_shot_2021-06-30_10:26:26.png 的文件;如果您想要不同的日期或时间格式,可以使用 argument to strftime()