diff --git a/DrissionPage/chromium_base.py b/DrissionPage/chromium_base.py index 3d18ab4..c326e94 100644 --- a/DrissionPage/chromium_base.py +++ b/DrissionPage/chromium_base.py @@ -42,7 +42,7 @@ class ChromiumBase(BasePage): self._set = None self._screencast = None - if address and (isinstance(address, int) or address.isdigit()): + if isinstance(address, int) or (isinstance(address, str) and address.isdigit()): address = f'127.0.0.1:{address}' self._set_start_options(address, None) diff --git a/DrissionPage/chromium_page.py b/DrissionPage/chromium_page.py index ca17a1e..8aabe78 100644 --- a/DrissionPage/chromium_page.py +++ b/DrissionPage/chromium_page.py @@ -109,7 +109,10 @@ class ChromiumPage(ChromiumBase): pass self._process_id = None - for i in self.browser_driver.SystemInfo.getProcessInfo()['processInfo']: + r = self.browser_driver.SystemInfo.getProcessInfo() + if 'processInfo' not in r: + return None + for i in r['processInfo']: if i['type'] == 'browser': self._process_id = i['id'] break diff --git a/DrissionPage/commons/web.py b/DrissionPage/commons/web.py index 6c3dc42..75e35b0 100644 --- a/DrissionPage/commons/web.py +++ b/DrissionPage/commons/web.py @@ -253,15 +253,41 @@ def set_browser_cookies(page, cookies): cookie.pop('expiry') if 'expires' in cookie: cookie['expires'] = int(cookie['expires']) - - if not cookie.get('domain', None): - ex_url = extract(page._browser_url) - cookie['domain'] = f'{ex_url.domain}.{ex_url.suffix}' if ex_url.suffix else ex_url.domain - if cookie['value'] is None: cookie['value'] = '' - try: + if cookie.get('domain', None): + try: + page.run_cdp_loaded('Network.setCookie', **cookie) + continue + except Exception: + pass + + ex_url = extract(page._browser_url) + d_list = ex_url.subdomain.split('.') + d_list.append(f'{ex_url.domain}.{ex_url.suffix}' if ex_url.suffix else ex_url.domain) + + for i in range(len(d_list)): + d = f'.{".".join(d_list[i:])}' + cookie['domain'] = d page.run_cdp_loaded('Network.setCookie', **cookie) - except Exception: - pass + if is_cookie_in_driver(page, cookie): + continue + + d = f'{".".join(d_list[i:])}' + cookie['domain'] = d + page.run_cdp_loaded('Network.setCookie', **cookie) + if is_cookie_in_driver(page, cookie): + continue + + +def is_cookie_in_driver(page, cookie): + """查询cookie是否在浏览器内 + :param page: BasePage对象 + :param cookie: dict格式cookie + :return: bool + """ + for c in page.get_cookies(): + if cookie['name'] == c['name'] and cookie['value'] == c['value']: + return True + return False diff --git a/DrissionPage/commons/web.pyi b/DrissionPage/commons/web.pyi index e661b30..b91ba71 100644 --- a/DrissionPage/commons/web.pyi +++ b/DrissionPage/commons/web.pyi @@ -42,3 +42,6 @@ def set_session_cookies(session: Session, cookies: Union[RequestsCookieJar, list def set_browser_cookies(page: ChromiumBase, cookies: Union[RequestsCookieJar, list, tuple, str, dict]) -> None: ... + + +def is_cookie_in_driver(page: ChromiumBase, cookie: dict) -> bool: ...