通过HTML按钮运行Python Selenium脚本时遇只读文件系统错误求助
解决GAE开发服务器中Selenium无法创建geckodriver.log的问题
嘿,这个问题我之前也碰到过——本质是Google App Engine(GAE)的开发服务器把大部分文件目录都设成只读了,而Selenium默认会在当前工作目录生成geckodriver.log,这就撞在只读限制上,触发了IOError。
下面给你两个实用的解决办法:
办法1:把日志移到临时目录
系统的临时目录是GAE允许写入的区域,你可以手动指定geckodriver把日志写到这里。代码示例如下:
from selenium import webdriver from selenium.webdriver.firefox.service import Service import tempfile import os # 拿到系统临时文件夹的路径 temp_folder = tempfile.gettempdir() log_file_path = os.path.join(temp_folder, "geckodriver.log") # 初始化Service时指定日志路径 firefox_service = Service(log_file_path) driver = webdriver.Firefox(service=firefox_service) # 你的业务逻辑代码... # 记得退出驱动 driver.quit()
办法2:直接禁用日志
如果这个日志对你来说没用,完全可以让geckodriver不生成它。不同系统写法稍微有点区别:
Windows系统:
from selenium import webdriver from selenium.webdriver.firefox.service import Service # 用NUL让日志直接消失 firefox_service = Service(service_log_path="NUL") driver = webdriver.Firefox(service=firefox_service)
Linux/macOS系统:
from selenium import webdriver from selenium.webdriver.firefox.service import Service # 用/dev/null丢弃日志 firefox_service = Service(service_log_path="/dev/null") driver = webdriver.Firefox(service=firefox_service)
额外提醒一下
这里要注意,GAE的生产环境其实是不支持运行Selenium这类需要启动浏览器的工具的——生产环境没有图形界面,也不允许启动外部进程。如果你的最终目标是部署到GAE生产环境,可能得换个思路:比如用无头浏览器云服务,或者切换到Google Cloud Run这类支持自定义进程的平台。
内容的提问来源于stack exchange,提问作者jaspreet sohal
相关产品推荐
相关产品推荐

