Skip to content

Commit 502f4f6

Browse files
authored
Merge pull request #1033 from seleniumbase/edge-on-linux
Support Edge automation on Linux with msedgedriver
2 parents 708a6d9 + eac3148 commit 502f4f6

File tree

6 files changed

+135
-19
lines changed

6 files changed

+135
-19
lines changed

mkdocs_build/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
regex>=2021.10.21
1+
regex>=2021.10.23
22
tqdm>=4.62.3
33
livereload==2.6.3;python_version>="3.6"
44
joblib==1.1.0;python_version>="3.6"

requirements.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ packaging>=21.0;python_version>="3.6"
55
typing-extensions>=3.10.0.2
66
setuptools>=44.1.1;python_version<"3.5"
77
setuptools>=50.3.2;python_version>="3.5" and python_version<"3.6"
8-
setuptools>=58.2.0;python_version>="3.6"
8+
setuptools>=58.3.0;python_version>="3.6"
99
setuptools-scm==5.0.2;python_version<"3.6"
1010
setuptools-scm>=6.3.2;python_version>="3.6"
1111
tomli>=1.2.1;python_version>="3.6"
@@ -97,7 +97,7 @@ platformdirs==2.4.0;python_version>="3.6"
9797
pathlib2==2.3.5;python_version<"3.5"
9898
importlib-metadata==2.0.0;python_version<"3.5"
9999
importlib-metadata==2.1.1;python_version>="3.5" and python_version<"3.6"
100-
virtualenv>=20.8.1
100+
virtualenv>=20.9.0
101101
pymysql==0.10.1;python_version<"3.6"
102102
pymysql==1.0.2;python_version>="3.6"
103103
pyotp==2.6.0

seleniumbase/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
# seleniumbase package
2-
__version__ = "2.0.5"
2+
__version__ = "2.0.6"

seleniumbase/console_scripts/sb_install.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ def main(override=None):
298298
name = "edgedriver"
299299
last = (
300300
"https://msedgewebdriverstorage.blob.core.windows.net"
301-
"/edgewebdriver/LATEST_STABLE"
301+
"/edgewebdriver/LATEST_BETA"
302302
)
303303
get_latest = False
304304
if num_args == 3:
@@ -330,12 +330,13 @@ def main(override=None):
330330
file_name = "edgedriver_win32.zip"
331331
elif "darwin" in sys_plat:
332332
file_name = "edgedriver_mac64.zip"
333+
elif "linux" in sys_plat:
334+
file_name = "edgedriver_linux64.zip"
333335
else:
334336
raise Exception(
335-
"Sorry! Microsoft WebDriver / EdgeDriver is "
336-
"only for Windows or Mac operating systems!"
337+
"Cannot determine which version of EdgeDriver to download!"
337338
)
338-
download_url = "https://msedgedriver.azureedge.net/" "%s/%s" % (
339+
download_url = "https://msedgedriver.azureedge.net/%s/%s" % (
339340
use_version,
340341
file_name,
341342
)

seleniumbase/core/browser_launcher.py

Lines changed: 124 additions & 9 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"):
@@ -1628,7 +1704,46 @@ def get_local_driver(
16281704
else: # Running headless on Linux
16291705
try:
16301706
return webdriver.Chrome(options=chrome_options)
1631-
except Exception:
1707+
except Exception as e:
1708+
auto_upgrade_chromedriver = False
1709+
if "This version of ChromeDriver only supports" in e.msg:
1710+
auto_upgrade_chromedriver = True
1711+
elif "Chrome version must be between" in e.msg:
1712+
auto_upgrade_chromedriver = True
1713+
if auto_upgrade_chromedriver:
1714+
args = " ".join(sys.argv)
1715+
if (
1716+
"-n" in sys.argv
1717+
or " -n=" in args
1718+
or args == "-c"
1719+
):
1720+
import fasteners
1721+
1722+
chromedr_fixing_lock = fasteners.InterProcessLock(
1723+
constants.MultiBrowser.CHROMEDRIVER_FIXING_LOCK
1724+
)
1725+
with chromedr_fixing_lock:
1726+
if not _was_chromedriver_repaired():
1727+
try:
1728+
_repair_chromedriver(
1729+
chrome_options, chrome_options
1730+
)
1731+
_mark_chromedriver_repaired()
1732+
except Exception:
1733+
pass
1734+
else:
1735+
if not _was_chromedriver_repaired():
1736+
try:
1737+
_repair_chromedriver(
1738+
chrome_options, chrome_options
1739+
)
1740+
except Exception:
1741+
pass
1742+
_mark_chromedriver_repaired()
1743+
try:
1744+
return webdriver.Chrome(options=chrome_options)
1745+
except Exception:
1746+
pass
16321747
# Use the virtual display on Linux during headless errors
16331748
logging.debug(
16341749
"\nWarning: Chrome failed to launch in"

setup.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@
121121
"typing-extensions>=3.10.0.2",
122122
'setuptools>=44.1.1;python_version<"3.5"',
123123
'setuptools>=50.3.2;python_version>="3.5" and python_version<"3.6"',
124-
'setuptools>=58.2.0;python_version>="3.6"',
124+
'setuptools>=58.3.0;python_version>="3.6"',
125125
'setuptools-scm==5.0.2;python_version<"3.6"',
126126
'setuptools-scm>=6.3.2;python_version>="3.6"',
127127
'tomli>=1.2.1;python_version>="3.6"',
@@ -213,7 +213,7 @@
213213
'pathlib2==2.3.5;python_version<"3.5"', # Sync with "virtualenv"
214214
'importlib-metadata==2.0.0;python_version<"3.5"',
215215
'importlib-metadata==2.1.1;python_version>="3.5" and python_version<"3.6"', # noqa: E501
216-
"virtualenv>=20.8.1", # Sync with importlib-metadata and pathlib2
216+
"virtualenv>=20.9.0", # Sync with importlib-metadata and pathlib2
217217
'pymysql==0.10.1;python_version<"3.6"',
218218
'pymysql==1.0.2;python_version>="3.6"',
219219
"pyotp==2.6.0",

0 commit comments

Comments
 (0)