import socket from selenium import webdriver from selenium.common.exceptions import NoSuchFrameException, NoSuchWindowException, RemoteDriverServerException, TimeoutException, WebDriverException #from selenium.webdriver.common.desired_capabilities import DesiredCapabilities #DRIVER_CAPS = DesiredCapabilities.CHROME #DRIVER_CAPS['pageLoadStrategy'] = 'eager' DEAD_DRIVER_TUPLE = (NoSuchWindowException, NoSuchFrameException, RemoteDriverServerException, WebDriverException, TimeoutException, socket.error) PAGE_LOAD_STRATEGY = 'normal' def get_driver(new=False, pageLoadStrategy=None): global driver if new: return make_driver(pageLoadStrategy) else: try: assert(driver) except (AssertionError, NameError): driver = make_driver(pageLoadStrategy) return driver def make_driver(pageLoadStrategy=None): if pageLoadStrategy is None: pageLoadStrategy = PAGE_LOAD_STRATEGY return webdriver.Chrome(desired_capabilities={'pageLoadStrategy':pageLoadStrategy}) class Driven(object): def __init__(self, new_driver=False, **kwargs): self.driver = get_driver(new_driver) for k,v in kwargs.items(): setattr(self, k, v) def get(self, url): try: self.driver.get(url) return self.driver.current_url except DEAD_DRIVER_TUPLE: self.restart_driver() self.get(url) def restart_driver(self): try: self.driver.quit() except: pass self.driver = get_driver(new=True)