Selenium & Heroku: urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))

Selenium & Heroku: urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))

设置:

我在 heroku 中使用 selenium 时遇到这个错误:

urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))

我用谷歌搜索但没有找到。错误发生在这段代码的最后一行。


代码

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

UA = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36' \
     '(KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'
DRIVER_PATH = '/app/.chromedriver/bin/chromedriver'

chrome_options = webdriver.ChromeOptions()
chrome_options.binary_location = '/app/.apt/usr/bin/google-chrome'
chrome_options.add_argument(f'--user-agent={UA}')
chrome_options.add_argument(f'--proxy-server=http://my_private_proxy.com:my_port')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')

chrome = webdriver.Chrome(executable_path=DRIVER_PATH, options=options)

这个错误信息...

urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))

...意味着 ChromeDriverHeadless 模式下无法 initiate/spawn 一个新的WebBrowserChrome 浏览器 会话。

关于您使用的二进制文件版本的一些信息可以帮助我们更好地分析错误。但是,由于以下几个原因,urllib3 可能会出现此问题:

This flag is no longer necessary on Linux or macOS. It will become unnecessary on Windows as soon as SwiftShader fails an assert on Windows in headless mode gets fixed.

  • 您可以在Lost UI shared context : while initializing Chrome browser through ChromeDriver in Headless mode

  • 中找到详细的讨论
  • 此外,您可以添加参数--disable-dev-shm-usage来克服资源有限的问题:

    chrome_options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
    
  • 您可以在讨论

  • 中找到关于--disable-dev-shm-usage的详细讨论
  • 根据 当您使用的二进制文件版本之间存在一些 不兼容 时会观察到此问题。

解决方案

  • Chrome驱动程序升级到当前ChromeDriver v2.44级别。
  • 保持Chrome版本在Chromev69-71[=71=之间] 水平。 (as per ChromeDriver v2.44 release notes)
  • 清理你的项目工作区通过你的IDE重建你的项目只需要依赖。
  • 如果您的基础 Web Client 版本太旧,则卸载它并安装最新的 GA 和发布版本的 Web Client
  • 系统重启
  • 执行你的 @Test.