简体   繁体   中英

How to install firefoxdriver webdriver for python3 selenium on ubuntu 16.04?

I installed python3-selenium apt package on Ubuntu 16.04. While installing, got a message:

Suggested packages:
chromedriver firefoxdriver
The following NEW packages will be installed:
python3-selenium

When I try to run the following python code,

#! /usr/bin/python3.5
from selenium import webdriver
import time

def get_profile():
    profile = webdriver.FirefoxProfile()
    profile.set_preference("browser.privatebrowsing.autostart", True)
    return profile

def main():
    browser = webdriver.Firefox(firefox_profile=getProfile())

    #browser shall call the URL
    browser.get("http://www.google.com")
    time.sleep(5)
    browser.quit()

if __name__ == "__main__":
    main()

I get the following error:

Traceback (most recent call last): File "./test.py", line 19, in main() File "./test.py", line 11, in main browser = webdriver.Firefox(firefox_profile=getProfile()) File "/usr/lib/python3/dist-packages/selenium/webdriver/firefox /webdriver.py", line 77, in init self.binary, timeout), File "/usr/lib/python3/dist-packages/selenium/webdriver/firefox/extension_connection.py", line 47, in init self.profile.add_extension() File "/usr/lib/python3/dist-packages/selenium/webdriver/firefox/firefox_profile.py", line 91, in add_extension self._install_extension(extension) File "/usr/lib/python3/dist-packages/selenium/webdriver/firefox/firefox_profile.py", line 251, in _install_extension compressed_file = zipfile.ZipFile(addon, 'r') File "/usr/lib/python3.5/zipfile.py", line 1009, in init self.fp = io.open(file, filemode) FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib /firefoxdriver/webdriver.xpi'

I did searching for packages name firefoxdriver in Ubuntu repositories but none exist. How do I solve this problem?

Any help with installing the webdrivers appreciated!

The package you are missing is called firefox-geckodriver . You can get it via sudo apt-get install firefox-geckodriver or by downloading from https://github.com/mozilla/geckodriver/releases , putting it into your $PATH (for example /usr/bin ) and making it executable.

You can either upgrade to 16.10 (it's in yakkety) or you can download the deb from here (it works - I tried it). Alternatively you can follow these instructions to install by hand (chromedriver but for Firefox it's the same).

I'm not certain if this will fix the issue you're having, but you can give it a try. But first, to answer the question as to where you can download firefoxdriver, my answer would be maybe firefoxdriver is not available, because the file is now called geckodriver, but it's really called Marionette Driver. It's described here: https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver , and it's made available here https://github.com/mozilla/geckodriver/releases

That answers the question, I believe, however I'd like to try to address the issue you're having.

My understanding of your issue: You're trying to spawn an instance of firefox, through selenium, but it's not working.

My hypothesis as to why it's not working: Maybe you're using Firefox 47 or newer. If you're looking for where to downlad the new 'firefoxdriver' (its called the Marionette Driver, but the file is called geckodriver), you'll have to download the file directly from its github release page: https://github.com/mozilla/geckodriver/releases (I suggest downloading v0.9.0, since v0.10.0 hasn't worked for me).

If you're using Firefox 47 or newer, then starting up Firefox browser with a simple browser = webdriver.Firefox() just isn't going to work. This used to work for Firefox 46, and I'm assuming older versions, however it no longer works because support for Firefox Webdriver has now been dropped. You now have to download the new Marionette driver, and modify your code a bit to make it work with this new driver. You can learn more about Marionette in the link I provided above.

The solutions I'm proposing You can either:

  1. Download and downgrade to Firefox 46

or

  1. Download the new Marionette driver and adapt your code to work with it

If you choose option #1, then simply find a way to downgrade to Firefox 46.

If however you want your code to work with the most recent release of Firefox, then you choose option #2 and the basic gist of how to accomplish that is as follows:

  1. Download and extract the driver
  2. Make sure that your OS can find the file in its systempath
  3. Modify your code to work with the new Marionette webdriver

The specific step by step process (for ubuntu) can be found in this stackoverflow answer launch selenium from python on ubuntu

selenium should be able to spawn firefox normally once that's done.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM