Skip to content

Commit d3735d0

Browse files
committed
Allow version input with "seleniumbase install chromedriver"
1 parent 6c11ace commit d3735d0

File tree

2 files changed

+58
-30
lines changed

2 files changed

+58
-30
lines changed

seleniumbase/console_scripts/run.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def show_basic_usage():
3737
print("")
3838
print('Usage: "seleniumbase [COMMAND] [PARAMETERS]"')
3939
print("Commands:")
40-
print(" install [DRIVER_NAME]")
40+
print(" install [DRIVER_NAME] [OPTIONS]")
4141
print(" mkdir [NEW_TEST_DIRECTORY_NAME]")
4242
print(" convert [PYTHON_WEBDRIVER_UNITTEST_FILE]")
4343
print(" extract-objects [SELENIUMBASE_PYTHON_FILE]")
@@ -55,11 +55,18 @@ def show_install_usage():
5555
print(" ** install **")
5656
print("")
5757
print(" Usage:")
58-
print(" seleniumbase install [DRIVER_NAME]")
58+
print(" seleniumbase install [DRIVER_NAME] [OPTIONS]")
5959
print(" (Drivers: chromedriver, geckodriver, edgedriver")
6060
print(" iedriver, operadriver)")
61+
print(" Options:")
62+
print(" VERSION - Specify the version (For Chromedriver ONLY).")
63+
print(" (Default Chromedriver version = 2.44)")
64+
print(' Use "latest" to get the latest Chromedriver.')
6165
print(" Example:")
6266
print(" seleniumbase install chromedriver")
67+
print(" seleniumbase install chromedriver 76.0.3809.126")
68+
print(" seleniumbase install chromedriver latest")
69+
print(" seleniumbase install geckodriver")
6370
print(" Output:")
6471
print(" Installs the specified webdriver.")
6572
print(" (chromedriver is required for Chrome automation)")

seleniumbase/console_scripts/sb_install.py

Lines changed: 49 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,16 @@
33
44
Usage:
55
seleniumbase install {chromedriver|geckodriver|edgedriver|
6-
iedriver|operadriver}
6+
iedriver|operadriver} [OPTIONS]
7+
Options:
8+
VERSION - Specify the version (For Chromedriver ONLY)
9+
(Default Chromedriver version = 2.44)
10+
Use "latest" to get the latest Chromedriver.
11+
Example:
12+
seleniumbase install chromedriver
13+
seleniumbase install chromedriver 76.0.3809.126
14+
seleniumbase install chromedriver latest
15+
seleniumbase install geckodriver
716
Output:
817
Installs the specified webdriver.
918
(chromedriver is required for Chrome automation)
@@ -24,16 +33,24 @@
2433
from seleniumbase import drivers # webdriver storage folder for SeleniumBase
2534
urllib3.disable_warnings()
2635
DRIVER_DIR = os.path.dirname(os.path.realpath(drivers.__file__))
36+
DEFAULT_CHROMEDRIVER_VERSION = "2.44"
2737

2838

2939
def invalid_run_command():
3040
exp = (" ** install **\n\n")
3141
exp += " Usage:\n"
32-
exp += " seleniumbase install [DRIVER_NAME]\n"
42+
exp += " seleniumbase install [DRIVER_NAME] [OPTIONS]\n"
3343
exp += " (Drivers: chromedriver, geckodriver, edgedriver,\n"
3444
exp += " iedriver, operadriver)\n"
45+
exp += " Options:\n"
46+
exp += " VERSION - Specify the version (For Chromedriver ONLY)."
47+
exp += " (Default Chromedriver version = 2.44)"
48+
exp += ' Use "latest" to get the latest Chromedriver.'
3549
exp += " Example:\n"
3650
exp += " seleniumbase install chromedriver\n"
51+
exp += " seleniumbase install chromedriver 76.0.3809.126\n"
52+
exp += " seleniumbase install chromedriver latest\n"
53+
exp += " seleniumbase install geckodriver\n"
3754
exp += " Output:\n"
3855
exp += " Installs the specified webdriver.\n"
3956
exp += " (chromedriver is required for Chrome automation)\n"
@@ -56,11 +73,11 @@ def main():
5673
num_args = len(sys.argv)
5774
if sys.argv[0].split('/')[-1].lower() == "seleniumbase" or (
5875
sys.argv[0].split('\\')[-1].lower() == "seleniumbase"):
59-
if num_args < 3 or num_args > 3:
76+
if num_args < 3 or num_args > 4:
6077
invalid_run_command()
6178
else:
6279
invalid_run_command()
63-
name = sys.argv[num_args - 1].lower()
80+
name = sys.argv[2].lower()
6481

6582
file_name = None
6683
download_url = None
@@ -71,52 +88,56 @@ def main():
7188
inner_folder = None
7289

