如何部署每3天运行一次的Selenium脚本?
部署方案(实现每3天运行一次)
以下是几种稳定可行的部署方式,兼顾定时触发需求和环境一致性:
1. VPS + cron 定时任务
这是最适合长期运行的方案,操作简单且可控性强:
- 租一台基础配置的VPS(推荐Ubuntu系统),将脚本上传至服务器指定目录
- 安装依赖环境:
sudo apt update sudo apt install python3 python3-pip chromium-browser pip3 install selenium python-telegram-bot - 配置cron定时任务:
执行crontab -e,添加一行定时规则:
说明:每3天的0点0分自动运行脚本,同时将日志输出到指定文件,方便后续排查问题0 0 */3 * * /usr/bin/python3 /home/your_user/script/your_bot.py >> /home/your_user/script/bot_log.log 2>&1
2. Docker容器化部署
用Docker打包整个运行环境,彻底解决依赖版本不一致、环境不兼容问题:
- 编写
Dockerfile:FROM python:3.9-slim # 安装Chrome浏览器、Driver及系统依赖 RUN apt update && apt install -y chromium chromium-driver RUN pip install selenium python-telegram-bot # 复制脚本到容器内 COPY your_bot.py /app/ WORKDIR /app # 脚本启动命令 CMD ["python", "your_bot.py"] - 构建镜像:
docker build -t telegram-scraper-bot . - 配合宿主机cron定时启动容器:
在宿主机执行crontab -e,添加:0 0 */3 * * docker run --rm telegram-scraper-bot >> /home/your_user/bot_docker_log.log 2>&1
3. 云函数(如AWS Lambda、阿里云函数计算)
若不想维护VPS,可选择无服务器的云函数方案,需适配无桌面环境的Chrome运行:
- 在云函数控制台上传打包好的代码(需包含无头Chrome配置)
- 在控制台设置定时触发器,选择「每3天执行一次」的触发规则
解决Chrome Driver执行问题
你遇到的Driver报错,大多源于版本不匹配、无桌面环境限制或权限问题,按以下步骤排查修复:
1. 启用无头Chrome模式
服务器通常无桌面环境,必须启用无头模式运行Chrome,代码示例:
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument("--headless=new") # 新版无头模式,行为更接近真实Chrome chrome_options.add_argument("--no-sandbox") # 禁用沙箱,规避权限限制 chrome_options.add_argument("--disable-dev-shm-usage") # 解决服务器内存不足问题 chrome_options.add_argument("--disable-gpu") # 禁用GPU加速,适配无桌面环境 # 初始化Driver(系统安装的Driver通常在/usr/bin/chromedriver) driver = webdriver.Chrome(options=chrome_options)
2. 自动匹配Chrome与Driver版本
用webdriver-manager自动下载对应版本的Driver,无需手动核对版本:
- 安装依赖:
pip install webdriver-manager - 修改代码:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
自动下载并使用匹配版本的Driver
driver = webdriver.Chrome(
executable_path=ChromeDriverManager().install(),
options=chrome_options
)
## 3. 排查权限与路径问题 - 确保Chrome和Driver的可执行文件有运行权限:`chmod +x /usr/bin/chromedriver` - 避免用root用户运行脚本,创建普通用户并赋予脚本目录的读写权限 - 若手动指定Driver路径,需确认路径绝对正确,或直接依赖系统PATH自动查找 ## 4. 规避版本冲突 若手动安装Driver,必须保证Driver版本与Chrome版本完全一致: - 查看Chrome版本:`chromium-browser --version` - 下载对应版本的Driver,放到系统PATH目录(如`/usr/bin`) 内容的提问来源于stack exchange,提问作者Abdulaziz
相关产品推荐
相关产品推荐

