Advertencia de desaprobación: executable_path ha quedado obsoleto Selenium Python

Resuelto YasserKhalil asked hace 3 años • 11 respuestas

Estoy usando sublime para codificar scripts de Python. El siguiente código es para que Selenium en Python instale el controlador automáticamente utilizando el paquete webdriver_manager.

# pip install webdriver-manager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.maximize_window()

#s=Service(path)
#driver=webdriver.Chrome(service=s)
driver.get('https://www.google.com')
driver.find_element(By.NAME, 'q').send_keys('Yasser Khalil')

El código funciona bien pero recibí una advertencia como esa.

Demo.py:7: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
  driver = webdriver.Chrome(ChromeDriverManager().install())

¿Cómo solucionar tal error?

YasserKhalil avatar Nov 06 '20 22:11 YasserKhalil
Aceptado

Este mensaje de error...

DeprecationWarning: executable_path has been deprecated, please pass in a Service object

...implica que la clave executable_path quedará obsoleta en las próximas versiones.

Este cambio está en línea con el registro de cambios de Selenium 4.0 Beta 1 que menciona:

Desaprobar todos los argumentos excepto Optionsy Serviceen la creación de instancias del controlador. (#9125,#9128)


Solución

Conselenio4Como la clave executable_path está en desuso, debe usar una instancia de la Service()clase junto con ChromeDriverManager().install()el comando como se explica a continuación.

Requisitos previos

Asegurarse de que:

  • Selenium se actualiza a v4.0.0

    pip3 install -U selenium
    
  • Webdriver Manager para Python está instalado

    pip3 install webdriver-manager
    

Puede encontrar una discusión detallada sobre la instalación de Webdriver Manager para Python en ModuleNotFoundError: Ningún módulo llamado 'webdriver_manager' error incluso después de instalar webdrivermanager

Bloque de código compatible con Selenium v4

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://www.google.com")

Salida de consola:

[WDM] - ====== WebDriver manager ======
[WDM] - Current google-chrome version is 96.0.4664
[WDM] - Get LATEST driver version for 96.0.4664
[WDM] - Driver [C:\Users\Admin\.wdm\drivers\chromedriver\win32\96.0.4664.45\chromedriver.exe] found in cache

Puede encontrar una discusión detallada sobre la instalación de Webdriver Manager para Python en el problema de Selenium ChromeDriver usando Webdriver Manager para Python


En caso de que quieras pasar el Options()objeto puedes usar:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

options = Options()
options.add_argument("start-maximized")
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver.get("https://www.google.com")

TL; DR

Puede encontrar el informe de error/solicitud de extracción correspondiente en:

  • Informe de error: desaprobar todos los argumentos excepto Opciones y Servicio en la creación de instancias del controlador
  • Solicitud de extracción: desaprobar todos los argumentos excepto Opciones y Servicio en la creación de instancias del controlador
undetected Selenium avatar Nov 24 '2021 15:11 undetected Selenium

esto funciona para mi

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
service = Service(r"C:\chromedriver.exe")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)

Ampliando la respuesta aceptada, la clase Servicio permite especificar explícitamente un ejecutable de ChromeDriver de la misma manera que antes usando el parámetro executable_path. De esta manera, el código existente se migra fácilmente (claramente debe reemplazar C:\chromedriver.exelo anterior por su ruta).

Selva Arun Chelladevan avatar Nov 09 '2021 03:11 Selva Arun Chelladevan

Podría resolverlo

# pip install webdriver-manager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By

s=Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=s)
driver.maximize_window()
driver.get('https://www.google.com')
driver.find_element(By.NAME, 'q').send_keys('Yasser Khalil')
YasserKhalil avatar Nov 06 '2020 17:11 YasserKhalil

ACTUALIZACIÓN noviembre de 2023

Para Chrome versión 119.0.6045.124 (compilación oficial) (64 bits) o posterior, no hay ningún WebDriver como antes. Así que simplemente agrega estos códigos:

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")

Descubrí que este problema de desaprobación aparece en las actualizaciones de Selenium, Pip y Python. Así que simplemente cambia:

antes:

from selenium import webdriver
chrome_driver_path = 'C:/Users/Morteza/Documents/Dev/chromedriver.exe'
driver = webdriver.Chrome(executable_path=chrome_driver_path)

url = "https://www.google.com"
driver.get(url)

después:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

s=Service('C:/Users/Morteza/Documents/Dev/chromedriver.exe')
browser = webdriver.Chrome(service=s)
url='https://www.google.com'
browser.get(url)
Mori avatar Nov 08 '2021 15:11 Mori