proxy设置移到drission

This commit is contained in:
g1879 2020-06-17 17:40:00 +08:00
parent de51562194
commit 4ffa174e5a
3 changed files with 29 additions and 17 deletions

View File

@ -22,18 +22,20 @@ class Drission(object):
"""Drission类整合了WebDriver对象和HTLSession对象可按要求创建、关闭及同步cookies"""
def __init__(self, driver_options: Union[dict, Options] = None, session_options: dict = None,
driver_path: str = None, ini_path: str = None):
driver_path: str = None, ini_path: str = None, proxy: dict = None):
"""初始化配置信息但不生成session和driver实例
:param driver_options: chrome设置Options类或设置字典
:param session_options: session设置
:param driver_path: chromedriver路径如为空则为'chromedriver'
:param ini_path: ini文件路径'
:param proxy: 代理设置
"""
self._session = None
self._driver = None
om = OptionsManager(ini_path)
self._session_options = session_options or om.get_option('session_options')
self._driver_options = _chrome_options_to_dict(driver_options) or om.get_option('chrome_options')
self._proxy = proxy
if driver_path:
self._driver_path = driver_path
@ -43,7 +45,7 @@ class Drission(object):
self._driver_path = 'chromedriver'
@property
def session(self):
def session(self) -> HTMLSession:
"""获取HTMLSession对象"""
if self._session is None:
self._session = HTMLSession()
@ -52,17 +54,21 @@ class Drission(object):
for i in attrs:
if i in self._session_options:
exec(f'self._session.{i} = self._session_options["{i}"]')
if self._proxy:
self._session.proxies = self._proxy
return self._session
@property
def driver(self):
def driver(self) -> WebDriver:
"""获取WebDriver对象按传入配置信息初始化"""
if self._driver is None:
if isinstance(self._driver_options, dict):
options = _dict_to_chrome_options(self._driver_options)
else:
raise KeyError('Driver options invalid')
if self._proxy:
options.add_argument(f'--proxy-server={self._proxy["http"]}')
self._driver = webdriver.Chrome(self._driver_path, options=options)
@ -89,6 +95,25 @@ class Drission(object):
def session_options(self, value: dict):
self._session_options = value
@property
def proxy(self) -> Union[None, dict]:
return self._proxy
@proxy.setter
def proxy(self, proxies: dict = None):
self._proxy = proxies
if self._session:
self._session.proxies = proxies
if self._driver:
cookies = self._driver.get_cookies()
url = self._driver.current_url
self._driver.quit()
self._driver = None
self._driver = self.driver
self._driver.get(url)
for cookie in cookies:
self._driver.add_cookie(cookie)
def cookies_to_session(self, copy_user_agent: bool = False, driver: WebDriver = None, session: Session = None) \
-> None:
"""把driver的cookies复制到session"""

View File

@ -45,7 +45,6 @@ class MixPage(Null, SessionPage, DriverPage):
self._driver = None
self._url = None
self._response = None
self._proxies = None
self.timeout = timeout
self._url_available = None
self._mode = mode
@ -111,6 +110,7 @@ class MixPage(Null, SessionPage, DriverPage):
每次访问时切换到d模式主要用于独有函数及外部调用
:return:selenium的WebDriver对象
"""
# TODO: 改成每次获取drission的driver
if self._driver is None:
self._driver = self._drission.driver
self.change_mode('d')

View File

@ -29,7 +29,6 @@ class SessionPage(object):
self._url = None
self._url_available = None
self._response = None
self._proxies = None
@property
def session(self) -> HTMLSession:
@ -54,14 +53,6 @@ class SessionPage(object):
"""当前session的cookies"""
return self.session.cookies.get_dict()
@property
def proxies(self) -> dict:
return self._proxies
@proxies.setter
def proxies(self, value: dict):
self._proxies = value
@property
def title(self) -> str:
"""获取网页title"""
@ -70,7 +61,6 @@ class SessionPage(object):
@property
def html(self) -> str:
"""获取元素innerHTML如未指定元素则获取所有源代码"""
# return unescape(self.response.html.raw_html.replace(b'\x08', b'').decode()).replace('\xa0', ' ')
return self.response.html.html
def ele(self, loc_or_ele: Union[tuple, str, SessionElement], mode: str = None, show_errmsg: bool = False) \
@ -217,9 +207,6 @@ class SessionPage(object):
if self._url:
kwargs['headers']['Referer'] = self._url
if 'proxies' not in kwargs_set and self._proxies:
kwargs['proxies'] = self.proxies
if 'timeout' not in kwargs_set:
kwargs['timeout'] = self.timeout