title: ConnectionResetError: [Errno 104] Connection reset by peer and ERR_NAME_NOT_RESOLVED on heroku with mobile testing through Selenium
body: <p>I'd like to test multiple mobile user agents with selenium and chrome. I'm using python 3.6 and deploying to heroku. Based on <a href="http://chromedriver.chromium.org/mobile-emulation" rel="noreferrer">http://chromedriver.chromium.org/mobile-emulation</a> .</p>
  
  <p>You can download my project for both windows and heroku use at:</p>
  
  <pre><code>https://github.com/kc1/mobiletest
  </code></pre>
  
  <p>(keep in mind that if you deploy to heroku you have to set FLASK_CONFIG to production. Also please note that the code in the project is slightly different than in this question because I've been playing with the code over the past week.)</p>
  
  <p>I have:</p>
  
  <pre><code>def some_long_calculation():
      driver = create_chromedriver('kkk')
      # driver = create_chromedriver()
  
      driver.get("https://www.yahoo.com/")
      .....
  </code></pre>
  
  <p>and :</p>
  
  <pre><code>def create_chromedriver(ua=False):
      options = webdriver.ChromeOptions()
      CHROMEDRIVER_PATH = os.getenv('$HOME') or basedir+'/chromedriver.exe'
      FLASK_CONFIG = os.getenv('FLASK_CONFIG')
  
      if ua:
  
          mobile_emulation = {"deviceName": "Nexus 5"}
          options.add_experimental_option("mobileEmulation", mobile_emulation)
  
  
      if FLASK_CONFIG and FLASK_CONFIG == "production":
          CHROMEDRIVER_PATH = '/app/.chromedriver/bin/chromedriver'
          GOOGLE_CHROME_SHIM = os.getenv('$GOOGLE_CHROME_SHIM') or 'no path found'
          options.binary_location = '/app/.apt/usr/bin/google-chrome-stable'
  
          options.add_argument('--disable-gpu')
          options.add_argument('--no-sandbox')
  
      return webdriver.Chrome(executable_path=CHROMEDRIVER_PATH, options=options)  
  </code></pre>
  
  <p>If I run it locally with the mobile browser enabled It works as expected:</p>
  
  <p><a href="https://i.stack.imgur.com/fSGZY.png" rel="noreferrer"><img src="https://i.stack.imgur.com/fSGZY.png" alt="enter image description here"></a></p>
  
  <p>If I run it on heroku with the mobile browser enabled :</p>
  
  <p><a href="https://i.stack.imgur.com/eVP8Z.png" rel="noreferrer"><img src="https://i.stack.imgur.com/eVP8Z.png" alt="enter image description here"></a></p>
  
  <p>Then I tried it on heroku with the mobile user disabled I get:</p>
  
  <p><a href="https://i.stack.imgur.com/32ObW.png" rel="noreferrer"><img src="https://i.stack.imgur.com/32ObW.png" alt="enter image description here"></a></p>
  
  <p>So at least I know the setup is working as far as chrome and chromedriver. </p>
  
  <p>heroku Logs:</p>
  
  <pre><code>2018-07-15T17:37:53.967643+00:00 app[web.1]:     driver = create_chromedriver('kkk')
  2018-07-15T17:37:53.967637+00:00 app[web.1]:     png = some_long_calculation()
  2018-07-15T17:37:53.967645+00:00 app[web.1]:   File "/app/app/main/cl.py", line 120, in create_chromedriver
  2018-07-15T17:37:53.967640+00:00 app[web.1]:   File "/app/app/main/cl.py", line 123, in some_long_calculation
  2018-07-15T17:37:53.967648+00:00 app[web.1]:     return webdriver.Chrome(executable_path=CHROMEDRIVER_PATH, options=options)
  2018-07-15T17:37:53.967651+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", line 75, in __init__
  2018-07-15T17:37:53.967654+00:00 app[web.1]:     desired_capabilities=desired_capabilities)
  2018-07-15T17:37:53.967656+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 156, in __init__
  2018-07-15T17:37:53.967659+00:00 app[web.1]:     self.start_session(capabilities, browser_profile)
  2018-07-15T17:37:53.967661+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 251, in start_session
  2018-07-15T17:37:53.967669+00:00 app[web.1]:     response = self.command_executor.execute(driver_command, params)
  2018-07-15T17:37:53.967664+00:00 app[web.1]:     response = self.execute(Command.NEW_SESSION, parameters)
  2018-07-15T17:37:53.967667+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 318, in execute
  2018-07-15T17:37:53.967672+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/selenium/webdriver/remote/remote_connection.py", line 472, in execute
  2018-07-15T17:37:53.967674+00:00 app[web.1]:     return self._request(command_info[0], url, body=data)
  2018-07-15T17:37:53.967677+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/selenium/webdriver/remote/remote_connection.py", line 496, in _request
  2018-07-15T17:37:53.967679+00:00 app[web.1]:     resp = self._conn.getresponse()
  2018-07-15T17:37:53.967682+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/http/client.py", line 1331, in getresponse
  2018-07-15T17:37:53.967685+00:00 app[web.1]:     response.begin()
  2018-07-15T17:37:53.967687+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/http/client.py", line 297, in begin
  2018-07-15T17:37:53.967695+00:00 app[web.1]:     line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  2018-07-15T17:37:53.967690+00:00 app[web.1]:     version, status, reason = self._read_status()
  2018-07-15T17:37:53.967698+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/socket.py", line 586, in readinto
  2018-07-15T17:37:53.967692+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/http/client.py", line 258, in _read_status
  2018-07-15T17:37:53.967700+00:00 app[web.1]:     return self._sock.recv_into(b)
  2018-07-15T17:37:53.967712+00:00 app[web.1]: ConnectionResetError: [Errno 104] Connection reset by peer
  </code></pre>
  
  <p>How can I fix this?</p>
  
  <p>EDIT:</p>
  
  <p>Thanks for your detailed answer. I've changed the code to incorporate the flags you mentioned. Chrome version is 67.0.3396.99. Chromedriver is 2.40 and selenium is 3.13. Unfortunately, there is no change in the result. I'm still getting the same error. As far as  your stage 2 and 3 advice. I'm currently deploying to heroku so I do not have total control of the environment variables. Is there a way to make of these changes using python?</p>
  
  <p>EDIT 2:</p>
  
  <p>As I think about it more on <a href="https://sites.google.com/a/chromium.org/chromedriver/mobile-emulation" rel="noreferrer">https://sites.google.com/a/chromium.org/chromedriver/mobile-emulation</a> the example uses</p>
  
  <pre><code>from selenium import webdriver
  mobile_emulation = { "deviceName": "Nexus 5" }
  chrome_options = webdriver.ChromeOptions()
  chrome_options.add_experimental_option("mobileEmulation", mobile_emulation)
  driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub',
                    desired_capabilities = chrome_options.to_capabilities())
  </code></pre>
  
  <p>Are you suggesting the browser is at '<a href="http://127.0.0.1:4444/wd/hub" rel="noreferrer">http://127.0.0.1:4444/wd/hub</a>'</p>