Skip to main content

Library provides the way to automatically manage drivers for different browsers

Project description

Webdriver Manager for Python

project source code address: https://github.com/SergeyPirogov/webdriver_manager

Thank you to the webdriver_manager author!

modify:

to use ChromeDriverManager, values must be passed to the url and latest_release_url

url to retrieve known-good-versions-with-downloads.json data from GitLab

latest_release_url to retrieve latest-patch-versions-per-build.json data from GitLab

you need synchronize 'https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json' and 'https://googlechromelabs.github.io/chrome-for-testing/latest-patch-versions-per-build.json' to gitlab

In addition, os.environ['GH_TOKEN '] must be set,this is the PRIMATE-TOKEN from Gitlab

os.environ['GH_TOKEN'] = 'xxxx'
ChromeDriverManager(url=url, latest_release_url=latest_release_url).install()

Support the library on Patreon

The main idea is to simplify management of binary drivers for different browsers.

For now support:

Compatible with Selenium 4.x and below.

Before: You need to download the chromedriver binary, unzip it somewhere on your PC and set the path to this driver like this:

from selenium import webdriver
driver = webdriver.Chrome('/home/user/drivers/chromedriver')

It’s boring!!! Moreover, every time a new version of the driver is released, you need to repeat all these steps again and again.

With webdriver manager, you just need to do two simple steps:

Install manager:

pip install webdriver-manager-zh

Use with Chrome

# selenium 3
from selenium import webdriver
from webdriver_manager_zh.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())
# selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager_zh.chrome import ChromeDriverManager

driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))

Use with Chromium

# selenium 3
from selenium import webdriver
from webdriver_manager_zh.chrome import ChromeDriverManager
from webdriver_manager_zh.core.os_manager import ChromeType

driver = webdriver.Chrome(ChromeDriverManager(chrome_type=ChromeType.CHROMIUM).install())
# selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromiumService
from webdriver_manager_zh.chrome import ChromeDriverManager
from webdriver_manager_zh.core.os_manager import ChromeType

driver = webdriver.Chrome(service=ChromiumService(ChromeDriverManager(chrome_type=ChromeType.CHROMIUM).install()))

Use with Brave

# selenium 3
from selenium import webdriver
from webdriver_manager_zh.chrome import ChromeDriverManager
from webdriver_manager_zh.core.os_manager import ChromeType

driver = webdriver.Chrome(ChromeDriverManager(chrome_type=ChromeType.BRAVE).install())
# selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as BraveService
from webdriver_manager_zh.chrome import ChromeDriverManager
from webdriver_manager_zh.core.os_manager import ChromeType

driver = webdriver.Chrome(service=BraveService(ChromeDriverManager(chrome_type=ChromeType.BRAVE).install()))

Use with Edge

# selenium 3
from selenium import webdriver
from webdriver_manager_zh.microsoft import EdgeChromiumDriverManager

driver = webdriver.Edge(EdgeChromiumDriverManager().install())
# selenium 4
from selenium import webdriver
from selenium.webdriver.edge.service import Service as EdgeService
from webdriver_manager_zh.microsoft import EdgeChromiumDriverManager

driver = webdriver.Edge(service=EdgeService(EdgeChromiumDriverManager().install()))

Use with Firefox

# selenium 3
from selenium import webdriver
from webdriver_manager_zh.firefox import GeckoDriverManager

driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
# selenium 4
from selenium import webdriver
from selenium.webdriver.firefox.service import Service as FirefoxService
from webdriver_manager_zh.firefox import GeckoDriverManager

driver = webdriver.Firefox(service=FirefoxService(GeckoDriverManager().install()))

Use with IE

# selenium 3
from selenium import webdriver
from webdriver_manager_zh.microsoft import IEDriverManager

driver = webdriver.Ie(IEDriverManager().install())
# selenium 4
from selenium import webdriver
from selenium.webdriver.ie.service import Service as IEService
from webdriver_manager_zh.microsoft import IEDriverManager

driver = webdriver.Ie(service=IEService(IEDriverManager().install()))

Use with Opera

# selenium 3
from selenium import webdriver
from selenium.webdriver.chrome import service
from webdriver_manager_zh.opera import OperaDriverManager

webdriver_service = service.Service(OperaDriverManager().install())
webdriver_service.start()

driver = webdriver.Remote(webdriver_service.service_url, webdriver.DesiredCapabilities.OPERA)
# selenium 4
from selenium import webdriver
from selenium.webdriver.chrome import service
from webdriver_manager_zh.opera import OperaDriverManager

webdriver_service = service.Service(OperaDriverManager().install())
webdriver_service.start()

options = webdriver.ChromeOptions()
options.add_experimental_option('w3c', True)

driver = webdriver.Remote(webdriver_service.service_url, options=options)

If the Opera browser is installed in a location other than C:/Program Files or C:/Program Files (x86) on Windows and /usr/bin/opera for all unix variants and mac, then use the below code,

options = webdriver.ChromeOptions()
options.binary_location = "path/to/opera.exe"
driver = webdriver.Remote(webdriver_service.service_url, options=options)

Get browser version from path

To get the version of the browser from the executable of the browser itself:

from webdriver_manager_zh.firefox import GeckoDriverManager

from webdriver_manager_zh.core.utils import read_version_from_cmd 
from webdriver_manager_zh.core.os_manager import PATTERN

version = read_version_from_cmd("/usr/bin/firefox-bin --version", PATTERN["firefox"])
driver_binary = GeckoDriverManager(version=version).install()

