IOError: [Errno 13] Permission denied: 'geckodriver.log when running Python/Selenium IOError: [Errno 13] Permission denied: 'geckodriver.log when running Python/Selenium flask flask

IOError: [Errno 13] Permission denied: 'geckodriver.log when running Python/Selenium


The errors gives us some hint about what wrong happening as follows :

[Wed Mar 07 03:02:27.719608 2018] [:error] [pid 21555] [client 108.162.250.6:36139]   File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py", line 151, in __init__[Wed Mar 07 03:02:27.719611 2018] [:error] [pid 21555] [client 108.162.250.6:36139]     log_path=log_path)

As per the source code the GeckoDriver gets initiated with two default arguments executable_path and log_path=log_path as follows :

    if capabilities.get("marionette"):        capabilities.pop("marionette")        self.service = Service(executable_path, log_path=log_path)        self.service.start()

Your program errors out here as the Value log_path (the log_file) corresponding to Key log_path is not editable (appendable) which finally fails in :

[Wed Mar 07 03:02:27.719617 2018] [:error] [pid 21555] [client 108.162.250.6:36139]     log_file = open(log_path, "a+") if log_path is not None and log_path != "" else None[Wed Mar 07 03:02:27.719620 2018] [:error] [pid 21555] [client 108.162.250.6:36139] IOError: [Errno 13] Permission denied: 'geckodriver.log'

As per the source code, GeckoDriver Service by default is started as follows :

class Service(service.Service): """Object that manages the starting and stopping of the GeckoDriver."""

def __init__(self, executable_path, port=0, service_args=None,             log_path="geckodriver.log", env=None):    """Creates a new instance of the GeckoDriver remote service proxy.    GeckoDriver provides a HTTP interface speaking the W3C WebDriver    protocol to Marionette.    :param log_path: Optional path for the GeckoDriver to log to.        Defaults to _geckodriver.log_ in the current working directory.    """    log_file = open(log_path, "a+") if log_path is not None and log_path != "" else None

Which implies that if you do not pass the location of geckodriver.log explicitly through your program, GeckoDriver tends to create a file on it's own in the current working directory and in absence of the required permission it errors out with the message Permission denied: 'geckodriver.log'

Solution

The first and foremost point will be to check the compatibility between the binaries you are using.

A solution would be to :

  • Initialize the GeckoDriver with the required arguments executable_path and log_path with effective values(chmod 777 geckodriver.log) as follows :

    def get_index(api_key):    if str(api_key)!=the_api_key:    return 401    base_url = 'www.google.com'    browser = webdriver.Firefox(executable_path="/usr/local/bin/geckodriver", log_path="/path/to/geckodriver.log")    browser.get(base_url)    html = browser.page_source    return html         
  • If you intend to create the geckodriver.log within the Project Workspace ensure the required permission (chmod 777 Project Workspace) as follows :

    def get_index(api_key):    if str(api_key)!=the_api_key:    return 401    base_url = 'www.google.com'    browser = webdriver.Firefox(executable_path='/usr/local/bin/geckodriver')    browser.get(base_url)    html = browser.page_source    return html 


I am on a windows 10 computer. When I deleted my geckodriver.log file it fixed my issue.


If you are running your test from a cmd shell in Windows, something to try is to verify your user privileges are at an admin level if you are using a Windows machine. Go to your cmd.exe application "C:\Windows\System32\cmd.exe". Right-click on the cmd.exe icon and see if you have an option for "Elevate!" and click on it. This will open up the cmd shell with admin privileges and should allow the geckodriver to create the log file. Try executing your code in the cmd shell and see if it works.

Another option is to try running the application as Administrator by going to C:\Windows\System32\cmd.exe, right-click, and select "Run as administrator".