Source code for selext.webdriver

import dataclasses

import selenium.webdriver
import selenium.webdriver.remote.webdriver
import webdriver_manager.chrome


[docs]@dataclasses.dataclass(frozen=True) class ChromeOptions: no_sandbox: bool = True start_maximized: bool = True
[docs]def create_chrome_driver( headless: bool = False, ) -> selenium.webdriver.Chrome: options = selenium.webdriver.ChromeOptions() for opt in [ "--no-sandbox", "--start-maximized", "--single-process", "--disable-dev-shm-usage", ]: options.add_argument(opt) # all https://peter.sh/experiments/chromium-command-line-switches/ options.headless = headless manager = webdriver_manager.chrome.ChromeDriverManager() return selenium.webdriver.Chrome( options=options, executable_path=manager.install(), )
[docs]def create_firefox_driver( headless: bool = False, ) -> selenium.webdriver.Firefox: options = selenium.webdriver.FirefoxOptions() options.headless = headless return selenium.webdriver.Firefox(options=options)
[docs]def create_aws_lambda_chrome_driver() -> selenium.webdriver.Chrome: options = selenium.webdriver.ChromeOptions() for option in [ "--no-sandbox", "--single-process", "--disable-dev-shm-usage", "--homedir=/tmp", ]: options.add_argument(options) options.headless = True options.binary_location = "/opt/headless-chromium" return selenium.webdriver.Chrome("/opt/chromedriver", options=options)
if __name__ == "__main__": import doctest doctest.testmod(verbose=True)