From 1c3b5f628b310c64f0da36247f5044d69b97d772 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Sat, 26 Oct 2019 22:13:41 +0200 Subject: digikey: Better webdriver creation. Making the instantiation of the web driver a bit more generic, starting on making it possible to try out other browsers. --- src/ee/_utils.py | 19 +++++++++++++++++++ src/ee/digikey/__init__.py | 11 +++++------ 2 files changed, 24 insertions(+), 6 deletions(-) (limited to 'src/ee') diff --git a/src/ee/_utils.py b/src/ee/_utils.py index 5960161..0aa12ae 100644 --- a/src/ee/_utils.py +++ b/src/ee/_utils.py @@ -79,6 +79,25 @@ def maybe_cache(path: Optional[Path], **kwargs) -> HttpCache: return HttpCache(path, **kwargs) if path is not None else EmptyHttpCache() +def get_web_driver(): # selenium.webdriver.remote.webdriver.WebDriver + import selenium.common.exceptions + from selenium import webdriver + + drivers = [ + ("chrome", webdriver.Chrome), + # ("firefox", webdriver.Firefox), + # ("webkit", webdriver.WebKitGTK), + ] + + for key, constructor in drivers: + try: + return constructor() + except selenium.common.exceptions.WebDriverException: + pass + + return webdriver.Chrome() + + def gen_rst_table(header: List[str], data: List[List[str]]): column_widths = [] for i in range(len(header)): diff --git a/src/ee/digikey/__init__.py b/src/ee/digikey/__init__.py index cc57771..a9d49cd 100644 --- a/src/ee/digikey/__init__.py +++ b/src/ee/digikey/__init__.py @@ -11,10 +11,10 @@ from typing import List, Optional from urllib.parse import urlparse, parse_qs from lxml import html -from selenium import webdriver +from selenium.webdriver.remote.webdriver import WebDriver import ee._utils -from ee import EeException +from ee import EeException, _utils from ee.money import Money, get_default_context from ee.part import Category from ee.tools import mk_parents @@ -261,7 +261,7 @@ class DigikeyClient(object): self.baseurl = baseurl self.on_download = on_download or self.__nop self.cache = ee._utils.maybe_cache(cache_dir) - self._driver: Optional[webdriver.Chrome] = None + self._driver: Optional[WebDriver] = None def search(self, query: str) -> str: return self.product_search(query) @@ -344,10 +344,9 @@ class DigikeyClient(object): return self._req(url, cache_key, params) @property - def driver(self) -> webdriver.Chrome: + def driver(self) -> WebDriver: if self._driver is None: - options = webdriver.ChromeOptions() - self._driver = webdriver.Chrome(chrome_options=options) + self._driver = _utils.get_web_driver() return self._driver -- cgit v1.2.3