Python Selenium Pixiv爬虫定时运行无法读取同目录database.txt故障排查
故障原因及解决方案
可能的故障原因
- 工作目录不匹配:这是最常见的原因。你代码中访问
database.txt用的是相对路径,VSCode运行时会自动把工作目录切换到脚本所在目录,所以能正常找到文件。但定时任务(Windows任务计划程序/ Linux cron等)默认的工作目录是系统指定的(比如Windows下默认是C:\Windows\System32),运行脚本时会在默认工作目录下新建database.txt,不会读写你脚本目录下的目标文件。 - 权限不足:定时任务默认运行的用户身份(比如Windows的SYSTEM用户)可能没有脚本所在目录、
database.txt文件、下载保存目录的读写权限,导致文件操作失败。 - 环境变量不匹配:定时任务的运行环境可能没有加载你当前用户的环境变量,导致无法找到Python解释器、Selenium依赖的geckodriver,或者Firefox浏览器路径,脚本运行提前中断,自然不会执行到更新数据库的步骤。
- 无头模式运行异常:虽然你已经配置了Firefox无头模式,但部分定时任务运行环境缺少必要的图形依赖,导致Selenium启动浏览器失败,脚本提前终止。
对应解决方案
- 固定文件的绝对路径
修改代码中所有相对路径的文件访问逻辑,先获取当前脚本所在的绝对目录,再拼接目标文件路径,示例修改如下:
# 在代码开头添加以下内容,获取脚本所在目录的绝对路径 import os BASE_DIR = os.path.dirname(os.path.abspath(__file__)) # 之后所有访问database.txt的地方,都替换为拼接后的路径 # 例如原来的 open('database.txt', 'a+', encoding='utf-8') 改为: with open(os.path.join(BASE_DIR, 'database.txt'), 'a+', encoding='utf-8') as file:
下载目录的路径也建议统一用绝对路径,避免相对路径导致的保存失败。
- 调整定时任务配置
如果是Windows系统使用任务计划程序,在创建任务的「操作」选项卡中,填写「起始于(可选)」的路径为你的脚本所在目录;也可以写一个bat批处理脚本,先cd到脚本目录再执行Python命令,把批处理脚本设置为定时任务的执行目标:
@echo off cd /d "你的脚本所在目录的绝对路径" python 你的脚本文件名.py
检查权限配置
把定时任务的运行用户设置为你自己的登录用户,或者给默认运行用户开放脚本目录、database.txt、下载目录的读写权限。添加日志排查问题
在定时任务的执行命令中添加日志输出,查看具体报错信息,比如Windows下可以修改批处理脚本为:
@echo off cd /d "你的脚本所在目录的绝对路径" python 你的脚本文件名.py >> run.log 2>&1
运行后查看run.log文件即可定位具体报错位置。
内容的提问来源于stack exchange,提问作者bringand1
相关产品推荐
相关产品推荐

