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

Selenium Firefox驱动无法读取/tmp目录文件进行上传的问题

问题原因及解决方案

问题根源

Kubuntu 22.04.1默认预装的Firefox是Snap包,Snap的沙箱隔离机制会为Firefox进程创建独立的文件系统视图——Firefox内部看到的/tmp是其沙箱专属的临时目录,而非系统全局的/tmp。你在系统全局/tmp创建的文件,Snap版Firefox完全无法访问,因此Selenium调用send_keys时会抛出文件不存在的错误。

而手动选择文件能成功的原因是:系统文件选择器运行在沙箱外,可正常访问全局/tmp,它会把文件内容传递给Firefox,而非让Firefox直接读取/tmp路径。

解决方案

方案1:替换为非Snap版Firefox(推荐)

移除Snap版Firefox,改用Mozilla官方PPA的原生deb包:

sudo snap remove firefox
sudo add-apt-repository ppa:mozillateam/ppa
sudo apt update
sudo apt install firefox

安装完成后,重新运行你的Selenium脚本,系统全局/tmp的文件即可被Firefox正常访问。

方案2:使用Snap有权限访问的临时目录

无需替换Firefox,将测试文件创建在Snap允许访问的目录中,比如用户专属临时目录/run/user/$(id -u)/tmp(该目录属于当前用户,Snap默认有权限访问):

from selenium import webdriver
from pathlib import Path
import os

# 创建用户专属临时目录(不存在则创建)
user_tmp_dir = Path(f"/run/user/{os.getuid()}/tmp")
user_tmp_dir.mkdir(exist_ok=True)

test_file = user_tmp_dir / "my_test_file"
test_file.touch()

driver = webdriver.Firefox()
driver.get("https://viljamis.com/filetest/")
driver.find_element('xpath', '//input[@type="file"]').send_keys(str(test_file))

方案3:放宽Snap权限(不推荐)

通过命令给Firefox Snap添加访问外部目录的权限(会降低沙箱安全性):

sudo snap connect firefox:removable-media

该权限原本用于访问可移动存储,但也能让Firefox访问系统全局/tmp,不过不建议长期使用此方法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:05:13