Browse Source

proper chrome version extraction

pull/105/head
Wesley Kerfoot 4 years ago
parent
commit
8ef207441c
  1. 3
      deletefb/exceptions.py
  2. 29
      deletefb/tools/chrome_driver.py

3
deletefb/exceptions.py

@ -1,2 +1,5 @@
class UnknownOSException(Exception):
pass
class ChromeError(Exception):
pass

29
deletefb/tools/chrome_driver.py

@ -1,4 +1,4 @@
from ..exceptions import UnknownOSException
from ..exceptions import UnknownOSException, ChromeError
from .common import NO_CHROME_DRIVER
from clint.textui import puts, colored
from selenium import webdriver
@ -10,6 +10,7 @@ import os, sys, stat, platform
import progressbar
import re
import zipfile
import requests
def extract_zip(filename):
"""
@ -41,18 +42,27 @@ def setup_selenium(driver_path, options):
# Configures selenium to use a custom path
return webdriver.Chrome(executable_path=driver_path, options=options)
# TODO Merge these two into one
def parse_version(output):
"""
Attempt to extract version number from chrome version string.
"""
return [c for c in re.split('([0-9]+)\.?', output.decode("utf-8")) if all(d.isdigit() for d in c) and c][0]
def get_chrome_version(chrome_binary_path=None):
"""
Extract the chrome major version.
"""
driver_locations = [which(loc) for loc in ["google-chrome", "google-chrome-stable", "chromium", "chrome.exe"]]
for location in driver_locations:
print(location)
if location:
version = check_output([location, "--version"]).strip()
# TODO need to reliably parse this output somehow
return parse_version(check_output([location, "--version"]).strip())
return None
def construct_driver_url(chrome_binary_path=None):
"""
Construct a URL to download the Chrome Driver
Construct a URL to download the Chrome Driver.
"""
platform_string = platform.system()
@ -62,6 +72,15 @@ def construct_driver_url(chrome_binary_path=None):
"Linux" : "https://chromedriver.storage.googleapis.com/{0}/chromedriver_linux64.zip"
}
version = get_chrome_version()
if version is None:
raise ChromeError("Chrome version not found")
latest_release_url = "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_{0}".format(version)
return chrome_drivers.get(platform_string).format(requests.get(latest_release_url).text)
# First, construct a LATEST_RELEASE URL using Chrome's major version number.
# For example, with Chrome version 73.0.3683.86, use URL "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_73".
# Try to download a small file from this URL. If it successful, the file contains the ChromeDriver version to use.

Loading…
Cancel
Save