7390
if name == "chromedriver":
74-
latest_version = "2.44" # It's not the latest, but most compatible
91+
use_version = DEFAULT_CHROMEDRIVER_VERSION
92+
get_latest = False
93+
if num_args == 4:
94+
use_version = sys.argv[3]
95+
if use_version.lower() == "latest":
96+
get_latest = True
7597
if "darwin" in sys_plat:
7698
file_name = "chromedriver_mac64.zip"
7799
elif "linux" in sys_plat:
78-
latest_version = "2.44" # Linux machines may need the old driver
79100
file_name = "chromedriver_linux64.zip"
80101
elif "win32" in sys_plat or "win64" in sys_plat or "x64" in sys_plat:
81102
file_name = "chromedriver_win32.zip" # Works for win32 / win_x64
82103
else:
83104
raise Exception("Cannot determine which version of Chromedriver "
84105
"to download!")
85-
download_url = ("http://chromedriver.storage.googleapis.com/"
86-
"%s/%s" % (latest_version, file_name))
87-
# Forcing Chromedriver v2.40 for now, even though it's not the latest.
88-
get_latest = False
106+
found_chromedriver = False
89107
if get_latest:
90108
last = "http://chromedriver.storage.googleapis.com/LATEST_RELEASE"
91-
print('\nLocating the latest version of Chromedriver...')
92-
latest_version = requests.get(last).text
93-
if not requests.get(download_url).ok:
94-
fallback_version = "2.44"
95-
download_url = ("http://chromedriver.storage.googleapis.com/"
96-
"%s/%s" % (fallback_version, file_name))
97-
else:
98-
download_url = ("http://chromedriver.storage.googleapis.com/"
99-
"%s/%s" % (latest_version, file_name))
100-
print("Found %s" % download_url)
109+
url_request = requests.get(last)
110+
if url_request.ok:
111+
found_chromedriver = True
112+
use_version = url_request.text
113+
download_url = ("http://chromedriver.storage.googleapis.com/"
114+
"%s/%s" % (use_version, file_name))
115+
url_request = None
116+
if not found_chromedriver:
117+
url_request = requests.get(download_url)
118+
if found_chromedriver or url_request.ok:
119+
print("\nChromedriver version for download = %s" % use_version)
120+
else:
121+
raise Exception("Could not find Chromedriver to download!\n")
101122
elif name == "geckodriver" or name == "firefoxdriver":
102-
latest_version = "v0.24.0"
123+
use_version = "v0.24.0"
103124
if "darwin" in sys_plat:
104-
file_name = "geckodriver-%s-macos.tar.gz" % latest_version
125+
file_name = "geckodriver-%s-macos.tar.gz" % use_version
105126
elif "linux" in sys_plat:
106127
arch = platform.architecture()[0]
107128
if "64" in arch:
108-
file_name = "geckodriver-%s-linux64.tar.gz" % latest_version
129+
file_name = "geckodriver-%s-linux64.tar.gz" % use_version
109130
else:
110-
file_name = "geckodriver-%s-linux32.tar.gz" % latest_version
131+
file_name = "geckodriver-%s-linux32.tar.gz" % use_version
111132
elif "win32" in sys_plat or "win64" in sys_plat or "x64" in sys_plat:
112-
file_name = "geckodriver-%s-win64.zip" % latest_version
133+
file_name = "geckodriver-%s-win64.zip" % use_version
113134
else:
114135
raise Exception("Cannot determine which version of Geckodriver "
115136
"(Firefox Driver) to download!")
116137

117138
download_url = ("https://github.com/mozilla/geckodriver/"
118139
"releases/download/"
119-
"%s/%s" % (latest_version, file_name))
140+
"%s/%s" % (use_version, file_name))
120141
elif name == "edgedriver" or name == "microsoftwebdriver":
121142
name = "edgedriver"
122143
version_code = "F/8/A/F8AF50AB-3C3A-4BC4-8773-DC27B32988DD"
@@ -141,7 +162,7 @@ def main():
141162
"%s/%s" % (major_version, file_name))
142163
elif name == "operadriver" or name == "operachromiumdriver":
143164
name = "operadriver"
144-
latest_version = "v.2.40"
165+
use_version = "v.2.40"
145166
if "darwin" in sys_plat:
146167
file_name = "operadriver_mac64.zip"
147168
platform_code = "mac64"
@@ -176,7 +197,7 @@ def main():
176197

177198
download_url = ("https://github.com/operasoftware/operachromiumdriver/"
178199
"releases/download/"
179-
"%s/%s" % (latest_version, file_name))
200+
"%s/%s" % (use_version, file_name))
180201
else:
181202
invalid_run_command()
182203

0 commit comments

Comments
 (0)