nodejs docs python firefox selenium build

python - docs - Firefox Build no funciona con Selenium



selenium webdriver firefox (5)

para mi investigación, hice algunas modificaciones al código fuente en Firefox y lo construí yo mismo. Para automatizar las pruebas, opté por usar Selenium, pero desafortunadamente, mi Firefox recién creado parece no ser compatible con Selenium.

Hice lo siguiente:

from selenium import webdriver from selenium.webdriver.firefox.firefox_binary import FirefoxBinary binary = FirefoxBinary("/path/to/firefox/binary") d = webdriver.Firefox(firefox_binary=binary) d.get("http://www.google.de")

Firefox se abre y responde (puedo ingresar a un sitio web en la barra de búsqueda). Pero después de un tiempo, la secuencia de comandos python se bloquea con el siguiente mensaje de error:

Traceback (most recent call last): File "firefox.py", line 7, in <module> d = webdriver.Firefox(firefox_binary=binary) File "/usr/local/lib/python3.4/dist-packages/selenium/webdriver/firefox/webdriver.py", line 59, in __init__ self.binary, timeout), File "/usr/local/lib/python3.4/dist-packages/selenium/webdriver/firefox/extension_connection.py", line 47, in __init__ self.binary.launch_browser(self.profile) File "/usr/local/lib/python3.4/dist-packages/selenium/webdriver/firefox/firefox_binary.py", line 66, in launch_browser self._wait_until_connectable() File "/usr/local/lib/python3.4/dist-packages/selenium/webdriver/firefox/firefox_binary.py", line 109, in _wait_until_connectable raise WebDriverException("Can''t load the profile. Profile " selenium.common.exceptions.WebDriverException: Message: Can''t load the profile. Profile Dir: %s If you specified a log_file in the FirefoxBinary constructor, check it for details.

Hice google ese mensaje de error y sugerí la mayoría de las soluciones, que debería actualizar Selenium ya que no es compatible con la versión de Firefox utilizada. Lamentablemente, instalé la versión más reciente de selenio (2.44.0) e incluso utilicé una versión anterior de firefox (versión 33) para descartar ese punto.

También me aseguré de que las modificaciones de mi código no fueran la razón para que esto fallara al compilar un Firefox limpio y sin modificaciones. El selenio tampoco funciona con este Firefox.

Si no especifico un binario de Firefox y dejo que Selenium use el Firefox instalado, todo funciona bien. Así que mi conjetura es que algo está mal con la compilación de Firefox, que hice exactamente como se menciona en la documentación en línea (por ejemplo, ./mach build).

¿Alguien tiene una idea, cuál podría ser mi error? ¡Cualquier ayuda es muy apreciada!

Alguna información de configuración:

  • Firefox 33
  • Selenio 2.44.0
  • Python 3.4 (también intenté 2.7, tampoco funciona)
  • Construcción de Firefox con Ubuntu 14.04

Para El-Capitan, los seguidores arreglaron:

brew install python

entonces

sudo pip install --upgrade selenium


Pasé mucho tiempo depurando esto y, finalmente, renuncié a intentar hacer versiones incompatibles de selenio / firefox. Simplemente no tengo la experiencia en Firefox para ir más allá. Mi recomendación es descargar versiones estables de https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/ y seguir probando combinaciones de Firefox / Selenium que funcionen para su entorno. Para mí, esto es:

firefox == 32.0.3 selenio == 2.43.0

Me refiero al registro de cambios aquí: http://selenium.googlecode.com/git/java/CHANGELOG para ver qué versiones son supuestamente compatibles.

Básicamente, lo que está sucediendo es que webdriver está sondeando en su puerto hasta que pueda establecer una conexión de socket.

def _wait_until_connectable(self): """Blocks until the extension is connectable in the firefox.""" count = 0 while not utils.is_connectable(self.profile.port): if self.process.poll() is not None: # Browser has exited raise WebDriverException("The browser appears to have exited " "before we could connect. If you specified a log_file in " "the FirefoxBinary constructor, check it for details.") if count == 30: self.kill() raise WebDriverException("Can''t load the profile. Profile " "Dir: %s If you specified a log_file in the " "FirefoxBinary constructor, check it for details.") count += 1 time.sleep(1) return True

Y luego, si hay un error de socket, sigue. Entonces, lo que probablemente esté viendo (al menos lo que yo soy) es que el navegador cuelgue durante 30 segundos.

def is_connectable(port): """ Tries to connect to the server at port to see if it is running. :Args: - port: The port to connect. """ try: socket_ = socket.socket(socket.AF_INET, socket.SOCK_STREAM) socket_.settimeout(1) socket_.connect(("127.0.0.1", port)) socket_.close() return True except socket.error: return False

Bleh. Bien, finalmente finalmente decidí guardar la versión específica que quiero y cambiar a la versión de selenio compatible.

bin_dir = os.path.join(const.WEBDRIVER_DIR, ''firefox'', ''binary'', ''32.0.3'', ''linux-x86_64'', ''firefox'') binary = FirefoxBinary(firefox_path=bin_dir) driver = webdriver.Firefox(firefox_binary=binary)

También recomiendo agregar un archivo de registro al binario de Firefox y verificar eso. Su problema puede ser único y cualquier error extraño se registrará allí:

log_dir = os.path.join(const.LOGS_DIR, ''firefox'') try: os.makedirs(directory) except OSError, e: if e.errno == errno.EEXIST and os.path.isdir(directory): pass log_path = os.path.join(log_dir, ''{}.log''.format(datetime.datetime.now().isoformat(''_'')) log_file = open(log_path, ''w'') binary = FirefoxBinary(firefox_path=bin_dir, log_file=log_file)


Pasé una hora en este mismo tema. Para Python3 recuerda pip3 , de lo contrario solo actualizará el selenio en Python2, y te quedarás preguntándote por qué todavía no funciona.

sudo pip3 install -U selenium


Sufrí el mismo problema con FF 36.0.

Te recomiendo que actualices el paquete de selenio a la última versión con cmd ''pip install -U selenium''.


Ubuntu 14.04, firefox 36.0, selenio 2.44.0. El mismo problema, fue resuelto por:

sudo pip install -U selenium

Selenium 2.45.0 está bien con FF36.

actualización: Selenium 2.53+ es compatible con FF45

Puedes obtener versiones anteriores de FF here