mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
修正初始化session时cookies的设置
This commit is contained in:
parent
a91b22df49
commit
2c6aa439fd
@ -6,9 +6,11 @@
|
|||||||
@File : config.py
|
@File : config.py
|
||||||
"""
|
"""
|
||||||
from configparser import ConfigParser, NoSectionError, NoOptionError
|
from configparser import ConfigParser, NoSectionError, NoOptionError
|
||||||
|
from http.cookiejar import Cookie
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Union
|
from typing import Any, Union
|
||||||
|
|
||||||
|
from requests.cookies import RequestsCookieJar
|
||||||
from selenium import webdriver
|
from selenium import webdriver
|
||||||
from selenium.webdriver.chrome.options import Options
|
from selenium.webdriver.chrome.options import Options
|
||||||
|
|
||||||
@ -175,8 +177,8 @@ class SessionOptions(object):
|
|||||||
if options_dict.get('cert', None) is not None:
|
if options_dict.get('cert', None) is not None:
|
||||||
self._cert = options_dict['cert']
|
self._cert = options_dict['cert']
|
||||||
|
|
||||||
if options_dict.get('adapters', None) is not None:
|
# if options_dict.get('adapters', None) is not None:
|
||||||
self._adapters = options_dict['adapters']
|
# self._adapters = options_dict['adapters']
|
||||||
|
|
||||||
if options_dict.get('stream', None) is not None:
|
if options_dict.get('stream', None) is not None:
|
||||||
self._stream = options_dict['stream']
|
self._stream = options_dict['stream']
|
||||||
@ -682,8 +684,15 @@ def _session_options_to_dict(options: Union[dict, SessionOptions, None]) -> Unio
|
|||||||
return options
|
return options
|
||||||
|
|
||||||
re_dict = dict()
|
re_dict = dict()
|
||||||
attrs = ['headers', 'cookies', 'auth', 'proxies', 'hooks', 'params', 'verify',
|
attrs = ['headers', 'auth', 'proxies', 'hooks', 'params', 'verify',
|
||||||
'adapters', 'stream', 'trust_env', 'max_redirects']
|
'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:
|
for attr in attrs:
|
||||||
val = options.__getattribute__(f'_{attr}')
|
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')
|
re_dict['cert'] = options.__getattribute__('_cert')
|
||||||
|
|
||||||
return re_dict
|
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
|
||||||
|
@ -17,7 +17,7 @@ from selenium.webdriver.chrome.webdriver import WebDriver
|
|||||||
from tldextract import extract
|
from tldextract import extract
|
||||||
|
|
||||||
from .config import (_dict_to_chrome_options, _session_options_to_dict,
|
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):
|
class Drission(object):
|
||||||
@ -160,14 +160,14 @@ class Drission(object):
|
|||||||
self._session = Session()
|
self._session = Session()
|
||||||
|
|
||||||
attrs = ['headers', 'auth', 'proxies', 'hooks', 'params', 'verify',
|
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 'cookies' in data:
|
||||||
if isinstance(data['cookies'], (list, tuple)):
|
if isinstance(data['cookies'], (list, tuple)):
|
||||||
pass
|
for cookie in data['cookies']:
|
||||||
# for cookie in data['cookies']:
|
kwargs = {x: cookie[x] for x in cookie if x not in ('name', 'value')}
|
||||||
# kwargs = {x: cookie[x] for x in cookie if x not in ('name', 'value')}
|
self._session.cookies.set(cookie['name'], cookie['value'], **kwargs)
|
||||||
# self._session.cookies.set(cookie['name'], cookie['value'], **kwargs)
|
|
||||||
elif isinstance(data['cookies'], RequestsCookieJar):
|
elif isinstance(data['cookies'], RequestsCookieJar):
|
||||||
for cookie in data['cookies']:
|
for cookie in data['cookies']:
|
||||||
self._session.cookies.set_cookie(cookie)
|
self._session.cookies.set_cookie(cookie)
|
||||||
@ -212,11 +212,7 @@ class Drission(object):
|
|||||||
|
|
||||||
# 翻译cookies
|
# 翻译cookies
|
||||||
for i in [x for x in session.cookies if domain in x.domain]:
|
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}
|
cookie_data = _cookie_to_dict(i)
|
||||||
|
|
||||||
if i.expires:
|
|
||||||
cookie_data['expiry'] = i.expires
|
|
||||||
|
|
||||||
self._ensure_add_cookie(cookie_data, driver=driver)
|
self._ensure_add_cookie(cookie_data, driver=driver)
|
||||||
|
|
||||||
def _ensure_add_cookie(self, cookie, override_domain=None, driver=None) -> None:
|
def _ensure_add_cookie(self, cookie, override_domain=None, driver=None) -> None:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user