Headless Selenium运行后立即退出,Heroku部署该如何解决?
解决方案
- 替换过时的Headless参数
Chrome 112及以上版本已废弃原--headless无头模式参数,改用--headless=new,新模式和有头模式行为完全一致,可解决绝大多数两种模式表现不一致的问题。修改对应配置行:
# 替换旧的 options.add_argument('--headless') 为以下内容 options.add_argument('--headless=new')
- 添加Selenium反检测配置
Headless模式默认携带明显的自动化特征,大部分网站会直接拦截这类请求,导致首页请求失败后没有后续爬取任务,程序直接退出。添加以下配置隐藏特征:
# 替换默认UA,删除HeadlessChrome标识 options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36') # 移除自动化控制标识 options.add_argument('--disable-blink-features=AutomationControlled') options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False)
确认Heroku部署配置正确
检查你的Heroku应用已按顺序添加以下两个官方buildpack,确保Chrome和Chromedriver版本匹配:https://github.com/heroku/heroku-buildpack-google-chromehttps://github.com/heroku/heroku-buildpack-chromedriver
增加等待逻辑避免提前终止
Heroku服务器网络延迟较高,可能出现页面未加载完成就提取链接的情况,最终拿到空链接列表导致程序直接退出。添加超时和等待配置:
# 初始化driver后添加配置 driver.implicitly_wait(15) driver.set_page_load_timeout(30) # 请求首页后增加短暂等待再提取链接,也可使用显式等待定位核心元素加载完成后再操作
- 新增日志排查根因
如果以上操作仍未解决,可捕获driver初始化和页面请求阶段的异常,在Heroku日志中查看具体报错信息:
import traceback try: driver = webdriver.Chrome(executable_path=os.environ.get('CHROMEDRIVER_PATH'), options=options) driver.get(你的基础URL) except Exception as e: print(f"运行报错: {e}") print(traceback.format_exc())
内容的提问来源于stack exchange,提问作者nick
相关产品推荐
相关产品推荐

