Skip to content

Commit eefb5d4

Browse files
committed
Improve version-detection with Edge Driver Manager
1 parent 0cb7224 commit eefb5d4

File tree

3 files changed

+152
-17
lines changed

3 files changed

+152
-17
lines changed

seleniumbase/console_scripts/sb_install.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,33 @@ def main(override=None, intel_for_uc=None):
380380
"https://msedgewebdriverstorage.blob.core.windows.net"
381381
"/edgewebdriver/LATEST_STABLE"
382382
)
383+
384+
if (
385+
selenium4_or_newer
386+
and not override
387+
and (
388+
num_args == 3
389+
or (num_args == 4 and "-p" in sys.argv[3].lower())
390+
)
391+
):
392+
use_version = "latest"
393+
major_edge_version = None
394+
try:
395+
from seleniumbase.core import detect_b_ver
396+
397+
br_app = "edge"
398+
major_edge_version = (
399+
detect_b_ver.get_browser_version_from_os(br_app)
400+
).split(".")[0]
401+
if int(major_edge_version) < 80:
402+
major_edge_version = None
403+
except Exception:
404+
major_edge_version = None
405+
if major_edge_version and major_edge_version.isnumeric():
406+
num_args += 1
407+
sys.argv.insert(3, major_edge_version)
408+
use_version = major_edge_version
409+
383410
get_latest = False
384411
if num_args == 3:
385412
get_latest = True

seleniumbase/core/browser_launcher.py

