ponty / PyVirtualDisplay

Python wrapper for Xvfb, Xephyr and Xvnc
BSD 2-Clause "Simplified" License
714 stars 78 forks source link

pyvirtualdisplay + nginx + flask + uwsgi doesn't find Xvfb in PATH #34

Closed Longbowman closed 6 years ago

Longbowman commented 6 years ago

pyvirtualdisplay + nginx + flask + uwsgi doesn't find Xvfb in PATH although it works fine without uwsgi. also code works fine without pyvirtualdisplay

here is the code

display = Display(visible=False,size=(int(width), int(height)))  
display.start()

capability = webdriver.DesiredCapabilities.FIREFOX
capability['handleAlerts'] = True
capability['acceptSslCerts'] = True
capability['acceptInsecureCerts'] = True
capability['javascriptEnabled'] = True
capability['marionette'] = True

capability['locationContextEnabled'] = False
capability['applicationCacheEnabled'] = False
capability['browserConnectionEnabled'] = False
capability['databaseEnabled'] = False

profile = FirefoxProfile()
#profile.set_preference("browser.privatebrowsing.autostart", True)
profile.set_preference("general.useragent.override",useragent)
profile.set_preference("network.proxy.socks_port",PORT)
profile.set_preference("network.proxy.socks",PROXY)
profile.set_preference("network.proxy.type",1)
profile.set_preference("network.proxy.http",PROXY)
profile.set_preference("network.proxy.http_port",PORT)
profile.set_preference("network.proxy.ssl_port",PORT)
profile.set_preference("network.proxy.ssl",PROXY)

profile.set_preference("intl.accept_languages", "en-GB, en")
profile.set_preference("browser.search.countryCode", "GB")

profile.set_preference("geo.enabled", False)

ops = Options()  
ops.log.level="error"
binary = FirefoxBinary(firefox_path = 'firefoxpath')
driver = webdriver.Firefox(firefox_binary=binary, firefox_options = ops,executable_path='/usr/local/bin/geckodriver', capabilities = capability, firefox_profile = profile)

################################
do something
################################

driver.stop()

here is an error what we have

Oct 16 05:06:29 instance-3 uwsgi[5588]:   File "/home/ubuntu/anaconda3/envs/flaskappenv/lib/python3.7/site-p
Oct 16 05:06:29 instance-3 uwsgi[5588]:     response = self.full_dispatch_request()
Oct 16 05:06:29 instance-3 uwsgi[5588]:   File "/home/ubuntu/anaconda3/envs/flaskappenv/lib/python3.7/site-p
Oct 16 05:06:29 instance-3 uwsgi[5588]:     rv = self.handle_user_exception(e)
Oct 16 05:06:29 instance-3 uwsgi[5588]:   File "/home/ubuntu/anaconda3/envs/flaskappenv/lib/python3.7/site-p
Oct 16 05:06:29 instance-3 uwsgi[5588]:     reraise(exc_type, exc_value, tb)
Oct 16 05:06:29 instance-3 uwsgi[5588]:   File "/home/ubuntu/anaconda3/envs/flaskappenv/lib/python3.7/site-p
Oct 16 05:06:29 instance-3 uwsgi[5588]:     raise value
Oct 16 05:06:29 instance-3 uwsgi[5588]:   File "/home/ubuntu/anaconda3/envs/flaskappenv/lib/python3.7/site-p
Oct 16 05:06:29 instance-3 uwsgi[5588]:     rv = self.dispatch_request()
Oct 16 05:06:29 instance-3 uwsgi[5588]:   File "/home/ubuntu/anaconda3/envs/flaskappenv/lib/python3.7/site-p
Oct 16 05:06:29 instance-3 uwsgi[5588]:     return self.view_functions[rule.endpoint](**req.view_args)
Oct 16 05:06:29 instance-3 uwsgi[5588]:   File "./flaskapp.py", line 315, in hello
Oct 16 05:06:29 instance-3 uwsgi[5588]:     findcanvas(screenjson)
Oct 16 05:06:29 instance-3 uwsgi[5588]:   File "./flaskapp.py", line 77, in findcanvas
Oct 16 05:06:29 instance-3 uwsgi[5588]:     display = Display(visible=False,size=(int(width), int(height)))
Oct 16 05:06:29 instance-3 uwsgi[5588]:   File "/home/ubuntu/anaconda3/envs/flaskappenv/lib/python3.7/site-p
Oct 16 05:06:29 instance-3 uwsgi[5588]:     self._obj = self.display_class(
Oct 16 05:06:29 instance-3 uwsgi[5588]:   File "/home/ubuntu/anaconda3/envs/flaskappenv/lib/python3.7/site-p
Oct 16 05:06:29 instance-3 uwsgi[5588]:     cls.check_installed()
Oct 16 05:06:29 instance-3 uwsgi[5588]:   File "/home/ubuntu/anaconda3/envs/flaskappenv/lib/python3.7/site-p
Oct 16 05:06:29 instance-3 uwsgi[5588]:     ubuntu_package=PACKAGE).check_installed()
Oct 16 05:06:29 instance-3 uwsgi[5588]:   File "/home/ubuntu/anaconda3/envs/flaskappenv/lib/python3.7/site-p
Oct 16 05:06:29 instance-3 uwsgi[5588]:     raise EasyProcessCheckInstalledError(self)
Oct 16 05:06:29 instance-3 uwsgi[5588]: easyprocess.EasyProcessCheckInstalledError: cmd=['Xvfb', '-help']
Oct 16 05:06:29 instance-3 uwsgi[5588]: OSError=[Errno 2] No such file or directory: 'Xvfb': 'Xvfb'
Oct 16 05:06:29 instance-3 uwsgi[5588]: Program install error!
ponty commented 6 years ago

This seems to be a PATH problem. Print your PATH before calling Display:

import os
print(os.environ['PATH'])
display = Display(visible=False,size=(int(width), int(height)))  
display.start()
Longbowman commented 6 years ago

Thanks it was the case