You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在sudo运行的Python脚本中以普通用户身份启动Selenium?

在sudo脚本中单独让Selenium以普通用户运行的解决方案

当然可以,给你两种实用的实现方式:

方法1:把Selenium逻辑抽成独立脚本,切换用户执行

把处理深度链接和Selenium的代码单独存成一个独立脚本(比如selenium_auth.py),确保普通用户有读和执行权限。然后在你的sudo主脚本里,用su或者runuser命令切换到普通用户来运行这个脚本,主脚本其他部分依然保持sudo权限。

示例代码:

import subprocess

# 替换成你的普通用户名
normal_user = "your_username"
# 替换成Selenium脚本的实际路径
selenium_script_path = "/home/your_username/scripts/selenium_auth.py"

# 用runuser执行(sudo环境下更稳定)
subprocess.run(
    ["runuser", "-u", normal_user, "--", "python3", selenium_script_path],
    check=True,
    capture_output=True
)

如果用su的话,写法是:

subprocess.run(
    ["su", "-", normal_user, "-c", f"python3 {selenium_script_path}"],
    check=True
)

方法2:在主脚本中临时切换用户执行Selenium代码

直接在Python脚本里切换到普通用户UID,然后初始化Selenium。这种方法不用拆分脚本,但要注意环境变量的问题。

示例代码:

import os
import pwd
from selenium import webdriver

# 替换成你的普通用户名
normal_user = "your_username"
user_info = pwd.getpwnam(normal_user)

# 保存当前sudo环境下的必要环境变量(比如图形界面相关的)
display_env = os.environ.get("DISPLAY")
xauth_env = os.environ.get("XAUTHORITY")

# 切换到普通用户UID
os.setuid(user_info.pw_uid)

# 恢复必要的环境变量,否则浏览器可能启动失败
os.environ["DISPLAY"] = display_env
os.environ["XAUTHORITY"] = xauth_env

# 接下来正常执行Selenium逻辑
driver = webdriver.Chrome()
# 处理深度链接打开应用、认证等操作...
driver.quit()

# 注意:setuid后无法再切换回root,所以如果主脚本后续还有sudo操作,建议用方法1

注意事项

  • 确保普通用户有权限访问浏览器驱动、目标应用,以及脚本用到的文件
  • 远程SSH执行时,要确保X11转发已经开启(如果Selenium需要图形界面)
  • 方法1更稳妥,因为它把Selenium的运行环境完全隔离在普通用户下,避免环境变量冲突

内容的提问来源于stack exchange,提问作者Gilbert Williams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 23:30:59