Skip to content

Commit f7a9d49

Browse files
committed
Add support for Chrome-for-Testing chromedrivers
1 parent c722f8f commit f7a9d49

File tree

1 file changed

+77
-26
lines changed

1 file changed

+77
-26
lines changed

seleniumbase/console_scripts/sb_install.py

Lines changed: 77 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -264,8 +264,6 @@ def main(override=None, intel_for_uc=None):
264264
).split(".")[0]
265265
if int(major_chrome_version) < 72:
266266
major_chrome_version = None
267-
elif int(major_chrome_version) > 114:
268-
major_chrome_version = "114"
269267
except Exception:
270268
major_chrome_version = None
271269
if major_chrome_version and major_chrome_version.isnumeric():
@@ -317,6 +315,7 @@ def main(override=None, intel_for_uc=None):
317315
"Cannot determine which version of chromedriver to download!"
318316
)
319317
found_chromedriver = False
318+
cft = False
320319
if get_latest or get_latest_minus_one:
321320
url_request = requests_get(last)
322321
if url_request.ok:
@@ -329,17 +328,59 @@ def main(override=None, intel_for_uc=None):
329328
url_req = requests_get(last)
330329
if url_req.ok:
331330
latest_version = url_req.text
332-
last = last + "_" + use_version
333-
url_request = requests_get(last)
334-
if url_request.ok:
335-
found_chromedriver = True
336-
use_version = url_request.text
337-
if use_version == latest_version:
338-
get_latest = True
331+
if int(use_version) < 115:
332+
last = last + "_" + use_version
333+
url_request = requests_get(last)
334+
if url_request.ok:
335+
found_chromedriver = True
336+
use_version = url_request.text
337+
if use_version == latest_version:
338+
get_latest = True
339+
else:
340+
cft = True
341+
cft_latest_vpm_url = (
342+
"https://googlechromelabs.github.io/"
343+
"chrome-for-testing/latest-versions-per-milestone.json"
344+
)
345+
url_request = requests_get(cft_latest_vpm_url)
346+
if url_request.ok:
347+
use_ver = use_version
348+
fver = url_request.json()["milestones"][use_ver]["version"]
349+
found_chromedriver = True
350+
use_version = str(fver)
351+
if use_version == latest_version:
352+
get_latest = True
339353
download_url = (
340354
"https://chromedriver.storage.googleapis.com/"
341355
"%s/%s" % (use_version, file_name)
342356
)
357+
plat_arch = ""
358+
if cft:
359+
if IS_MAC:
360+
if (
361+
IS_ARM_MAC
362+
and not intel_for_uc
363+
):
364+
platform_code = "mac-arm64"
365+
file_name = "chromedriver-mac-arm64.zip"
366+
else:
367+
platform_code = "mac-x64"
368+
file_name = "chromedriver-mac-x64.zip"
369+
elif IS_LINUX:
370+
platform_code = "linux64"
371+
file_name = "chromedriver-linux64.zip"
372+
elif IS_WINDOWS:
373+
if "64" in ARCH:
374+
platform_code = "win64"
375+
file_name = "chromedriver-win64.zip"
376+
else:
377+
platform_code = "win32"
378+
file_name = "chromedriver-win32.zip"
379+
plat_arch = file_name.split(".zip")[0]
380+
download_url = (
381+
"https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/"
382+
"%s/%s/%s" % (use_version, platform_code, file_name)
383+
)
343384
url_request = None
344385
if not found_chromedriver:
345386
url_req = requests_get(last)
@@ -351,7 +392,7 @@ def main(override=None, intel_for_uc=None):
351392
if found_chromedriver or url_request.ok:
352393
p_version = use_version
353394
p_version = c3 + use_version + cr
354-
if get_latest:
395+
if get_latest or cft:
355396
p_version = p_version + " " + c2 + "(Latest)" + cr
356397
else:
357398
n_l_s = "Not Latest"
@@ -736,24 +777,26 @@ def main(override=None, intel_for_uc=None):
736777
):
737778
for f_name in contents:
738779
if (
739-
name == "chromedriver"
780+
(name == "chromedriver" or name == "uc_driver")
740781
and (
741-
f_name == "chromedriver"
742-
or f_name == "chromedriver.exe"
782+
f_name.split("/")[-1] == "chromedriver"
783+
or f_name.split("/")[-1] == "chromedriver.exe"
743784
)
744785
):
745-
driver_name = f_name
786+
driver_name = f_name.split("/")[-1]
746787
driver_contents = [driver_name]
747788
# Remove existing version if exists
748789
new_file = os.path.join(downloads_folder, str(f_name))
749-
if (
750-
intel_for_uc
751-
and IS_MAC
752-
and new_file.endswith("drivers/chromedriver")
753-
):
754-
new_file = new_file.replace(
755-
"drivers/chromedriver", "drivers/uc_driver"
756-
)
790+
if intel_for_uc and IS_MAC:
791+
if new_file.endswith("drivers/chromedriver"):
792+
new_file = new_file.replace(
793+
"drivers/chromedriver", "drivers/uc_driver"
794+
)
795+
elif "drivers/%s/chromedriver" % plat_arch in new_file:
796+
new_file = new_file.replace(
797+
"drivers/%s/chromedriver" % plat_arch,
798+
"drivers/%s/uc_driver" % plat_arch
799+
)
757800
if "Driver" in new_file or "driver" in new_file:
758801
if os.path.exists(new_file):
759802
os.remove(new_file) # Technically the old file now
@@ -767,18 +810,26 @@ def main(override=None, intel_for_uc=None):
767810
os.remove(new_file)
768811
zipinfos = zip_ref.infolist()
769812
for zipinfo in zipinfos:
770-
if zipinfo.filename == "chromedriver":
813+
if zipinfo.filename.split("/")[-1] == "chromedriver":
771814
zipinfo.filename = "uc_driver"
772815
zip_ref.extract(zipinfo, downloads_folder)
773816
contents = zip_ref.namelist()
774817
if driver_contents:
775818
contents = driver_contents
776-
elif name == "chromedriver":
819+
elif name == "chromedriver" or name == "uc_driver":
777820
zipinfos = zip_ref.infolist()
778821
for zipinfo in zipinfos:
822+
if zipinfo.filename.split("/")[-1] == "chromedriver":
823+
zipinfo.filename = "chromedriver"
824+
elif zipinfo.filename.split("/")[-1] == (
825+
"chromedriver.exe"
826+
):
827+
zipinfo.filename = "chromedriver.exe"
779828
if (
780-
zipinfo.filename == "chromedriver"
781-
or zipinfo.filename == "chromedriver.exe"
829+
zipinfo.filename.split("/")[-1] == "chromedriver"
830+
or zipinfo.filename.split("/")[-1] == (
831+
"chromedriver.exe"
832+
)
782833
):
783834
zip_ref.extract(zipinfo, downloads_folder)
784835
contents = zip_ref.namelist()

0 commit comments

Comments
 (0)