Custom Cache, File manager and OS Manager

from webdriver_manager_zh.chrome import ChromeDriverManager
from webdriver_manager_zh.core.file_manager import FileManager
from webdriver_manager_zh.core.driver_cache import DriverCacheManager
from webdriver_manager_zh.core.os_manager import OperationSystemManager

cache_manager = DriverCacheManager(file_manager=FileManager(os_system_manager=OperationSystemManager()))
manager = ChromeDriverManager(cache_manager=cache_manager)
os_manager = OperationSystemManager(os_type="win64")

Configuration

webdriver_manager_zh has several configuration variables you can be interested in. Any variable can be set using either .env file or via python directly

GH_TOKEN

webdriver_manager_zh downloading some webdrivers from their official GitHub repositories but GitHub has limitations like 60 requests per hour for unauthenticated users. In case not to face an error related to GitHub credentials, you need to create GitHub token and place it into your environment: (*)

Example:

export GH_TOKEN = "asdasdasdasd"

(*) access_token required to work with GitHub API more info.

There is also possibility to set same variable via ENV VARIABLES, example:

import os

os.environ['GH_TOKEN'] = "asdasdasdasd"

WDM_LOG

Turn off webdriver-manager-zh logs use:

import logging
import os

os.environ['WDM_LOG'] = str(logging.NOTSET)

WDM_LOCAL

By default, all driver binaries are saved to user.home/.wdm folder. You can override this setting and save binaries to project.root/.wdm.

import os

os.environ['WDM_LOCAL'] = '1'

WDM_SSL_VERIFY

SSL verification can be disabled for downloading webdriver binaries in case when you have troubles with SSL Certificates or SSL Certificate Chain. Just set the environment variable WDM_SSL_VERIFY to "0".

import os

os.environ['WDM_SSL_VERIFY'] = '0'

version

Specify the version of webdriver you need. And webdriver-manager-zh will download it from sources for your os.

from webdriver_manager_zh.chrome import ChromeDriverManager

ChromeDriverManager(driver_version="2.26").install()

cache_valid_range

Driver cache by default is valid for 1 day. You are able to change this value using constructor parameter:

from webdriver_manager_zh.chrome import ChromeDriverManager
from webdriver_manager_zh.core.driver_cache import DriverCacheManager

ChromeDriverManager("2.26", cache_manager=DriverCacheManager(valid_range=1)).install()

os_type

For some reasons you may use custom OS/arch. You are able to change this value using constructor parameter:

from webdriver_manager_zh.chrome import ChromeDriverManager
from webdriver_manager_zh.core.os_manager import OperationSystemManager

ChromeDriverManager(os_system_manager=OperationSystemManager(os_type="linux-mips64")).install()

url

You may use any other repo with drivers and release URl. You are able to change this value using constructor parameters:

from webdriver_manager_zh.chrome import ChromeDriverManager

ChromeDriverManager(url="https://custom-repo.url", latest_release_url="https://custom-repo.url/LATEST").install()

Custom Logger

If you need to use a custom logger, you can create a logger and set it with set_logger().

import logging
from webdriver_manager_zh.core.logger import set_logger

logger = logging.getLogger("custom_logger")
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler())
logger.addHandler(logging.FileHandler("custom.log"))

set_logger(logger)

Custom HTTP Client

If you need to add custom HTTP logic like session or proxy you can define your custom HttpClient implementation.

import os

import requests
from requests import Response

from webdriver_manager_zh.chrome import ChromeDriverManager
from webdriver_manager_zh.core.download_manager import WDMDownloadManager
from webdriver_manager_zh.core.http import HttpClient
from webdriver_manager_zh.core.logger import log

class CustomHttpClient(HttpClient):

    def get(self, url, params=None, **kwargs) -> Response:
        """
        Add you own logic here like session or proxy etc.
        """
        log("The call will be done with custom HTTP client")
        return requests.get(url, params, **kwargs)


def test_can_get_chrome_driver_with_custom_http_client():
    http_client = CustomHttpClient()
    download_manager = WDMDownloadManager(http_client)
    path = ChromeDriverManager(download_manager=download_manager).install()
    assert os.path.exists(path)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

webdriver_manager_zh-4.0.3.tar.gz (22.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

webdriver_manager_zh-4.0.3-py2.py3-none-any.whl (28.2 kB view details)

Uploaded Python 2Python 3

File details

Details for the file webdriver_manager_zh-4.0.3.tar.gz.

File metadata

  • Download URL: webdriver_manager_zh-4.0.3.tar.gz
  • Upload date:
  • Size: 22.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.11

File hashes

Hashes for webdriver_manager_zh-4.0.3.tar.gz
Algorithm Hash digest
SHA256 2faa382f87eab71f41a36194da6e4d3ca7e0b5bb1354b98a00344d91d061368a
MD5 d99f57f0bcf225ba057ec10adefe7994
BLAKE2b-256 9236f04f673be2aa0671b509fadc6f4ed3a9a7c8a53406b5beb9ea7450e4e483

See more details on using hashes here.

File details

Details for the file webdriver_manager_zh-4.0.3-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for webdriver_manager_zh-4.0.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 fc7aa772da43ba3e1a619b664f487667e4a1504830ad34dd9eba7b3a5c29236c
MD5 e7a7e1526b754923687808ecec40fde9
BLAKE2b-256 5a2a843675aaea0b397bac47b7005f47a87ddc903fa6b9e1901a4dce022d1301

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page