Merge branch 'develop' of https://gitee.com/g1879/DrissionPage into develop

This commit is contained in:
g1879 2020-11-27 17:26:10 +08:00
commit cd89466f80
2 changed files with 30 additions and 15 deletions

View File

@ -6,9 +6,11 @@
@File : config.py
"""
from configparser import ConfigParser, NoSectionError, NoOptionError
from http.cookiejar import Cookie
from pathlib import Path
from typing import Any, Union
from requests.cookies import RequestsCookieJar
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
@ -175,8 +177,8 @@ class SessionOptions(object):
if options_dict.get('cert', None) is not None:
self._cert = options_dict['cert']
if options_dict.get('adapters', None) is not None:
self._adapters = options_dict['adapters']
# if options_dict.get('adapters', None) is not None:
# self._adapters = options_dict['adapters']
if options_dict.get('stream', None) is not None:
self._stream = options_dict['stream']
@ -682,8 +684,15 @@ def _session_options_to_dict(options: Union[dict, SessionOptions, None]) -> Unio
return options
re_dict = dict()
attrs = ['headers', 'cookies', 'auth', 'proxies', 'hooks', 'params', 'verify',
'adapters', 'stream', 'trust_env', 'max_redirects']
attrs = ['headers', 'auth', 'proxies', 'hooks', 'params', 'verify',
'stream', 'trust_env', 'max_redirects'] # 'adapters',
val = options.__getattribute__(f'_cookies')
if val is not None:
if isinstance(val, (list, tuple)):
re_dict['cookies'] = val
elif isinstance(val, RequestsCookieJar):
re_dict['cookies'] = [_cookie_to_dict(cookie) for cookie in val]
for attr in attrs:
val = options.__getattribute__(f'_{attr}')
@ -694,3 +703,13 @@ def _session_options_to_dict(options: Union[dict, SessionOptions, None]) -> Unio
re_dict['cert'] = options.__getattribute__('_cert')
return re_dict
def _cookie_to_dict(cookie: Cookie) -> dict:
# TODO: 其它值?
cookie_dict = {'name': cookie.name, 'value': str(cookie.value), 'path': cookie.path, 'domain': cookie.domain}
if cookie.expires:
cookie_dict['expiry'] = cookie.expires
return cookie_dict

View File

@ -17,7 +17,7 @@ from selenium.webdriver.chrome.webdriver import WebDriver
from tldextract import extract
from .config import (_dict_to_chrome_options, _session_options_to_dict,
SessionOptions, DriverOptions, _chrome_options_to_dict, OptionsManager)
SessionOptions, DriverOptions, _chrome_options_to_dict, OptionsManager, _cookie_to_dict)
class Drission(object):
@ -160,14 +160,14 @@ class Drission(object):
self._session = Session()
attrs = ['headers', 'auth', 'proxies', 'hooks', 'params', 'verify',
'cert', 'adapters', 'stream', 'trust_env', 'max_redirects']
'cert', 'stream', 'trust_env', 'max_redirects'] # , 'adapters'
if 'cookies' in data:
if isinstance(data['cookies'], (list, tuple)):
pass
# for cookie in data['cookies']:
# kwargs = {x: cookie[x] for x in cookie if x not in ('name', 'value')}
# self._session.cookies.set(cookie['name'], cookie['value'], **kwargs)
for cookie in data['cookies']:
kwargs = {x: cookie[x] for x in cookie if x not in ('name', 'value')}
self._session.cookies.set(cookie['name'], cookie['value'], **kwargs)
elif isinstance(data['cookies'], RequestsCookieJar):
for cookie in data['cookies']:
self._session.cookies.set_cookie(cookie)
@ -212,11 +212,7 @@ class Drission(object):
# 翻译cookies
for i in [x for x in session.cookies if domain in x.domain]:
cookie_data = {'name': i.name, 'value': str(i.value), 'path': i.path, 'domain': i.domain}
if i.expires:
cookie_data['expiry'] = i.expires
cookie_data = _cookie_to_dict(i)
self._ensure_add_cookie(cookie_data, driver=driver)
def _ensure_add_cookie(self, cookie, override_domain=None, driver=None) -> None: