在Heroku上使用Headless模式的Selenium出现ERR_CONNECTION_RESET错误求助
解决Heroku部署Django+Selenium时headless Chrome的ERR_CONNECTION_RESET错误
以下是针对问题的可行解决方案:
1. 切换到新版headless模式
Chrome 112及以上版本中,旧的--headless参数对应旧版无头模式,行为与正常Chrome差异较大,容易引发加载异常。替换为新版无头模式参数:
options.add_argument("--headless=new")
2. 添加标准窗口尺寸参数
无头模式默认窗口极小,部分网站会因适配问题拒绝连接或加载失败,强制设置标准窗口大小:
options.add_argument("--window-size=1920,1080")
3. 配置Heroku正确构建包与环境变量
不要依赖ChromeDriverManager自动安装驱动,Heroku环境需手动指定Chrome和驱动路径:
- 添加两个Heroku构建包:
heroku buildpacks:add https://github.com/heroku/heroku-buildpack-google-chrome.git heroku buildpacks:add https://github.com/heroku/heroku-buildpack-chromedriver.git - 设置环境变量:
heroku config:set CHROME_BIN=/app/.apt/usr/bin/google-chrome heroku config:set CHROMEDRIVER_PATH=/app/.chromedriver/bin/chromedriver - 修改Webdriver初始化代码,直接指定路径:
import os from selenium.webdriver.chrome.service import Service # ...其他options配置 self.webdriver = webdriver.Chrome( service=Service(os.environ.get("CHROMEDRIVER_PATH")), options=options, )
4. 补充反检测与网络适配参数
无头Chrome的特征容易被目标网站反爬机制识别,添加以下参数模拟正常浏览器:
# 模拟正常User-Agent options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36') # 禁用自动化特征检测 options.add_argument("--disable-blink-features=AutomationControlled") # 允许加载非安全内容(若目标网站包含HTTP资源) options.add_argument("--allow-running-insecure-content") # 禁用Viz compositor,解决部分渲染异常 options.add_argument("--disable-features=VizDisplayCompositor")
5. 排查目标网站反爬策略
若以上方法无效,可在本地用--headless=new模式运行并开启日志,查看详细错误:
options.add_argument("--log-level=ALL") options.add_argument("--v=1")
通过日志确认是否存在目标网站直接拒绝无头浏览器请求的情况。
内容的提问来源于stack exchange,提问作者Daniel N.
相关产品推荐
相关产品推荐

