Last active
June 14, 2022 13:10
-
-
Save thurask/1ae1d5df073f186692a3b02510cecdf1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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