如何在Heroku部署每5小时运行的Selenium校园成绩爬取Python程序
把Selenium成绩爬取程序部署到Heroku并实现每5小时自动运行
先改程序里的几个关键地方
1. 删掉没用的代码
原代码里导入了from tkinter import *但根本没用到,直接删了就行,省得多余依赖出问题。
2. 别把账号密码写死在代码里
把硬编码的用户名、密码、网址换成从环境变量读取,避免泄露:
import os username = os.environ.get("SCHOOL_USERNAME") password = os.environ.get("SCHOOL_PASSWORD") url = os.environ.get("SCHOOL_URL")
后面在Heroku后台配置这些变量就行。
3. 适配Heroku的Chrome环境
Heroku的无头Chrome需要特定配置,把原有的驱动初始化代码换成下面这段:
from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager chrome_options = webdriver.ChromeOptions() chrome_options.add_argument("--headless") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-dev-shm-usage") chrome_options.binary_location = os.environ.get("GOOGLE_CHROME_BIN") driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
这样能保证驱动在Heroku上正常跑起来。
4. 修改文件保存方式
Heroku的文件系统是临时的,重启后文件就没了。如果只是临时存一下,把原有的文件路径改成当前目录:
# 替换原有的文件保存代码 with open(f"{date}.txt", 'w', encoding='utf-8') as f: date = date.replace("--", ":") f.write(f"{date}\n\nTrimester1 = {Trimestre1}\n\nTrimester2 = {Trimestre2}\n\nTrimester3 = {Trimestre3}")
要是想持久化保存,建议加个云存储(比如免费的AWS S3额度),把文件传上去。
部署到Heroku的步骤
1. 准备三个配置文件
requirements.txt:列全所有依赖包
selenium==4.15.0 beautifulsoup4==4.12.2 webdriver-manager==4.0.1 python-dotenv==1.0.0
Procfile:告诉Heroku怎么运行你的程序
worker: python your_script_name.py
把your_script_name换成你实际的脚本文件名。
runtime.txt:指定Python版本(用3.10就行,兼容大部分依赖)
python-3.10.12
2. 上传代码到Heroku
- 先装Heroku CLI,然后登录:
heroku login - 创建一个Heroku应用:
heroku create 你的应用名 - 添加Chrome相关的buildpack:
heroku buildpacks:add https://github.com/heroku/heroku-buildpack-google-chrome.git heroku buildpacks:add https://github.com/heroku/heroku-buildpack-chromedriver.git heroku buildpacks:add heroku/python
- 配置环境变量(把括号里的内容换成你自己的信息):
heroku config:set SCHOOL_USERNAME=你的学号/用户名 heroku config:set SCHOOL_PASSWORD=你的密码 heroku config:set SCHOOL_URL=www.SchoolWebsite.com heroku config:set GOOGLE_CHROME_BIN=/app/.apt/usr/bin/google-chrome
- 推送代码:
git init git add . git commit -m "第一次部署" git push heroku main
设置每5小时自动运行
用Heroku的Scheduler插件:
- 安装Scheduler:
heroku addons:create scheduler:standard - 打开Scheduler管理界面:
heroku addons:open scheduler - 点击「Add Job」,设置:
- 频率选「Every 5 hours」
- 命令填
python your_script_name.py - 时区选你所在的时区(比如Asia/Shanghai)
几个要注意的点
- Heroku免费版30分钟没活动会休眠,但Scheduler触发的任务会自动唤醒应用。
- 免费版每月有550小时运行时长,每5小时跑一次,每次就算跑5分钟,每月也才12小时左右,完全够用。
- 如果遇到页面加载超时,适当把
WebDriverWait的等待时间调长一点,或者加个重试逻辑。
内容的提问来源于stack exchange,提问作者The_Fishy
相关产品推荐
相关产品推荐

