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"""
|
||||
|
||||
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"""
|
||||
|
@ -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')
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user