56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
from webdriver_manager.core.driver import Driver
|
|
from webdriver_manager.core.logger import log
|
|
|
|
|
|
class OperaDriver(Driver):
|
|
def __init__(
|
|
self,
|
|
name,
|
|
driver_version,
|
|
url,
|
|
latest_release_url,
|
|
opera_release_tag,
|
|
http_client,
|
|
os_system_manager
|
|
):
|
|
super(OperaDriver, self).__init__(
|
|
name,
|
|
driver_version,
|
|
url,
|
|
latest_release_url,
|
|
http_client,
|
|
os_system_manager
|
|
)
|
|
self.opera_release_tag = opera_release_tag
|
|
|
|
def get_latest_release_version(self) -> str:
|
|
resp = self._http_client.get(
|
|
url=self.latest_release_url,
|
|
headers=self.auth_header
|
|
)
|
|
return resp.json()["tag_name"]
|
|
|
|
def get_driver_download_url(self, os_type) -> str:
|
|
"""Like https://github.com/operasoftware/operachromiumdriver/releases/download/v.2.45/operadriver_linux64.zip"""
|
|
driver_version_to_download = self.get_driver_version_to_download()
|
|
log(f"Getting latest opera release info for {driver_version_to_download}")
|
|
resp = self._http_client.get(
|
|
url=self.tagged_release_url(driver_version_to_download),
|
|
headers=self.auth_header
|
|
)
|
|
assets = resp.json()["assets"]
|
|
name = "{0}_{1}".format(self.get_name(), os_type)
|
|
output_dict = [
|
|
asset for asset in assets if asset["name"].startswith(name)]
|
|
return output_dict[0]["browser_download_url"]
|
|
|
|
@property
|
|
def latest_release_url(self):
|
|
return self._latest_release_url
|
|
|
|
def tagged_release_url(self, version):
|
|
return self.opera_release_tag.format(version)
|
|
|
|
def get_browser_type(self):
|
|
return "opera"
|