python google-chrome selenium selenium-webdriver selenium-chromedriver

WebDriverException: Service U:/Scraping/chromedriver.exe se cerró inesperadamente. El código de estado era: 1 mientras trabajaba con Chrome y Python



google-chrome selenium (2)

He estado tratando de hacer que el controlador web funcione con Python en Chrome en el trabajo, pero no puedo por mi vida averiguar qué es lo que está mal, a pesar de la resolución de problemas durante la mayor parte del día.

He descomprimido chromedriver a la carpeta en la que estoy trabajando. He intentado usar el argumento executable_path con chromedriver. He intentado actualizar las opciones dentro de chromedriver para dirigir al archivo Chrome.exe.

El código está abajo. Muy claro. ''url'' tiene una dirección anterior en el código que no estoy incluyendo aquí, el script ni siquiera llega tan lejos.

from selenium import webdriver driver = webdriver.Chrome(executable_path = ''U:/Scraping/chromedriver.exe'') driver.get(url)

Y el error:

Traceback (most recent call last): File "<ipython-input-67-db2ce2aa7cdf>", line 1, in <module> runfile(''U:/Scraping/Project.py'', wdir=''U:/Scraping'') File "C:/ProgramData/Anaconda3/lib/site-packages/spyder/utils/site/sitecustomize.py", line 705, in runfile execfile(filename, namespace) File "C:/ProgramData/Anaconda3/lib/site-packages/spyder/utils/site/sitecustomize.py", line 102, in execfile exec(compile(f.read(), filename, ''exec''), namespace) File "U:/Scraping/Project.py", line 14, in <module> driver = webdriver.Chrome(executable_path = ''U:/Scraping/chromedriver.exe'') File "C:/ProgramData/Anaconda3/lib/site-packages/selenium/webdriver/chrome/webdriver.py", line 68, in __init__ self.service.start() File "C:/ProgramData/Anaconda3/lib/site-packages/selenium/webdriver/common/service.py", line 98, in start self.assert_process_still_running() File "C:/ProgramData/Anaconda3/lib/site-packages/selenium/webdriver/common/service.py", line 111, in assert_process_still_running % (self.path, return_code) WebDriverException: Service U:/Scraping/chromedriver.exe unexpectedly exited. Status code was: 1


Al pasar la ruta absoluta del binario ChromeDriver a través del argumento executable_path , debe mencionar la ruta entre comillas simples (es decir, '''' ) separadas por una sola barra diagonal (es decir, / ) junto con el interruptor en bruto (es decir, r ) de la siguiente manera:

from selenium import webdriver driver = webdriver.Chrome(executable_path=r''U:/Scraping/chromedriver.exe'') driver.get(url)

Consideración adicional

  • Asegúrese de haber descargado el formato exacto del archivo binario de ChromeDriver desde la ubicación de descarga correspondiente a su sistema operativo subyacente entre:

    • chromedriver_win32.zip : para el sistema operativo Windows
  • Asegúrese de que el binario de ChromeDriver tenga permiso ejecutable para el usuario no administrador .

  • Ejecute su prueba como un usuario no administrador .
  • Otra posible causa del error puede deberse a que falta la entrada 127.0.0.1 localhost en /etc/hosts

Solución

  • Sistema operativo Windows : agregue 127.0.0.1 localhost a /etc/hosts

  • Mac OSX - Asegura las siguientes entradas:

    127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost fe80::1%lo0 localhost

Referencias

Según la discusión en selenium.common.exceptions.WebDriverException: Mensaje: No se puede conectar al Servicio geckodriver :

  • Selenium no requiere que 127.0.0.1 localhost se establezca explícitamente en el archivo host.
  • Sin embargo, es un requisito obligatorio para asignar localhost al bucle local IPv4 (127.0.0.1)
  • El mecanismo de esta asignación no tiene que ser siempre a través del archivo de hosts.
  • En los sistemas operativos Windows , no se asigna en absoluto en el archivo hosts (la resolución del localhost se realiza mediante el sistema de resolución de DNS).

TL; DR

Cómo restablecer el archivo Hosts a la predeterminada


El mismo error aquí. Mi problema era que tenía chromedriver.exe en una compañía de uso compartido. Algunas configuraciones de seguridad o cortafuegos probablemente impidieron que Python accediera al archivo ejecutable en esa ubicación remota.

Hice chromedriver.exe local y funcionó.