Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Setup:

  • selenium: 3.141.0
  • python: 3.6.7
  • heroku-stack: heroku-18
  • headless-chrome: v71.0.3578.80 buildpack installed
  • chromedriver: v2.44.609551 buildpack installed

I'm getting this error when using selenium in heroku:

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

I googled but didn't have luck. The error happens at the last line of this code.


Code

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)
like image 504
madtyn Avatar asked Nov 28 '18 14:11

madtyn


People also ask

What is selenium?

Selenium is a chemical element with symbol Se and atomic number 34. It is a nonmetal with properties that are intermediate between the elements on either side in the periodic table, sulfur and tellurium.

What is Selenium IDE and how do I use it?

If you want to create quick bug reproduction scripts, create scripts to aid in automation-aided exploratory testing, then you want to use Selenium IDE; a Chrome, Firefox and Edge add-on that will do simple record-and-playback of interactions with the browser. Simon is stepping down as lead of the Selenium project.

What is the best selenium source?

Good natural food sources of selenium include: Whole foods are the best sources of selenium. The mineral may be destroyed during processing. What are the risks of taking selenium? Side effects. Taken at normal doses, selenium does not usually have side effects.

Where is selenium found in the body?

Selenium is most commonly found as an impurity, replacing a small part of the sulfur in sulfide ores of many metals. In living systems, selenium is found in the amino acids selenomethionine, selenocysteine, and methylselenocysteine.


1 Answers

This error message...

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

...implies that the ChromeDriver in Headless mode was unable to initiate/spawn a new WebBrowser i.e. Chrome Browser session.

Some information regarding the versions of the binaries you are using would have helped us to analyze the error in a better way. However, this issue of urllib3 can be obseved due to several reasons as mentioned below:

  • As you are using non Windows OS, the argument --disable-gpu is not needed as in the discussion Headless: make --disable-gpu flag unnecessary [email protected] mentioned:

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.

  • You can find a detailed discussion in Lost UI shared context : while initializing Chrome browser through ChromeDriver in Headless mode

  • Additionally, you can add the argument --disable-dev-shm-usage to overcome limited resource problems:

    chrome_options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
    
  • You can find a detailed discussion on --disable-dev-shm-usage in the discussion org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist while trying to initiate Chrome Browser

  • As per urllib3.exceptions.ProtocolError: ('Connection aborted.', error(10054, 'An existing connection was forcibly closed by the remote host')) this issue was observed when there is some incompatibility between the version of the binaries you are using.

Solution

  • Upgrade ChromeDriver to current ChromeDriver v2.44 level.
  • Keep Chrome version between Chrome v69-71 levels. (as per ChromeDriver v2.44 release notes)
  • Clean your Project Workspace through your IDE and Rebuild your project with required dependencies only.
  • If your base Web Client version is too old, then uninstall it and install a recent GA and released version of Web Client.
  • Take a System Reboot.
  • Execute your @Test.
like image 128
undetected Selenium Avatar answered Oct 24 '22 03:10

undetected Selenium