Soy nuevo en programación y comencé hace Python
unos 2 meses y estoy revisando Automate the Boring Stuff de Sweigart con texto de Python . Estoy usando IDLE y ya instalé el módulo de selenio y el navegador Firefox. Cada vez que intento ejecutar la función webdriver, obtengo esto:
from selenium import webdriver
browser = webdriver.Firefox()
Excepción: -
Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x00000249C0DA1080>>
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 163, in __del__
self.stop()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 135, in stop
if self.process is None:
AttributeError: 'Service' object has no attribute 'process'
Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x00000249C0E08128>>
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 163, in __del__
self.stop()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 135, in stop
if self.process is None:
AttributeError: 'Service' object has no attribute 'process'
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 64, in start
stdout=self.log_file, stderr=self.log_file)
File "C:\Python\Python35\lib\subprocess.py", line 947, in __init__
restore_signals, start_new_session)
File "C:\Python\Python35\lib\subprocess.py", line 1224, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
browser = webdriver.Firefox()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 135, in __init__
self.service.start()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 71, in start
os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
Creo que necesito establecer el camino geckodriver
pero no estoy seguro de cómo, entonces ¿alguien puede decirme cómo haría esto?
brew install geckodriver
chromedriver
para esto.Respuestas:
En primer lugar, tendrá que descargar el último geckodriver ejecutable desde aquí para ejecutar el último Firefox con selenio
En realidad, los enlaces del cliente Selenium intentan localizar el
geckodriver
ejecutable del sistemaPATH
. Deberá agregar el directorio que contiene el ejecutable a la ruta del sistema.En los sistemas Unix, puede hacer lo siguiente para agregarlo a la ruta de búsqueda de su sistema, si está utilizando un shell compatible con bash:
En Windows, deberá actualizar la variable del sistema Path para agregar la ruta completa del directorio al geckodriver ejecutable manualmente o la línea de comandos (no olvide reiniciar su sistema después de agregar geckodriver ejecutable en la RUTA del sistema para que surta efecto) . El principio es el mismo que en Unix.
Ahora puede ejecutar su código de la misma manera que lo hace a continuación: -
La excepción indica claramente que ha instalado Firefox en otra ubicación mientras Selenium está tratando de encontrar Firefox y ejecutarlo desde la ubicación predeterminada, pero no pudo encontrarlo. Debe proporcionar explícitamente la ubicación binaria instalada de Firefox para iniciar Firefox de la siguiente manera: -
fuente
geckodriver.exe
en elC:\Python\Python35\selenium
directorio y configuré la ruta como usted describió, pero me da el siguiente error:PATH
in unix. Puede configurarlo en código ya que no lo necesita en todo el sistema:os.environ["PATH"] += os.pathsep + 'path/to/dir/containing/geckodriver/'
O simplemente mantenga el binario geckodriver en el directorio que ya está en su ruta:mv geckodriver /usr/local/bin
Esto lo resolvió para mí.
fuente
export PATH=$PATH:geckodriver
(se extrae en el Escritorio). Pero tampoco ayudó. Todavía recibo OSError [errno 8]estos pasos RESUELTOS para mí en ubuntu firefox 50.
Descargar geckodriver
Copie geckodriver en / usr / local / bin
NO necesita agregar
fuente
La respuesta de @saurabh resuelve el problema, pero no explica por qué Automate the Boring Stuff with Python no incluye esos pasos.
Esto se debe a que el libro se basa en selenio 2.xy el controlador Firefox para esa serie no necesita el controlador gecko. La interfaz Gecko para manejar el navegador no estaba disponible cuando se estaba desarrollando selenio.
La última versión de la serie selenium 2.x es 2.53.6 (ver, por ejemplo, estas respuestas , para una vista más fácil de las versiones).
La página de la versión 2.53.6 no menciona gecko en absoluto. Pero desde la versión 3.0.2, la documentación indica explícitamente que necesita instalar el controlador gecko.
Si después de una actualización (o instalación en un nuevo sistema), su software que funcionó bien antes (o en su sistema anterior) ya no funciona y tiene prisa, fije la versión de selenio en su virtualenv haciendo
pero, por supuesto, la solución a largo plazo para el desarrollo es configurar un nuevo virtualenv con la última versión de selenium, instalar el controlador gecko y probar si todo sigue funcionando como se esperaba. Pero el aumento de la versión principal podría introducir otros cambios de API que no están cubiertos en su libro, por lo que es posible que desee seguir con el selenio anterior, hasta que tenga la confianza suficiente de que puede solucionar cualquier discrepancia entre el API de selenium2 y selenium3 usted mismo.
fuente
En macOS con Homebrew ya instalado, simplemente puede ejecutar el comando Terminal
Debido a que homebrew ya extendió,
PATH
no hay necesidad de modificar ningún script de inicio.fuente
Para configurar geckodriver para Selenium Python:
Necesita establecer la ruta geckodriver con FirefoxDriver como se muestra a continuación:
Descargue geckodriver para su sistema operativo adecuado (desde https://github.com/mozilla/geckodriver/releases ) -> Extraiga en una carpeta de su elección -> Establezca la ruta correctamente como se mencionó anteriormente
Estoy usando Python 3.6.2 y Selenium WebDriver 3.4.3 en Windows 10.
Otra forma de configurar geckodriver:
i) Simplemente pegue el geckodriver.exe en / Python / Scripts / (En mi caso, la carpeta era: C: \ Python36 \ Scripts)
ii) Ahora escriba el código simple de la siguiente manera:
fuente
Si está utilizando Anaconda , todo lo que tiene que hacer es activar su entorno virtual y luego instalar geckodriver con el siguiente comando :
fuente
Ubuntu 18.04+ y la última versión de geckodriver
Esto también debería funcionar para otras variedades * nix.
Para la actualización de mac a:
fuente
Veo que las discusiones aún hablan sobre la antigua forma de configurar geckodriver descargando el binario y configurando la ruta manualmente.
Esto se puede hacer automáticamente usando webdriver-manager
Ahora el código anterior en la pregunta funcionará simplemente con el cambio a continuación,
fuente
¡La forma más fácil para windows!
Descargue la última versión de
geckodriver
desde aquí . Agregue el archivo geckodriver.exe al directorio de Python (o cualquier otro directorio que ya esté enPATH
). Esto debería resolver el problema (Probado en Windows 10)fuente
Pasos para MAC:
La solución simple es descargar GeckoDriver y agregarlo a su RUTA del sistema. Puede usar cualquiera de los dos enfoques:
Método corto
1) Descargar y descomprimir Geckodriver .
2) Mencione la ruta al iniciar el controlador:
Método largo
1) Descargar y descomprimir Geckodriver .
2) abierto
.bash_profile
. Si aún no lo ha creado, puede hacerlo con el comando:touch ~/.bash_profile
. Luego ábralo usando:open ~/.bash_profile
3) Teniendo en cuenta que el archivo GeckoDriver está presente en su carpeta de Descargas, puede agregar las siguientes líneas al
.bash_profile
archivo:Con esto, está agregando la ruta a GeckoDriver a su RUTA del sistema. Esto le dice al sistema dónde se encuentra GeckoDriver al ejecutar sus scripts Selenium.
4) Guardar
.bash_profile
y forzarlo a ejecutar. Esto carga los valores inmediatamente sin tener que reiniciar. Para hacer esto, puede ejecutar el siguiente comando:source ~/.bash_profile
5) Eso es todo. ¡Estás listo!. Puede ejecutar el script Python ahora.
fuente
geckodriver
con Homebrew:brew install geckodriver
y luego iniciar Firefox a través de:driver = webdriver.Firefox(executable_path="/usr/local/bin/geckodriver")
Algunos aportes / aclaraciones adicionales para futuros lectores de este hilo:
Lo siguiente es suficiente como resolución para Windows 7, Python 3.6, selenium 3.11:
La nota de @ dsalaj en este hilo anterior para Unix también se aplica a Windows; jugando con el camino de env. variable a nivel de Windows y se puede evitar el reinicio del sistema de Windows.
(1) Descargue geckodriver (como se describió anteriormente en este hilo) y coloque el geckdriver.exe (descomprimido) en X: \ Folder \ of \ your \ choice
(2) Ejemplo de código de Python:
Notas: (1) Puede tomar alrededor de 10 segundos para que el código anterior abra el navegador Firefox para la URL especificada.
(2) La consola de Python mostrará el siguiente error si no hay ningún servidor que ya se esté ejecutando en la url especificada o sirva una página con el título que contiene la cadena 'Django': selenium.common.exceptions.WebDriverException: Mensaje: Página de error alcanzada: acerca de : neterror? e = connectionFailure & u = http% 3A // localhost% 3A8000 / & c = UTF-8 & f = regular & d = Firefox% 20can% E2% 80% 9
fuente
De hecho, he descubierto que puedes usar el último controlador geck sin ponerlo en la ruta del sistema. Actualmente estoy usando
https://github.com/mozilla/geckodriver/releases/download/v0.12.0/geckodriver-v0.12.0-win64.zip
Firefox 50.1.0
Python 3.5.2
Selenio 3.0.2
Windows 10
Estoy ejecutando un VirtualEnv (que administro usando PyCharm, supongo que usa Pip para instalar todo)
En el siguiente código, puedo usar una ruta específica para el geckodriver usando el parámetro ejecutable_path (descubrí esto al echar un vistazo en Lib \ site-packages \ selenium \ webdriver \ firefox \ webdriver.py). Tenga en cuenta que tengo la sospecha de que el orden de los argumentos de los parámetros cuando se llama al controlador web es importante, por lo que el ejecutable_path es el último en mi código (segunda última línea en el extremo derecho)
También puede notar que uso un perfil de Firefox personalizado para solucionar el problema sec_error_unknown_issuer con el que se encontrará si el sitio que está probando tiene un certificado no confiable. ver ¿Cómo deshabilitar la advertencia de conexión no confiable de Firefox usando Selenium?
Después de la investigación, se descubrió que el controlador de Marionette está incompleto y todavía en progreso, y que ninguna cantidad de configuración de varias capacidades u opciones de perfil para despedir o configurar certificados iba a funcionar. Por lo tanto, era más fácil usar un perfil personalizado.
De todos modos, aquí está el código sobre cómo conseguí que el geckodriver funcionara sin estar en el camino:
fuente
Estoy usando Windows 10 y esto funcionó para mí:
fuente
Considere instalar un Firefox en contenedores:
Conéctese usando
webdriver.Remote
:fuente
Es realmente triste que ninguno de los libros publicados en Selenium / Python y la mayoría de los comentarios sobre este tema a través de Google no expliquen claramente la lógica de ruta para configurar esto en Mac (¡todo es Windows!). Todos los youtubes se recogen en el "después" que tiene la configuración de ruta (en mi opinión, ¡la salida barata!). Entonces, para sus maravillosos usuarios de Mac, use lo siguiente para editar sus archivos de ruta bash:
> $ touch ~ / .bash_profile; abrir ~ / .bash_profile
Luego agregue una ruta similar a esta ... * # Configuración de RUTA para geckodriver RUTA = "/ usr / bin / geckodriver: $ {PATH}" export PATH
Establecer RUTA para Selenium firefox
RUTA = "~ / Users / yourNamePATH / VEnvPythonInterpreter / lib / python2.7 / site-packages / selenium / webdriver / firefox /: $ {PATH}" RUTA de exportación
Establecer RUTA para el ejecutable en el controlador de Firefox
PATH = "/ Users / yournamePATH / VEnvPythonInterpreter / lib / python2.7 / site-packages / selenium / webdriver / common / service.py: $ {PATH}" export PATH *
Esto funcionó para mí. Mi preocupación es cuándo la comunidad de Selenium Windows comenzará a jugar el juego real y nos incluirá a los usuarios de Mac en su arrogante membresía del club.
fuente
Selenium responde a esta pregunta en su DESCRIPTION.rst
Básicamente, simplemente descargue el controlador geckodriver, descomprímalo y mueva el ejecutable a su carpeta / usr / bin
fuente
usa el código original como es:
luego descargue el controlador de: mozilla / geckodriver
Colóquelo en una ruta fija (permanentemente) ... como ejemplo, lo puse en:
Luego vaya a las variables de entorno del sistema, en la cuadrícula de "Variables del sistema" busque la variable Ruta y agregue:
geckodriver, no geckodriver.exe .
fuente
En Raspberry Pi tuve que crear desde el controlador ARM y configurar el geckodriver y la ruta de registro en:
sudo nano /usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py
fuente
Si usa un entorno virtual y win10 (tal vez sea para otros sistemas), solo necesita poner geckodriver.exe en la siguiente carpeta en su directorio de entorno virtual:
... \ my_virtual_env_directory \ Scripts \ geckodriver.exe
fuente
esto le dará la ruta a su gekodriver.exe en Windows
fuente
Mac 10.12.1 python 2.7.10 esto funciona para mí :)
fuente
Estoy usando Windows 10 y Anaconda2. Intenté configurar la variable de ruta del sistema pero no funcionó. Luego simplemente agregué el archivo geckodriver.exe a la carpeta Anaconda2 / Scripts y todo funciona muy bien ahora. Para mí el camino era: -
C: \ Usuarios \ Bhavya \ Anaconda2 \ Scripts
fuente
Si desea agregar las rutas del controlador en Windows 10:
Haga clic derecho en el icono "Esta PC" y seleccione "Propiedades"
Haga clic en "Configuración avanzada del sistema"
fuente
Visite Gecko Driver obtenga la url para el controlador gecko en la sección Descargas.
Clone este repositorio https://github.com/jackton1/script_install.git
cd script_install
correr
fuente
fuente
para mí fue suficiente instalar geckodriver en el mismo entorno:
y el código no fue cambiado:
fuente
Para agregar mis 5 centavos, también es posible hacer
echo PATH
(Linux) y simplemente mover geckodriver a la carpeta de su agrado. Si el destino es una carpeta del sistema (no entorno virtual), el controlador se vuelve accesible globalmente.fuente