mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
proxy设置移到drission
This commit is contained in:
parent
de51562194
commit
4ffa174e5a
@ -22,18 +22,20 @@ class Drission(object):
|
|||||||
"""Drission类整合了WebDriver对象和HTLSession对象,可按要求创建、关闭及同步cookies"""
|
"""Drission类整合了WebDriver对象和HTLSession对象,可按要求创建、关闭及同步cookies"""
|
||||||
|
|
||||||
def __init__(self, driver_options: Union[dict, Options] = None, session_options: dict = None,
|
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实例
|
"""初始化配置信息,但不生成session和driver实例
|
||||||
:param driver_options: chrome设置,Options类或设置字典
|
:param driver_options: chrome设置,Options类或设置字典
|
||||||
:param session_options: session设置
|
:param session_options: session设置
|
||||||
:param driver_path: chromedriver路径,如为空,则为'chromedriver'
|
:param driver_path: chromedriver路径,如为空,则为'chromedriver'
|
||||||
:param ini_path: ini文件路径'
|
:param ini_path: ini文件路径'
|
||||||
|
:param proxy: 代理设置
|
||||||
"""
|
"""
|
||||||
self._session = None
|
self._session = None
|
||||||
self._driver = None
|
self._driver = None
|
||||||
om = OptionsManager(ini_path)
|
om = OptionsManager(ini_path)
|
||||||
self._session_options = session_options or om.get_option('session_options')
|
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._driver_options = _chrome_options_to_dict(driver_options) or om.get_option('chrome_options')
|
||||||
|
self._proxy = proxy
|
||||||
|
|
||||||
if driver_path:
|
if driver_path:
|
||||||
self._driver_path = driver_path
|
self._driver_path = driver_path
|
||||||
@ -43,7 +45,7 @@ class Drission(object):
|
|||||||
self._driver_path = 'chromedriver'
|
self._driver_path = 'chromedriver'
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def session(self):
|
def session(self) -> HTMLSession:
|
||||||
"""获取HTMLSession对象"""
|
"""获取HTMLSession对象"""
|
||||||
if self._session is None:
|
if self._session is None:
|
||||||
self._session = HTMLSession()
|
self._session = HTMLSession()
|
||||||
@ -52,17 +54,21 @@ class Drission(object):
|
|||||||
for i in attrs:
|
for i in attrs:
|
||||||
if i in self._session_options:
|
if i in self._session_options:
|
||||||
exec(f'self._session.{i} = self._session_options["{i}"]')
|
exec(f'self._session.{i} = self._session_options["{i}"]')
|
||||||
|
if self._proxy:
|
||||||
|
self._session.proxies = self._proxy
|
||||||
|
|
||||||
return self._session
|
return self._session
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def driver(self):
|
def driver(self) -> WebDriver:
|
||||||
"""获取WebDriver对象,按传入配置信息初始化"""
|
"""获取WebDriver对象,按传入配置信息初始化"""
|
||||||
if self._driver is None:
|
if self._driver is None:
|
||||||
if isinstance(self._driver_options, dict):
|
if isinstance(self._driver_options, dict):
|
||||||
options = _dict_to_chrome_options(self._driver_options)
|
options = _dict_to_chrome_options(self._driver_options)
|
||||||
else:
|
else:
|
||||||
raise KeyError('Driver options invalid')
|
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)
|
self._driver = webdriver.Chrome(self._driver_path, options=options)
|
||||||
|
|
||||||
@ -89,6 +95,25 @@ class Drission(object):
|
|||||||
def session_options(self, value: dict):
|
def session_options(self, value: dict):
|
||||||
self._session_options = value
|
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) \
|
def cookies_to_session(self, copy_user_agent: bool = False, driver: WebDriver = None, session: Session = None) \
|
||||||
-> None:
|
-> None:
|
||||||
"""把driver的cookies复制到session"""
|
"""把driver的cookies复制到session"""
|
||||||
|
@ -45,7 +45,6 @@ class MixPage(Null, SessionPage, DriverPage):
|
|||||||
self._driver = None
|
self._driver = None
|
||||||
self._url = None
|
self._url = None
|
||||||
self._response = None
|
self._response = None
|
||||||
self._proxies = None
|
|
||||||
self.timeout = timeout
|
self.timeout = timeout
|
||||||
self._url_available = None
|
self._url_available = None
|
||||||
self._mode = mode
|
self._mode = mode
|
||||||
@ -111,6 +110,7 @@ class MixPage(Null, SessionPage, DriverPage):
|
|||||||
每次访问时切换到d模式,主要用于独有函数及外部调用
|
每次访问时切换到d模式,主要用于独有函数及外部调用
|
||||||
:return:selenium的WebDriver对象
|
:return:selenium的WebDriver对象
|
||||||
"""
|
"""
|
||||||
|
# TODO: 改成每次获取drission的driver
|
||||||
if self._driver is None:
|
if self._driver is None:
|
||||||
self._driver = self._drission.driver
|
self._driver = self._drission.driver
|
||||||
self.change_mode('d')
|
self.change_mode('d')
|
||||||
|
@ -29,7 +29,6 @@ class SessionPage(object):
|
|||||||
self._url = None
|
self._url = None
|
||||||
self._url_available = None
|
self._url_available = None
|
||||||
self._response = None
|
self._response = None
|
||||||
self._proxies = None
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def session(self) -> HTMLSession:
|
def session(self) -> HTMLSession:
|
||||||
@ -54,14 +53,6 @@ class SessionPage(object):
|
|||||||
"""当前session的cookies"""
|
"""当前session的cookies"""
|
||||||
return self.session.cookies.get_dict()
|
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
|
@property
|
||||||
def title(self) -> str:
|
def title(self) -> str:
|
||||||
"""获取网页title"""
|
"""获取网页title"""
|
||||||
@ -70,7 +61,6 @@ class SessionPage(object):
|
|||||||
@property
|
@property
|
||||||
def html(self) -> str:
|
def html(self) -> str:
|
||||||
"""获取元素innerHTML,如未指定元素则获取所有源代码"""
|
"""获取元素innerHTML,如未指定元素则获取所有源代码"""
|
||||||
# return unescape(self.response.html.raw_html.replace(b'\x08', b'').decode()).replace('\xa0', ' ')
|
|
||||||
return self.response.html.html
|
return self.response.html.html
|
||||||
|
|
||||||
def ele(self, loc_or_ele: Union[tuple, str, SessionElement], mode: str = None, show_errmsg: bool = False) \
|
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:
|
if self._url:
|
||||||
kwargs['headers']['Referer'] = 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:
|
if 'timeout' not in kwargs_set:
|
||||||
kwargs['timeout'] = self.timeout
|
kwargs['timeout'] = self.timeout
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user