para instalar how descargar como python selenium firefox jenkins geckodriver

python - instalar - ¿Cómo arreglar "WebDriverException: Mensaje: conexión rechazada"?



how to install selenium in python (3)

¿Qué conexión se rechaza aquí? ¿Cuál es el significado del mensaje de error?

La conexión entre la API del controlador web Python y su navegador web Firefox. Bueno, no la conexión en sí, sino que una sola solicitud que envió el controlador web fue "rechazada" por el navegador. Tenga en cuenta que esto funciona a través del protocolo JSON Wire : JSON sobre HTTP.

¿Cómo puedo solucionar este error?

Por lo general, en caso de error como este, la razón más común es un problema de compatibilidad . En otras palabras, sospecho que su geckodriver versión 0.18.0 es demasiado antigua para Firefox 57 . Actualice geckodriver a la última versión estable (actualmente GeckoDriver ).

Estoy usando una configuración muy compleja para probar varias páginas web no públicas. Utilizo jenkins para ejecutar las pruebas de python-selenium dentro de una imagen docker . De esa manera, soy completamente independiente del entorno jenkins y puedo crear mi propio entorno. En este entorno tengo instalado el siguiente software:

  • Firefox: 57.0.1
  • Geckodriver: 0.18.0
  • pruebas de nariz: 1.3.7
  • selenio: 3.8.0

Las pruebas de selenio crean el WebDriver la siguiente manera:

profile = webdriver.FirefoxProfile() profile.set_preference("browser.download.dir", self.downloadpath) profile.set_preference("browser.download.folderList", 2) profile.set_preference("browser.download.useDownloadDir", True) profile.set_preference("browser.download.manager.showWhenStarting", False) profile.set_preference("pdfjs.disabled", True) profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/force-download, image/png, text/html, text/plain, " "image/tiff, text/csv, application/zip, application/octet-stream") profile.set_preference("browser.download.manager.alertOnEXEOpen", False) profile.set_preference("browser.download.manager.focusWhenStarting", False) profile.set_preference("browser.helperApps.alwaysAsk.force", False) profile.set_preference("browser.download.manager.alertOnEXEOpen", False) profile.set_preference("browser.download.manager.closeWhenDone", True) profile.set_preference("browser.download.manager.showAlertOnComplete", False) profile.set_preference("browser.download.manager.useWindow", False) profile.set_preference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", False) self.driver = webdriver.Firefox(profile, log_path = logfile)

donde logfile y self.downloadpath son dos rutas válidas en la configuración de la self.downloadpath acoplable.

Todo el conjunto de pruebas consta de 6 casos de prueba independientes, cada uno con la misma configuración que la anterior. Normalmente funcionan bien y se completan sin problemas.

Pero sin ningún cambio en las pruebas o la configuración general, una prueba a veces falla con el siguiente mensaje de error:

File "/root/tests/bsp_usecase_tests/tools/basicsuite.py", line 210, in set_driver_firefox self.driver = webdriver.Firefox(profile, log_path = logfile) File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py", line 158, in __init__ keep_alive=True) File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 154, in __init__ self.start_session(desired_capabilities, browser_profile) File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 243, in start_session response = self.execute(Command.NEW_SESSION, parameters) File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 311, in execute self.error_handler.check_response(response) File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 237, in check_response raise exception_class(message, screen, stacktrace) WebDriverException: Message: connection refused

Tengo dos preguntas:

  1. ¿Qué conexión se rechaza aquí? ¿Cuál es el significado del mensaje de error?
  2. ¿Cómo puedo solucionar este error?

Anexo :

  • Cuando usé time.sleep(10) justo antes de la línea webdriver.Firefox , el error ya no apareció. ¿Debería poner esa línea en un bucle while-try-except?

El error que estás viendo es:

WebDriverException: Message: connection refused

Según la documentación, WebDriverException es la excepción Webdriver base que es la siguiente:

exception selenium.common.exceptions.WebDriverException(msg=None, screen=None, stacktrace=None)

Entonces, la connection is refused here significa que Selenium no puede establecer la conexión que desea establecer a través de:

self.driver = webdriver.Firefox(profile, log_path = logfile)

Una posible solución sería proporcionar el nombre completo del logfile de logfile junto con la logical location del logfile de logfile (desde el Project Level ) de la siguiente manera:

self.driver = webdriver.Firefox(firefox_profile=profile, log_path=''./Log/geckodriver.log'')

Aquí puedes encontrar una Discussion similar

Nuevamente, como mencionó When I used a time.sleep(10) just before the webdriver.Firefox line, the error did not show up anymore , por lo que supongo que hubo una instancia de GeckoDriver y el cliente Firefox Browser activo anteriormente. Por lo tanto, de manera similar a como lo mencionó @Florent B., debe proteger su script de enfrentar la Condición Race Around que puede derivarse de cualquiera de los siguientes:

  • Accediendo al mismo archivo de registro por la nueva sesión que la sesión anterior aún no ha lanzado.
  • Accediendo al mismo número de puerto por GeckoDriver o Marionette por la nueva sesión que la sesión anterior aún no ha lanzado.
  • Falta de acceso a la CPU
  • Falta de memoria física
  • Falta de memoria de intercambio
  • Falta de caché de disco
  • Falta de ancho de banda de red
  • Docker Image quedó sin memoria

Aquí puede encontrar una Discussion similar.

Según las causas mencionadas anteriormente, debe seguir algunos pasos de la siguiente manera:

  • Utilice siempre la última versión lanzada del cliente Selenium-Python , la WebDriver variant ( GeckoDriver ) y Web Browser ( Firefox Browser )
  • Utilice siempre quit () en el método tearDown() para que tanto el webdriver webclient como el webclient se destruyan correctamente.
  • Clean el Project Workspace de su IDE antes y después de ejecutar su Test Suite .
  • Clear la memoria caché del navegador antes y después de la ejecución de sus Tests
  • Use la herramienta CCleaner regularmente para borrar las tareas del sistema operativo, incluidos los rust_mozprofile directories obsoletos rust_mozprofile directories .

Una solución rápida para probar para cualquier otra persona que esté luchando con este u otros errores similares: descubrí que al eliminar mi archivo geckodriver.log este error.

Esto está implícito en la parte "Limpiar el espacio de trabajo del proyecto" de la respuesta de DebanjanB, pero solo quería compartir la acción concreta que lo arregló para mí. Tenga en cuenta que no estaba usando un conjunto de pruebas como el póster original.

Me imagino que lo que me sucedió fue que tenía un webdriver.Firefox anterior webdriver.Firefox Instancias de webdriver.Firefox que nunca llegaron a driver.close() en mi código debido a un error en otra parte de mi código, que todavía estaba depurando, y no habían lanzado archivo de registro geckodriver.log .

Por lo tanto, me imagino que este problema también podría resolverse cambiando el nombre del archivo de registro o escribiendo en un archivo de registro diferente.