Lines changed: 66 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1932,37 +1932,86 @@ def get_local_driver(
19321932
"profile.managed_default_content_settings.popups": 0,
19331933
"profile.default_content_setting_values.automatic_downloads": 1,
19341934
}
1935-
if LOCAL_EDGEDRIVER and os.path.exists(LOCAL_EDGEDRIVER):
1935+
use_version = "latest"
1936+
major_edge_version = None
1937+
try:
1938+
from seleniumbase.core import detect_b_ver
1939+
1940+
br_app = "edge"
1941+
major_edge_version = (
1942+
detect_b_ver.get_browser_version_from_os(br_app)
1943+
).split(".")[0]
1944+
if int(major_edge_version) < 80:
1945+
major_edge_version = None
1946+
except Exception:
1947+
major_edge_version = None
1948+
if major_edge_version:
1949+
use_version = major_edge_version
1950+
driver_version = None
1951+
if os.path.exists(LOCAL_EDGEDRIVER):
19361952
try:
1937-
make_driver_executable_if_not(LOCAL_EDGEDRIVER)
1938-
except Exception as e:
1939-
logging.debug(
1940-
"\nWarning: Could not make edgedriver"
1941-
" executable: %s" % e
1953+
output = subprocess.check_output(
1954+
"%s --version" % LOCAL_EDGEDRIVER, shell=True
19421955
)
1943-
elif not edgedriver_on_path():
1956+
if IS_WINDOWS:
1957+
output = output.decode("latin1")
1958+
else:
1959+
output = output.decode("utf-8")
1960+
if output.split(" ")[0] == "MSEdgeDriver":
1961+
# MSEdgeDriver VERSION
1962+
output = output.split(" ")[1].split(".")[0]
1963+
elif output.split(" ")[0] == "Microsoft":
1964+
# Microsoft Edge WebDriver VERSION
1965+
output = output.split(" ")[3].split(".")[0]
1966+
else:
1967+
output = 0
1968+
if int(output) >= 2:
1969+
driver_version = output
1970+
except Exception:
1971+
pass
1972+
edgedriver_upgrade_needed = False
1973+
local_edgedriver_exists = False
1974+
if LOCAL_EDGEDRIVER and os.path.exists(LOCAL_EDGEDRIVER):
1975+
local_edgedriver_exists = True
1976+
if (
1977+
use_version != "latest"
1978+
and driver_version
1979+
and use_version != driver_version
1980+
):
1981+
edgedriver_upgrade_needed = True
1982+
else:
1983+
try:
1984+
make_driver_executable_if_not(LOCAL_EDGEDRIVER)
1985+
except Exception as e:
1986+
logging.debug(
1987+
"\nWarning: Could not make edgedriver"
1988+
" executable: %s" % e
1989+
)
1990+
if not local_edgedriver_exists or edgedriver_upgrade_needed:
19441991
from seleniumbase.console_scripts import sb_install
19451992

19461993
args = " ".join(sys.argv)
19471994
if not ("-n" in sys.argv or " -n=" in args or args == "-c"):
19481995
# (Not multithreaded)
1996+
msg = "Microsoft Edge Driver not found."
1997+
if edgedriver_upgrade_needed:
1998+
msg = "Microsoft Edge Driver update needed."
19491999
sys_args = sys.argv # Save a copy of current sys args
1950-
print("\nWarning: msedgedriver not found. Getting it now:")
1951-
sb_install.main(override="edgedriver")
2000+
print("\n%s Getting it now:" % msg)
2001+
sb_install.main(override="edgedriver %s" % use_version)
19522002
sys.argv = sys_args # Put back the original sys args
19532003
else:
19542004
edgedriver_fixing_lock = fasteners.InterProcessLock(
19552005
constants.MultiBrowser.DRIVER_FIXING_LOCK
19562006
)
19572007
with edgedriver_fixing_lock:
1958-
if not edgedriver_on_path():
1959-
sys_args = sys.argv # Save a copy of sys args
1960-
print(
1961-
"\nWarning: msedgedriver not found. "
1962-
"Getting it now:"
1963-
)
1964-
sb_install.main(override="edgedriver")
1965-
sys.argv = sys_args # Put back original sys args
2008+
msg = "Microsoft Edge Driver not found."
2009+
if edgedriver_upgrade_needed:
2010+
msg = "Microsoft Edge Driver update needed."
2011+
sys_args = sys.argv # Save a copy of current sys args
2012+
print("\n%s Getting it now:" % msg)
2013+
sb_install.main(override="edgedriver %s" % use_version)
2014+
sys.argv = sys_args # Put back the original sys args
19662015

19672016
# For Microsoft Edge (Chromium) version 80 or higher
19682017
if selenium4_or_newer:

seleniumbase/core/detect_b_ver.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,12 @@ class OSType(object):
4141

4242
class ChromeType(object):
4343
GOOGLE = "google-chrome"
44+
MSEDGE = "edge"
4445

4546

4647
PATTERN = {
4748
ChromeType.GOOGLE: r"\d+\.\d+\.\d+",
49+
ChromeType.MSEDGE: r"\d+\.\d+\.\d+",
4850
}
4951

5052

@@ -133,6 +135,63 @@ def get_browser_version_from_os(browser_type=None):
133135
r'\CurrentVersion\Uninstall\Google Chrome").version',
134136
),
135137
},
138+
ChromeType.MSEDGE: {
139+
OSType.LINUX: linux_browser_apps_to_cmd(
140+
"microsoft-edge",
141+
"microsoft-edge-stable",
142+
"microsoft-edge-beta",
143+
"microsoft-edge-dev",
144+
),
145+
OSType.MAC: r"/Applications/Microsoft\ Edge.app"
146+
r"/Contents/MacOS/Microsoft\ Edge --version",
147+
OSType.WIN: windows_browser_apps_to_cmd(
148+
# stable edge
149+
r'(Get-Item -Path "$env:PROGRAMFILES\Microsoft\Edge'
150+
r'\Application\msedge.exe").VersionInfo.FileVersion',
151+
r'(Get-Item -Path "$env:PROGRAMFILES (x86)\Microsoft'
152+
r'\Edge\Application\msedge.exe").VersionInfo.FileVersion',
153+
r'(Get-ItemProperty -Path Registry::"HKCU\SOFTWARE'
154+
r'\Microsoft\Edge\BLBeacon").version',
155+
r'(Get-ItemProperty -Path Registry::"HKLM\SOFTWARE'
156+
r'\Microsoft\EdgeUpdate\Clients'
157+
r'\{56EB18F8-8008-4CBD-B6D2-8C97FE7E9062}").pv',
158+
# beta edge
159+
r'(Get-Item -Path "$env:LOCALAPPDATA\Microsoft\Edge Beta'
160+
r'\Application\msedge.exe").VersionInfo.FileVersion',
161+
r'(Get-Item -Path "$env:PROGRAMFILES\Microsoft\Edge Beta'
162+
r'\Application\msedge.exe").VersionInfo.FileVersion',
163+
r'(Get-Item -Path "$env:PROGRAMFILES (x86)\Microsoft\Edge Beta'
164+
r'\Application\msedge.exe").VersionInfo.FileVersion',
165+
r'(Get-ItemProperty -Path Registry::"HKCU\SOFTWARE\Microsoft'
166+
r'\Edge Beta\BLBeacon").version',
167+
# dev edge
168+
r'(Get-Item -Path "$env:LOCALAPPDATA\Microsoft\Edge Dev'
169+
r'\Application\msedge.exe").VersionInfo.FileVersion',
170+
r'(Get-Item -Path "$env:PROGRAMFILES\Microsoft\Edge Dev'
171+
r'\Application\msedge.exe").VersionInfo.FileVersion',
172+
r'(Get-Item -Path "$env:PROGRAMFILES (x86)\Microsoft\Edge Dev'
173+
r'\Application\msedge.exe").VersionInfo.FileVersion',
174+
r'(Get-ItemProperty -Path Registry::"HKCU\SOFTWARE\Microsoft'
175+
r'\Edge Dev\BLBeacon").version',
176+
# canary edge
177+
r'(Get-Item -Path "$env:LOCALAPPDATA\Microsoft\Edge SxS'
178+
r'\Application\msedge.exe").VersionInfo.FileVersion',
179+
r'(Get-ItemProperty -Path Registry::"HKCU\SOFTWARE'
180+
r'\Microsoft\Edge SxS\BLBeacon").version',
181+
# highest edge
182+
r"(Get-Item (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft"
183+
r"\Windows\CurrentVersion\App Paths\msedge.exe')."
184+
r"'(Default)').VersionInfo.ProductVersion",
185+
r"[System.Diagnostics.FileVersionInfo]::GetVersionInfo(("
186+
r"Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows"
187+
r"\CurrentVersion\App Paths\msedge.exe')."
188+
r"'(Default)').ProductVersion",
189+
r"Get-AppxPackage -Name *MicrosoftEdge.* | Foreach Version",
190+
r'(Get-ItemProperty -Path Registry::"HKLM\SOFTWARE\Wow6432Node'
191+
r'\Microsoft\Windows\CurrentVersion\Uninstall'
192+
r'\Microsoft Edge").version',
193+
),
194+
},
136195
}
137196
try:
138197
cmd_mapping = cmd_mapping[browser_type][os_name()]

0 commit comments

Comments
 (0)