我用Python实现了一个selenium脚本,将一些图片和内容上传到Facebook,我将其命名为FBUpload.py。
当我以这种方式启动它时,它完美地工作(在无头模式下):
Xvfb :10 -ac &
python3 /home/someuser/scripts/FBUpload.py
问题是,当我试图配置一个启动相同脚本的cronjob时,方法是:
00 * * * * Xvfb :10 -ac &
01 * * * * python3 /home/someuser/scripts/FBUpload.py
45 * * * * kill -9 $(ps -auxw |grep Xvf|head -1| awk '{print $2}')
如果出现以下错误,则会失败:
无法找到系统的复制/粘贴机制。
这是我的设置:Ubuntu20.04.4LTS\ Python3 _
下面是我已经安装的复制和粘贴机制:
PyQt5 5.15.6
PyQt5-Qt5 5.15.2
PyQt5-sip 12.10.1
QtPy 2.1.0
xclip 0.13-1 (in /usr/bin because it was installed via apt)
xsel 1.2.0+git9bfc13d.20180109-3 (in /usr/bin because it was installed via apt)
(我无法像本文中描述的那样下载PyQt4或qkt:pyperclip模块引发错误消息,所以我按照建议的解决方案下载了QtPy。但问题依然存在。
我尝试了类似问题的帖子中的修复,但没有一个对我有用。我想知道这个问题是否与用户有关(因为当我用"sudo“运行脚本时,根用户找不到非root用户安装的库)。
我还发现了另一个似乎类似的问题(但问题不是cron,而是systemd):Ubuntu 16.04 - Python 3-终端和systemd中的Pyperclip
发布于 2022-07-27 13:10:12
您需要提供DISPLAY
env。
试试这个:
01 * * * * DISPLAY=":0" python3 /home/someuser/scripts/FBUpload.py
如果这不起作用,请检查当前env,尝试找到正确的值:
echo $DISPLAY
发布于 2022-07-27 22:35:03
剪贴板是GUI不可分割的一部分。由于您正在使用Xvfb
,因此您的系统可能没有自己的GUI。所以没有剪贴板可以复制和粘贴。吡咯烷酮夹没有可访问的剪贴板,因此无论以何种方式访问它,都将面临以下错误:
Pyperclip could not find a copy/paste mechanism for your system
解决方案
在shell中检查此命令:
xclip
如果输出是Error: No display: <null>
,事情可能会变得更加困难。
但是,为了有一个GUI,因为您可以通过ssh将隧道X11设置到桌面计算机上的X服务器。如果您仍然从xclip中看到一个错误,那么问题在于您的设置。最简单的方法是检查:
echo $DISPLAY
如果您得到一个空白输出,那么您的会话对您的X11隧道一无所知。你需要正确设置隧道。一旦你的设置是正确的固定,除草夹和你的程序应该是工作的。
替代方法
另一种方法是使用PyVirtualDisplay ( Xvfb、Xephyr和Xvnc的Python包装器)运行无头硒WebDriver测试。
在Ubuntu/Debian上安装PyVirtualDisplay:
$ sudo apt-get install xvfb python-pip
$ sudo pip install pyvirtualdisplay
在您的程序中,您可以:
#!/usr/bin/env python
from pyvirtualdisplay import Display
from selenium import webdriver
display = Display(visible=0, size=(800, 600))
display.start()
# now Browser will run in a virtual display but won't be visible
driver = webdriver.Firefox()
driver.get('http://www.google.com')
print driver.title
browser.quit()
display.stop()
https://stackoverflow.com/questions/72854490
复制相似问题