diff --git a/DrissionPage/config.py b/DrissionPage/config.py index b7ea249..17fccd0 100644 --- a/DrissionPage/config.py +++ b/DrissionPage/config.py @@ -732,7 +732,7 @@ def _cookie_to_dict(cookie: Union[Cookie, str, dict]) -> dict: cookie_dict = cookie elif isinstance(cookie, str): - cookie = cookie.split(';') + cookie = cookie.split(',' if ',' in cookie else ';') cookie_dict = {} for key, attr in enumerate(cookie): @@ -761,7 +761,7 @@ def _cookies_to_tuple(cookies: Union[RequestsCookieJar, list, tuple, str, dict]) cookies = tuple(_cookie_to_dict(cookie) for cookie in cookies) elif isinstance(cookies, str): - cookies = tuple(dict([cookie.lstrip().split("=", 1)]) for cookie in cookies.split(";")) + cookies = tuple(_cookie_to_dict(cookie.lstrip()) for cookie in cookies.split(";")) elif isinstance(cookies, dict): cookies = tuple({'name': cookie, 'value': cookies[cookie]} for cookie in cookies) diff --git a/DrissionPage/drission.py b/DrissionPage/drission.py index e305a54..dca4931 100644 --- a/DrissionPage/drission.py +++ b/DrissionPage/drission.py @@ -245,9 +245,21 @@ class Drission(object): :param url: 作用域 :return: None """ - url = extract(url) - domain = f'{url.domain}.{url.suffix}' - cookies = tuple(x for x in self.session.cookies if domain in x.domain) + browser_domain = extract(self.driver.current_url).fqdn + ex_url = extract(url) + + if ex_url.fqdn not in browser_domain: + self.driver.get(url) + + domain = f'{ex_url.domain}.{ex_url.suffix}' + + cookies = [] + for cookie in self.session.cookies: + if cookie.domain == '': + cookie.domain = domain + + if domain in cookie.domain: + cookies.append(cookie) self.set_cookies(cookies, set_driver=True) diff --git a/DrissionPage/mix_page.py b/DrissionPage/mix_page.py index a6fc180..4e4e0a7 100644 --- a/DrissionPage/mix_page.py +++ b/DrissionPage/mix_page.py @@ -140,9 +140,10 @@ class MixPage(Null, SessionPage, DriverPage): elif self._mode == 'd': return super(SessionPage, self).title - def set_cookies(self, cookies: Union[RequestsCookieJar, list, tuple, str, dict]) -> None: + def set_cookies(self, cookies: Union[RequestsCookieJar, list, tuple, str, dict], refresh: bool = True) -> None: """设置cookies \n :param cookies: cookies信息,可为CookieJar, list, tuple, str, dict + :param refresh: 设置cookies后是否刷新页面 :return: None """ if self._mode == 's': @@ -150,6 +151,9 @@ class MixPage(Null, SessionPage, DriverPage): elif self._mode == 'd': self.drission.set_cookies(cookies, set_driver=True) + if refresh: + self.refresh() + def get_cookies(self, as_dict: bool = False, all_domains: bool = False) -> Union[dict, list]: """返回cookies \n :param as_dict: 是否以字典方式返回 diff --git a/DrissionPage/session_page.py b/DrissionPage/session_page.py index ca7ca0c..060e50d 100644 --- a/DrissionPage/session_page.py +++ b/DrissionPage/session_page.py @@ -77,9 +77,12 @@ class SessionPage(object): if all_domains: cookies = self.session.cookies else: - url = extract(self.url) - domain = f'{url.domain}.{url.suffix}' - cookies = tuple(x for x in self.session.cookies if domain in x.domain) + if self.url: + url = extract(self.url) + domain = f'{url.domain}.{url.suffix}' + cookies = tuple(x for x in self.session.cookies if domain in x.domain or x.domain == '') + else: + cookies = tuple(x for x in self.session.cookies) if as_dict: return {x.name: x.value for x in cookies} diff --git a/README.en.md b/README.en.md index d4b43e1..78aa983 100644 --- a/README.en.md +++ b/README.en.md @@ -1416,7 +1416,9 @@ Set cookies. Parameter Description: -- cookies: Union[RequestsCookieJar, list, tuple, str, dict] - cookies information, can be CookieJar, list, tuple, str, dict +- cookies: Union[RequestsCookieJar, list, tuple, str, dict] - cookies information, can be CookieJar, list, tuple, str, + dict +- refresh: bool - Whether to refresh the page after setting cookies Returns: None