Advertencia de desaprobación: executable_path ha quedado obsoleto Selenium Python
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?
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
Options
yService
en 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
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.exe
lo anterior por su ruta).
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')
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)