45 lines
1.5 KiB
Python
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) |