Skip to content

Instantly share code, notes, and snippets.

@thurask
Last active June 14, 2022 13:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thurask/1ae1d5df073f186692a3b02510cecdf1 to your computer and use it in GitHub Desktop.
Save thurask/1ae1d5df073f186692a3b02510cecdf1 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
"""Check Microsoft Edge Chromium webdriver."""
import argparse
import io
import os
import shutil
import subprocess
import zipfile
import requests
def _edgepath():
edf = shutil.which("msedgedriver")
if edf is None:
print("NO EDGE DRIVER FOUND IN PATH!")
raise SystemExit
return os.path.dirname(os.path.abspath(edf))
EDGEURL = "https://msedgedriver.azureedge.net"
EDGEPATH = _edgepath()
def get_local_edgedriver():
try:
rawver = subprocess.run(["msedgedriver", "--version"], capture_output=True).stdout
edgever = str(rawver).split(" (")[0].split(" ")[-1].strip()
except FileNotFoundError:
print("NO EDGE DRIVER FOUND IN PATH!")
raise SystemExit
return edgever
def get_remote_edgedriver(release):
inurl = remote_version_picker(release)
req = requests.get(inurl)
newver = req.text.strip()
return newver
def compare_edgedrivers(localver, remotever):
loc = tuple(localver.split("."))
rem = tuple(remotever.split("."))
sentinel = rem > loc
return sentinel
def remote_version_picker(release=None):
if release is None:
rel = "LATEST_STABLE"
elif "STABLE" in release.upper():
rel = "LATEST_STABLE"
elif "BETA" in release.upper():
rel = "LATEST_BETA"
elif "DEV" in release.upper():
rel = "LATEST_DEV"
elif "CANARY" in release.upper():
rel = "LATEST_CANARY"
elif release.isnumeric(): # LATEST_RELEASE_xx
rel = "LATEST_RELEASE_{0}".format(release)
rlx = "{0}/{1}".format(EDGEURL, rel)
return rlx
def construct_url(inver):
url = "{0}/{1}/edgedriver_win64.zip".format(EDGEURL, inver)
return url
def prep_edgefolder():
drvpath = os.path.join(EDGEPATH, "msedgedriver.exe")
if os.path.exists(drvpath):
os.remove(drvpath)
def get_webdriver(inurl):
req = requests.get(inurl)
with zipfile.ZipFile(io.BytesIO(req.content)) as zf:
zf.extract("msedgedriver.exe", path=EDGEPATH)
def main(remver=None, release=None, check=False):
locver = get_local_edgedriver()
if remver is None:
remver = get_remote_edgedriver(release)
if check:
print("LOCAL:\t{0}".format(locver))
print("REMOTE:\t{0}".format(remver))
else:
senti = compare_edgedrivers(locver, remver)
if senti:
drvurl = construct_url(remver)
prep_edgefolder()
get_webdriver(drvurl)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("remver", nargs="?", default=None, help="remote version")
parser.add_argument("-r", "--release", nargs="?", default=None, help="release")
parser.add_argument("-c", "--check", action="store_true", help="check")
args = parser.parse_args()
main(args.remver, args.release, args.check)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment