-
-
Notifications
You must be signed in to change notification settings - Fork 456
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
allow downloading of recent versions of chrome #537
Changes from all commits
2b86ad1
1abbd90
185e872
27527b8
0038a9c
6334866
802af19
dfe4626
9617cf3
5201ef7
2fdf352
70019c1
d5ef079
460022b
a183a7a
f696681
b160b98
51c3aa7
e5c93cd
12b8f50
fce4afe
03efd0a
75154f0
a5bb766
28de1b6
efdc9c6
887b53c
f360dc1
9fde87a
84272a8
841cc09
e9c7f67
5e742c1
2617c16
6355e71
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,6 +3,7 @@ | |
from webdriver_manager.core.driver import Driver | ||
from webdriver_manager.core.logger import log | ||
from webdriver_manager.core.utils import ChromeType, is_arch, is_mac_os | ||
import re | ||
|
||
|
||
class ChromeDriver(Driver): | ||
|
@@ -45,26 +46,28 @@ def get_driver_download_url(self): | |
if version.parse(driver_version_to_download) < version.parse("106.0.5249.61"): | ||
os_type = os_type.replace("mac_arm64", "mac64_m1") | ||
|
||
if version.parse(driver_version_to_download) >= version.parse("113"): | ||
if version.parse(driver_version_to_download) >= version.parse("115"): | ||
if os_type == "mac64": | ||
os_type = "mac-x64" | ||
if os_type == "mac_x64": | ||
os_type = "mac-x64" | ||
if os_type in ["mac_64", "mac64_m1", "mac_arm64"]: | ||
os_type = "mac-arm64" | ||
|
||
modern_version_url = self.get_url_for_version_and_platform(driver_version_to_download, os_type) | ||
log(f"Modern chrome version {modern_version_url}") | ||
return modern_version_url | ||
|
||
if modern_version_url != None: | ||
log(f"Modern chrome version {modern_version_url}") | ||
return modern_version_url | ||
return f"{self._url}/{driver_version_to_download}/{self.get_name()}_{os_type}.zip" | ||
|
||
def get_browser_type(self): | ||
return self._browser_type | ||
|
||
def get_latest_release_version(self): | ||
determined_browser_version = self.get_browser_version_from_os() | ||
log(f"Get LATEST {self._name} version for {self._browser_type}") | ||
if version.parse(determined_browser_version) >= version.parse("113"): | ||
return determined_browser_version | ||
|
||
if isinstance(determined_browser_version, str): | ||
if version.parse(determined_browser_version) >= version.parse("115"): | ||
return determined_browser_version | ||
|
||
latest_release_url = ( | ||
self._latest_release_url | ||
|
@@ -74,16 +77,47 @@ def get_latest_release_version(self): | |
resp = self._http_client.get(url=latest_release_url) | ||
return resp.text.rstrip() | ||
|
||
def get_url_for_version_and_platform(self, browser_version, platform): | ||
url = "https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json" | ||
response = self._http_client.get(url) | ||
data = response.json() | ||
versions = data["versions"] | ||
def select_url_from_versions(self, browser_version, versions, platform): | ||
for v in versions: | ||
if v["version"] == browser_version: | ||
downloads = v["downloads"]["chromedriver"] | ||
for d in downloads: | ||
if d["platform"] == platform: | ||
return d["url"] | ||
return None | ||
|
||
def get_url_for_version_and_platform(self, browser_version, platform): | ||
url = "https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json" | ||
response = self._http_client.get(url) | ||
data = response.json() | ||
versions = data["versions"] | ||
url = self.select_url_from_versions(browser_version, versions, platform) | ||
if url: | ||
return url | ||
elif len(browser_version) < 4: | ||
release_version = self.get_latest_release_for_version(browser_version) | ||
modern_version_url = self.select_url_from_versions(release_version, versions, platform) | ||
if modern_version_url != None: | ||
return modern_version_url | ||
elif re.search(r"^\d+\.\d+\.\d+$", browser_version): | ||
release_version = self.get_latest_patch_version_for_build_version(build_version=browser_version) | ||
modern_version_url = self.select_url_from_versions(release_version, versions, os_type) | ||
if modern_version_url != None: | ||
return modern_version_url | ||
raise Exception(f"No such driver version {browser_version} for {platform}") | ||
|
||
def get_latest_release_for_version(self, version): | ||
url = "https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions.json" | ||
response = self._http_client.get(url) | ||
data = response.json() | ||
versions =[v["version"] for v in data["channels"].values()] | ||
for v in versions: | ||
if version in v: | ||
return v | ||
return None | ||
|
||
def get_latest_patch_version_for_build_version(self, build_version): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @SergeyPirogov Here is the function for latest release by build version ie. 115.0.5735 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. So, why do we need it? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @SergeyPirogov The old LATEST_RELEASE url supported those style lookups. ie. https://chromedriver.storage.googleapis.com/LATEST_RELEASE_113 and https://chromedriver.storage.googleapis.com/LATEST_RELEASE_114.0.5735. It was suggested we retain that for versions over 115. Without that, users will have to pass in the full browser version ie. version="114.0.5735.90", which can change frequently. Either way, I'm fine including for backwards compatibility, I'm fine with removing for simplicity and add an exception that explains as suggested by you There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'd postpone this, because what I see know is that browser version is equal to the one mentioned in their driver website. Moreover I think that fix should be applied in method get_url_for_version_and_platform |
||
url = "https://googlechromelabs.github.io/chrome-for-testing/latest-patch-versions-per-build.json" | ||
response = self._http_client.get(url) | ||
data = response.json() | ||
return data["builds"][build_version]["version"] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@SergeyPirogov Here is the function for latest release by short version ie. 115