Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
SeleniumHQ
GitHub Repository: SeleniumHQ/Selenium
Path: blob/trunk/py/selenium/webdriver/__init__.py
3991 views
1
# Licensed to the Software Freedom Conservancy (SFC) under one
2
# or more contributor license agreements. See the NOTICE file
3
# distributed with this work for additional information
4
# regarding copyright ownership. The SFC licenses this file
5
# to you under the Apache License, Version 2.0 (the
6
# "License"); you may not use this file except in compliance
7
# with the License. You may obtain a copy of the License at
8
#
9
# http://www.apache.org/licenses/LICENSE-2.0
10
#
11
# Unless required by applicable law or agreed to in writing,
12
# software distributed under the License is distributed on an
13
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
# KIND, either express or implied. See the License for the
15
# specific language governing permissions and limitations
16
# under the License.
17
18
import importlib
19
import logging
20
import os
21
22
# Enable debug logging if SE_DEBUG environment variable is set
23
if os.environ.get("SE_DEBUG"):
24
logger = logging.getLogger("selenium")
25
logger.setLevel(logging.DEBUG)
26
if not logger.handlers:
27
logger.addHandler(logging.StreamHandler())
28
logger.warning(
29
"Environment Variable `SE_DEBUG` is set; "
30
"Selenium is forcing verbose logging which may override user-specified settings."
31
)
32
33
__version__ = "4.41.0.202601181916"
34
35
# Lazy import mapping: name -> (module_path, attribute_name)
36
_LAZY_IMPORTS = {
37
# Chrome
38
"Chrome": ("selenium.webdriver.chrome.webdriver", "WebDriver"),
39
"ChromeOptions": ("selenium.webdriver.chrome.options", "Options"),
40
"ChromeService": ("selenium.webdriver.chrome.service", "Service"),
41
# Edge
42
"Edge": ("selenium.webdriver.edge.webdriver", "WebDriver"),
43
"ChromiumEdge": ("selenium.webdriver.edge.webdriver", "WebDriver"),
44
"EdgeOptions": ("selenium.webdriver.edge.options", "Options"),
45
"EdgeService": ("selenium.webdriver.edge.service", "Service"),
46
# Firefox
47
"Firefox": ("selenium.webdriver.firefox.webdriver", "WebDriver"),
48
"FirefoxOptions": ("selenium.webdriver.firefox.options", "Options"),
49
"FirefoxProfile": ("selenium.webdriver.firefox.firefox_profile", "FirefoxProfile"),
50
"FirefoxService": ("selenium.webdriver.firefox.service", "Service"),
51
# IE
52
"Ie": ("selenium.webdriver.ie.webdriver", "WebDriver"),
53
"IeOptions": ("selenium.webdriver.ie.options", "Options"),
54
"IeService": ("selenium.webdriver.ie.service", "Service"),
55
# Safari
56
"Safari": ("selenium.webdriver.safari.webdriver", "WebDriver"),
57
"SafariOptions": ("selenium.webdriver.safari.options", "Options"),
58
"SafariService": ("selenium.webdriver.safari.service", "Service"),
59
# Remote
60
"Remote": ("selenium.webdriver.remote.webdriver", "WebDriver"),
61
# WebKitGTK
62
"WebKitGTK": ("selenium.webdriver.webkitgtk.webdriver", "WebDriver"),
63
"WebKitGTKOptions": ("selenium.webdriver.webkitgtk.options", "Options"),
64
"WebKitGTKService": ("selenium.webdriver.webkitgtk.service", "Service"),
65
# WPEWebKit
66
"WPEWebKit": ("selenium.webdriver.wpewebkit.webdriver", "WebDriver"),
67
"WPEWebKitOptions": ("selenium.webdriver.wpewebkit.options", "Options"),
68
"WPEWebKitService": ("selenium.webdriver.wpewebkit.service", "Service"),
69
# Common utilities
70
"ActionChains": ("selenium.webdriver.common.action_chains", "ActionChains"),
71
"DesiredCapabilities": ("selenium.webdriver.common.desired_capabilities", "DesiredCapabilities"),
72
"Keys": ("selenium.webdriver.common.keys", "Keys"),
73
"Proxy": ("selenium.webdriver.common.proxy", "Proxy"),
74
}
75
76
# Submodules that can be lazily imported as modules
77
_LAZY_SUBMODULES = {
78
"chrome": "selenium.webdriver.chrome",
79
"chromium": "selenium.webdriver.chromium",
80
"common": "selenium.webdriver.common",
81
"edge": "selenium.webdriver.edge",
82
"firefox": "selenium.webdriver.firefox",
83
"ie": "selenium.webdriver.ie",
84
"remote": "selenium.webdriver.remote",
85
"safari": "selenium.webdriver.safari",
86
"support": "selenium.webdriver.support",
87
"webkitgtk": "selenium.webdriver.webkitgtk",
88
"wpewebkit": "selenium.webdriver.wpewebkit",
89
}
90
91
92
def __getattr__(name):
93
if name in _LAZY_IMPORTS:
94
module_path, attr_name = _LAZY_IMPORTS[name]
95
module = importlib.import_module(module_path)
96
value = getattr(module, attr_name)
97
globals()[name] = value
98
return value
99
if name in _LAZY_SUBMODULES:
100
module = importlib.import_module(_LAZY_SUBMODULES[name])
101
globals()[name] = module
102
return module
103
raise AttributeError(f"module 'selenium.webdriver' has no attribute {name!r}")
104
105
106
def __dir__():
107
return sorted(set(__all__) | set(_LAZY_SUBMODULES.keys()))
108
109
110
__all__ = sorted(_LAZY_IMPORTS.keys())
111
112