No se puede utilizar Selenium Webdriver. Obteniendo dos excepciones

Resuelto startrek-07 asked hace 1 año • 4 respuestas

Recibo el siguiente error al intentar crear un objeto con Selenium Webdriver.

"\selenium\webdriver\common\driver_finder.py", line 42, in get_path
    path = SeleniumManager().driver_location(options) if path is None else path

"\selenium\webdriver\common\selenium_manager.py", line 74, in driver_location
    browser = options.capabilities["browserName"]

AttributeError: 'str' object has no attribute 'capabilities'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
"\selenium_webdriver_webscraping.py", line 4, in <module>
    driver = webdriver.Chrome(chrome_driver_path)
"\selenium\webdriver\chrome\webdriver.py", line 47, in __init__
    self.service.path = DriverFinder.get_path(self.service, self.options)
"\selenium\webdriver\common\driver_finder.py", line 44, in get_path
    raise NoSuchDriverException(f"Unable to obtain {service.path} using Selenium Manager; {err}")
selenium.common.exceptions.NoSuchDriverException: Message: Unable to obtain chromedriver using Selenium Manager; 'str' object has no attribute 'capabilities'; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors/driver_location

Este es el código que utilicé:

from selenium import webdriver

chrome_driver_path = <chrome drive .exe path>
driver = webdriver.Chrome(chrome_driver_path)
startrek-07 avatar Jun 13 '23 10:06 startrek-07
Aceptado

Si la versión de Selenium que está utilizando es v4.6.0 o superior (que creo que es como veo SeleniumMangeren el seguimiento del error), entonces realmente no es necesario establecer la driver.exeruta. Selenium puede manejar el navegador y los controladores por sí solo.

Entonces su código se puede simplificar de la siguiente manera:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.google.com/")
driver.quit()

Algunas referencias:

  • Propósito del administrador de webdriver
  • Presentamos el Administrador de Selenio
Shawn avatar Jun 13 '2023 08:06 Shawn

Esto se debe a cambios en Selenium 4.10.0: https://github.com/SeleniumHQ/selenium/commit/9f5801c82fb3be3d5850707c46c3f8176e3ccd8e

Cambios_en_selenio_4_10_0

Tenga en cuenta que el primer argumento ya no es executable_pathy se desired_capabilitieseliminó, pero ahora hay otra forma de pasarlo. Consulte Actualizar a Selenium 4 para obtener documentación sobre cómo pasar las capacidades deseadas cuando se usa Selenium 4.10.0 (o más reciente). ).

Además, si desea configurar un executable_path, puede pasarlo a través de service, pero ya no es necesario, ya que se incluye el administrador de selenio.

Aquí tienes un fragmento de código con todo lo que necesitas:

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

service = Service()
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# ...
driver.quit()
Michael Mintz avatar Jun 13 '2023 15:06 Michael Mintz