Python 2.7: las pruebas sin cabeza de selenio con Xvfb no funcionan
Tenga en cuenta que ya he visto las siguientes fuentes:
¿Cómo ejecuto Selenium en Xvfb?
Lo cual no resolvió mi problema.
Estoy usando:
Python 2.7selenio 3.0.2xvfbwrapper 0.2.9PyVirtualDisplay 0.2.1Ejecutando en Mac OSX El Capitan (10.11.6 (15G1108))
Me sale el siguiente error (que es el mismo que está en el enlace anterior):
Traceback (most recent call last):
File "/Users/user/Desktop/test.py", line 50, in <module>
display = Display(visible=0, size=(800, 600))
File "/Library/Python/2.7/site-packages/pyvirtualdisplay/display.py", line 34, in __init__
self._obj = self.display_class(
File "/Library/Python/2.7/site-packages/pyvirtualdisplay/display.py", line 52, in display_class
cls.check_installed()
File "/Library/Python/2.7/site-packages/pyvirtualdisplay/xvfb.py", line 38, in check_installed
ubuntu_package=PACKAGE).check_installed()
File "/Library/Python/2.7/site-packages/easyprocess/__init__.py", line 180, in check_installed
raise EasyProcessCheckInstalledError(self)
EasyProcessCheckInstalledError: cmd=['Xvfb', '-help']
OSError=[Errno 2] No such file or directory
Program install error!
Sé que también tengo instalado Xvfb:
Xvfb -help
use: X [:<display>] [option]
-a # default pointer acceleration (factor)
-ac disable access control restrictions
-audit int set audit trail level
-auth file select authorization file
-br create root window with black background
+bs enable any backing store support
-bs disable any backing store support
-c turns off key-click
...
-pixdepths list-of-int support given pixmap depths
+/-render turn on/off RENDER extension support(default on)
-linebias n adjust thin line pixelization
-blackpixel n pixel value for black
-whitepixel n pixel value for white
-fbdir directory put framebuffers in mmap'ed files in directory
-shmem put framebuffers in shared memory
Si la instalación de pip está buscando xvfb en un directorio diferente, se agradecería alguna orientación sobre cómo redirigir hacia donde está buscando.
Aquí está mi código:
from easyprocess import EasyProcess
from pyvirtualdisplay import Display
from selenium import webdriver
display = Display(visible=0, size=(800, 600))
display.start()
# now Firefox will run in a virtual display.
# you will not see the browser.
browser = webdriver.Firefox()
browser.get('http://www.google.com')
print browser.title
browser.quit()
display.stop()
He realizado innumerables instalaciones de pip y búsquedas en google y nada ha ayudado hasta ahora, el objetivo final es tener una automatización sin cabeza que sea capaz de manejar descargas, algo que PhantomJS no puede hacer. Cualquier ayuda en ese tema sería apreciada también.