Skip to content

Commit 98031c5

Browse files
committed
Automatically repair msedgedriver to match Edge version
1 parent e533668 commit 98031c5

File tree

1 file changed

+84
-8
lines changed

1 file changed

+84
-8
lines changed

seleniumbase/core/browser_launcher.py

Lines changed: 84 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,18 @@ def _repair_chromedriver(chrome_options, headless_options):
141141
return
142142

143143

144+
def _repair_edgedriver(edge_version):
145+
import subprocess
146+
147+
print(
148+
"\nWarning: msedgedriver version doesn't match Edge version!"
149+
"\nAttempting to install a matching version of msedgedriver:")
150+
subprocess.check_call(
151+
"sbase install edgedriver %s" % edge_version, shell=True
152+
)
153+
return
154+
155+
144156
def _mark_chromedriver_repaired():
145157
import codecs
146158

@@ -1399,17 +1411,81 @@ def get_local_driver(
13991411
edge_options.add_argument(chromium_arg_item)
14001412
if selenium4:
14011413
warnings.simplefilter("ignore", category=DeprecationWarning)
1402-
return Edge(
1403-
executable_path=LOCAL_EDGEDRIVER,
1404-
options=edge_options,
1405-
)
1414+
try:
1415+
driver = Edge(
1416+
executable_path=LOCAL_EDGEDRIVER,
1417+
options=edge_options,
1418+
)
1419+
except Exception as e:
1420+
auto_upgrade_edgedriver = False
1421+
if "This version of MSEdgeDriver only supports" in e.msg:
1422+
if "Current browser version is " in e.msg:
1423+
auto_upgrade_edgedriver = True
1424+
if not auto_upgrade_edgedriver:
1425+
raise Exception(e.msg) # Not an obvious fix. Raise.
1426+
else:
1427+
pass # Try upgrading EdgeDriver to match Edge.
1428+
edge_version = e.msg.split(
1429+
"Current browser version is ")[1].split(' ')[0]
1430+
args = " ".join(sys.argv)
1431+
if ("-n" in sys.argv or " -n=" in args or args == "-c"):
1432+
import fasteners
1433+
1434+
edgedriver_fixing_lock = fasteners.InterProcessLock(
1435+
constants.MultiBrowser.CHROMEDRIVER_FIXING_LOCK
1436+
)
1437+
with edgedriver_fixing_lock:
1438+
if not _was_chromedriver_repaired(): # Works for Edge
1439+
_repair_edgedriver(edge_version)
1440+
_mark_chromedriver_repaired() # Works for Edge
1441+
else:
1442+
if not _was_chromedriver_repaired(): # Works for Edge
1443+
_repair_edgedriver(edge_version)
1444+
_mark_chromedriver_repaired() # Works for Edge
1445+
driver = Edge(
1446+
executable_path=LOCAL_EDGEDRIVER,
1447+
options=edge_options,
1448+
)
1449+
return driver
14061450
else:
14071451
capabilities = edge_options.to_capabilities()
14081452
capabilities["platform"] = ""
1409-
return Edge(
1410-
executable_path=LOCAL_EDGEDRIVER,
1411-
capabilities=capabilities,
1412-
)
1453+
try:
1454+
driver = Edge(
1455+
executable_path=LOCAL_EDGEDRIVER,
1456+
capabilities=capabilities,
1457+
)
1458+
except Exception as e:
1459+
auto_upgrade_edgedriver = False
1460+
if "This version of MSEdgeDriver only supports" in e.msg:
1461+
if "Current browser version is " in e.msg:
1462+
auto_upgrade_edgedriver = True
1463+
if not auto_upgrade_edgedriver:
1464+
raise Exception(e.msg) # Not an obvious fix. Raise.
1465+
else:
1466+
pass # Try upgrading EdgeDriver to match Edge.
1467+
edge_version = e.msg.split(
1468+
"Current browser version is ")[1].split(' ')[0]
1469+
args = " ".join(sys.argv)
1470+
if ("-n" in sys.argv or " -n=" in args or args == "-c"):
1471+
import fasteners
1472+
1473+
edgedriver_fixing_lock = fasteners.InterProcessLock(
1474+
constants.MultiBrowser.CHROMEDRIVER_FIXING_LOCK
1475+
)
1476+
with edgedriver_fixing_lock:
1477+
if not _was_chromedriver_repaired(): # Works for Edge
1478+
_repair_edgedriver(edge_version)
1479+
_mark_chromedriver_repaired() # Works for Edge
1480+
else:
1481+
if not _was_chromedriver_repaired(): # Works for Edge
1482+
_repair_edgedriver(edge_version)
1483+
_mark_chromedriver_repaired() # Works for Edge
1484+
driver = Edge(
1485+
executable_path=LOCAL_EDGEDRIVER,
1486+
capabilities=capabilities,
1487+
)
1488+
return driver
14131489
elif browser_name == constants.Browser.SAFARI:
14141490
arg_join = " ".join(sys.argv)
14151491
if ("-n" in sys.argv) or (" -n=" in arg_join) or (arg_join == "-c"):

0 commit comments

Comments
 (0)