Files
arcli/driver.py
T

45 lines
1.5 KiB
Python

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)