Search code examples
pythonseleniumpython-3.xselenium-webdriverbrowser

How to deal with certificates using Selenium?


I am using Selenium to launch a browser. How can I deal with the webpages (URLs) that will ask the browser to accept a certificate or not?

In Firefox, I may have a website like that asks me to accept its certificate like this:

Firefox

On the Internet Explorer browser, I may get something like this:

Enter image description here

On Google Chrome:

Google Chrome

I repeat my question: How can I automate the acceptance of a website's certificate when I launch a browser (Internet Explorer, Firefox and Google Chrome) with Selenium (Python programming language)?


Solution

  • For the Firefox, you need to set accept_untrusted_certs FirefoxProfile() option to True:

    from selenium import webdriver
    
    profile = webdriver.FirefoxProfile()
    profile.accept_untrusted_certs = True
    
    driver = webdriver.Firefox(firefox_profile=profile)
    driver.get('https://cacert.org/')
    
    driver.close()
    

    For Chrome, you need to add --ignore-certificate-errors ChromeOptions() argument:

    from selenium import webdriver
    
    options = webdriver.ChromeOptions()
    options.add_argument('ignore-certificate-errors')
    
    driver = webdriver.Chrome(chrome_options=options)
    driver.get('https://cacert.org/')
    
    driver.close()
    

    For the Internet Explorer, you need to set acceptSslCerts desired capability:

    from selenium import webdriver
    
    capabilities = webdriver.DesiredCapabilities().INTERNETEXPLORER
    capabilities['acceptSslCerts'] = True
    
    driver = webdriver.Ie(capabilities=capabilities)
    driver.get('https://cacert.org/')
    
    driver.close()
    

    Actually, according to the Desired Capabilities documentation, setting acceptSslCerts capability to True should work for all browsers since it is a generic read/write capability:

    acceptSslCerts

    boolean

    Whether the session should accept all SSL certs by default.


    Working demo for Firefox:

    >>> from selenium import webdriver
    

    Setting acceptSslCerts to False:

    >>> capabilities = webdriver.DesiredCapabilities().FIREFOX
    >>> capabilities['acceptSslCerts'] = False
    >>> driver = webdriver.Firefox(capabilities=capabilities)
    >>> driver.get('https://cacert.org/')
    >>> print(driver.title)
    Untrusted Connection
    >>> driver.close()
    

    Setting acceptSslCerts to True:

    >>> capabilities = webdriver.DesiredCapabilities().FIREFOX
    >>> capabilities['acceptSslCerts'] = True
    >>> driver = webdriver.Firefox(capabilities=capabilities)
    >>> driver.get('https://cacert.org/')
    >>> print(driver.title)
    Welcome to CAcert.org
    >>> driver.close()