我在 Ubuntu 服务器上编写了一个小 python 脚本,用于在 headless 模式下运行 chrome 浏览器并打开一个 url(请参阅下面的脚本)。目前我的服务器上有两个不同的用户:假设 user1 和 user2。
我想要实现的目标:
- 使用 user1 和 user2 登录(两个终端 session )
- 完成后从 user1 启动脚本
- 从 user2 启动脚本
如果我使用 user1 启动脚本,一切都会正常。
import sys
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
def getChromeDriver():
options = Options()
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--headless")
options.add_argument("start-maximized")
options.add_argument("window-size=1900,1080")
s = Service("/home/dev/chromedriver")
driver = webdriver.Chrome(options=options, service=s)
return driver
driver = getChromeDriver()
driver.get("https://www.google.com")
time.sleep(3)
driver.quit()
当我使用 su - user2
切换到 user2 并启动脚本时,我收到错误消息:DevToolsActivePort 文件不存在
。我需要重新启动服务器才能从 user2 执行脚本。但是我无法执行 user1 的脚本(同样的问题)。奇怪的是,当我以 root 身份运行脚本(无需重新启动)时,它就可以工作。
简而言之:似乎我只能与服务器重新启动后首次执行脚本的用户一起运行脚本。
感谢任何帮助或提示。
问候,德博
最佳答案
我认为问题是只有 user1
拥有 /tmp/Crashpad
的权限,因为该用户首先创建了该文件夹。 root
可以在任何地方读/写,因此对于 root 用户来说它可以工作。您的 user2
无法从 /tmp/Crashpad
读取/写入,这会导致错误消息。
要检查用户特定的临时目录是否可以解决您的问题,您可以在使用 user1
运行脚本后发出 chmod -R 777/tmp/Crashpad
。这将使该文件夹对任何人都可读/可写。然后尝试使用 user2
运行您的脚本,它应该可以工作。
在 Ubuntu 上,您可以通过添加以下行来设置用户特定的临时目录
导出 TMPDIR=$HOME/tmp
到位于用户 $HOME
文件夹中的 .profile
或 .bashrc
文件。
关于python - 如何使用两个不同的用户运行 selenium webdriver?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72630883/