MaxRetryError: HTTPConnectionPool: Max rebashs superados (Causado por ProtocolError (‘Conexión cancelada.’, Error (111, ‘Conexión rechazada’)))

Tengo una pregunta: quiero probar “seleccionar” e “ingresar”. Puedo escribirlo como el código a continuación: código original:

12 class Sinaselecttest(unittest.TestCase): 13 14 def setUp(self): 15 binary = FirefoxBinary('/usr/local/firefox/firefox') 16 self.driver = webdriver.Firefox(firefox_binary=binary) 17 18 def test_select_in_sina(self): 19 driver = self.driver 20 driver.get("https://www.sina.com.cn/") 21 try: 22 WebDriverWait(driver,30).until( 23 ec.visibility_of_element_located((By.XPATH,"/html/body/div[9]/div/div[1]/form/div[3]/input")) 24 ) 25 finally: 26 driver.quit() # #测试select功能 27 select=Select(driver.find_element_by_xpath("//*[@id='slt_01']")).select_by_value("微博") 28 element=driver.find_element_by_xpath("/html/body/div[9]/div/div[1]/form/div[3]/input") 29 element.send_keys("杨幂") 30 driver.find_element_by_xpath("/html/body/div[9]/div/div[1]/form/input").click() 31 driver.implicitly_wait(5) 32 33 34 

Quiero probar la función de “selección” de Selenium. Por lo tanto, elijo el sitio web de Sina para seleccionar una opción e ingresar texto en textarea. Luego, búsquelo. Pero cuando ejecuto esta prueba, tiene un error:

  Traceback (most recent call last): File "test_sina_select.py", line 32, in tearDown self.driver.close() File "/usr/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 688, in close self.execute(Command.CLOSE) File "/usr/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 319, in execute response = self.command_executor.execute(driver_command, params) File "/usr/lib/python2.7/site-packages/selenium/webdriver/remote/remote_connection.py", line 376, in execute return self._request(command_info[0], url, body=data) File "/usr/lib/python2.7/site-packages/selenium/webdriver/remote/remote_connection.py", line 399, in _request resp = self._conn.request(method, url, body=body, headers=headers) File "/usr/lib/python2.7/site-packages/urllib3/request.py", line 68, in request **urlopen_kw) File "/usr/lib/python2.7/site-packages/urllib3/request.py", line 81, in request_encode_url return self.urlopen(method, url, **urlopen_kw) File "/usr/lib/python2.7/site-packages/urllib3/poolmanager.py", line 247, in urlopen response = conn.urlopen(method, u.request_uri, **kw) File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 617, in urlopen release_conn=release_conn, **response_kw) File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 617, in urlopen release_conn=release_conn, **response_kw) File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 617, in urlopen release_conn=release_conn, **response_kw) File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 597, in urlopen _stacktrace=sys.exc_info()[2]) File "/usr/lib/python2.7/site-packages/urllib3/util/retry.py", line 271, in increment raise MaxRetryError(_pool, url, error or ResponseError(cause)) MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=51379): Max retries exceeded with url: /session/2e64d2a1-3c7f-4221-96fe-9d0b1c102195/window (Caused by ProtocolError('Connection aborted.', error(111, 'Connection refused'))) ---------------------------------------------------------------------- Ran 1 test in 72.106s 

quien me puede decir por que gracias

Este mensaje de error …

 MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=51379): Max retries exceeded with url: /session/2e64d2a1-3c7f-4221-96fe-9d0b1c102195/window (Caused by ProtocolError('Connection aborted.', error(111, 'Connection refused'))) 

… implica que el método get() falló al boost MaxRetryError .

Un par de cosas:

  • En primer lugar, según la discusión , las excepciones que se superan con el máximo de rebashs superados confunden el rastreo y es un tanto engañoso. Las solicitudes envuelven la excepción para la conveniencia de los usuarios. La excepción original es parte del mensaje mostrado.
  • Las solicitudes nunca se reintentan (establece los retries=0 para el HTTPConnectionPool de HTTPConnectionPool ), por lo que el error hubiera sido mucho más canónico sin las palabras clave MaxRetryError y HTTPConnectionPool . Así que un Traceback ideal hubiera sido:

     ConnectionError(: [Errno 1111] Connection refused) 
  • Pero una vez más, @ sigmavirus24 en su comentario mencionó … envolver estas excepciones crea una gran API pero una mala experiencia de depuración …

  • Avanzar el plan era atravesar lo más hacia abajo posible hasta la excepción de nivel más bajo y usar eso en su lugar.
  • Finalmente, este problema se solucionó modificando algunas excepciones que no tienen nada que ver con el error de conexión real rechazado.

Solución

Según las Notas de la versión de Selenium 3.14.1 :

 * Fix ability to set timeout for urllib3 (#6286) 

La combinación es: ¡ reparar urllib3 no puede establecer el tiempo de espera!

Conclusión

Una vez que actualice a Selenium 3.14.1 , podrá establecer el tiempo de espera y ver Tracebacks canónicos, y podrá tomar las medidas necesarias.

Referencias

Un par de referencias relevantes:

  • Añadiendo max_retries como argumento
  • Se eliminó la farsa y urllib3 agrupados.
  • Bibliotecas de terceros comprometidas textualmente.

Solo tuve el mismo problema. La solución fue cambiar el propietario de la carpeta con un script de forma recursiva. En mi caso, la carpeta tenía root:root owner: group y necesitaba cambiarla a ubuntu:ubuntu .

Solución: sudo chown -R ubuntu:ubuntu /path-to-your-folder