如何在部署于Heroku的Selenium机器人中新增及更新Excel工作表
Heroku部署Selenium项目Excel定期更新解决方案
Heroku的dyno文件系统是临时存储,每次dyno重启、重新部署后,本地写入的文件都会被重置,直接把Excel放在代码包里每次更新都要重新部署效率很低,以下是3种可落地的方案:
方案1:使用Heroku Config Vars存储链接(最省事,适合链接数量不多的场景)
你可以把Excel里的所有链接拼成逗号分隔的字符串,直接存到Heroku后台的配置变量里,后续更新链接只需要在Heroku后台修改配置变量即可,修改后Heroku会自动重启dyno,无需重新部署代码。
代码修改示例:
from selenium import webdriver import os import pandas as pd # 从配置变量读取链接列表 url_list = os.environ.get('TARGET_URLS', 'https://youtube.com').split(',') op = webdriver.ChromeOptions() op.binary_location = os.environ.get('GOOGLE_CHROME_BIN') op.add_argument("--headless") op.add_argument("--no-sandbox") op.add_argument("--disable-dev-sh-usage") driver = webdriver.Chrome(executable_path = os.environ.get('CHROMEDRIVER_PATH'), options=op) for url in url_list: driver.get(url) print(driver.page_source)
操作步骤:
- 打开你的Heroku应用后台,进入
Settings→Config Vars - 新增键为
TARGET_URLS,值为你所有链接用逗号拼接的字符串,更新时直接修改这个值即可
方案2:拉取远程存储的Excel文件(适合Excel内容复杂、更新频繁的场景)
你可以把Excel文件上传到私有云存储,代码里每次运行任务前先拉取最新的Excel文件到本地临时目录,解析后使用。后续更新只需要覆盖云存储里的Excel文件即可,不需要修改Heroku上的任何配置和代码。
代码示例片段:
import pandas as pd import requests # 拉取最新Excel到临时目录 excel_resp = requests.get("你的Excel文件访问地址") with open("/tmp/target_urls.xlsx", "wb") as f: f.write(excel_resp.content) # 解析Excel df = pd.read_excel("/tmp/target_urls.xlsx") url_list = df['url列名'].tolist()
方案3:CI/CD自动部署(适合希望把Excel存在代码仓库的场景)
配置代码仓库的CI/CD流程,只要你把更新后的Excel推送到仓库的指定分支,CI/CD会自动把最新代码(含更新后的Excel)部署到Heroku,不需要你手动执行部署操作。
原有代码优化提示
你给出的测试代码里有两个可以调整的点:
chrome_options参数已经被弃用,建议改成options避免警告- 不要用
input获取输入,Heroku后台运行的无头服务没有交互式输入的环境,要从环境变量或者外部文件读取参数
内容的提问来源于stack exchange,提问作者ANIMESH SINGH
相关产品推荐
相关产品推荐

