4.1.0.3修复cookies设置问题;修复edge不能进入隐私模式问题

This commit is contained in:
g1879 2024-09-20 18:16:38 +08:00
parent 705fbb398c
commit 4c427042e3
6 changed files with 73 additions and 13 deletions

View File

@ -12,4 +12,4 @@ from ._pages.chromium_page import ChromiumPage
from ._pages.session_page import SessionPage
from ._pages.web_page import WebPage
__version__ = '4.1.0.2'
__version__ = '4.1.0.3'

View File

@ -6,6 +6,7 @@
@License : BSD 3-Clause.
"""
from pathlib import Path
from re import match
from shutil import rmtree
from threading import Lock
from time import sleep, perf_counter
@ -476,6 +477,8 @@ def _new_tab_by_js(browser: Chromium, url, obj, new_window):
mix = isinstance(obj, MixTab)
tab = browser._get_tab(mix=mix)
url = f'"{url}"' if url else ''
if url and not match(r'^.*?://.*', url):
raise ValueError(f'url也许需要加上http://')
new = 'target="_new"' if new_window else 'target="_blank"'
tid = browser.latest_tab.tab_id
tab.run_js(f'window.open({url}, {new})')

View File

@ -271,7 +271,8 @@ class ChromiumOptions(object):
def incognito(self, on_off=True):
on_off = None if on_off else False
return self.set_argument('--incognito', on_off)
self.set_argument('--incognito', on_off)
return self.set_argument('--inprivate', on_off) # edge
def new_env(self, on_off=True):
self._new_env = on_off

View File

@ -20,7 +20,6 @@ class BrowserCookiesSetter(object):
class CookiesSetter(BrowserCookiesSetter):
def __call__(self, cookies):
set_tab_cookies(self._owner, cookies)
@ -56,13 +55,12 @@ class SessionCookiesSetter(object):
self._owner.session.cookies.clear()
class WebPageCookiesSetter(CookiesSetter, SessionCookiesSetter):
class WebPageCookiesSetter(CookiesSetter):
def __call__(self, cookies):
if self._owner.mode == 'd' and self._owner._has_driver:
super().__call__(cookies)
elif self._owner.mode == 's' and self._owner._has_session:
super(CookiesSetter, self).__call__(cookies)
set_session_cookies(self._owner.session, cookies)
def remove(self, name, url=None, domain=None, path=None):
if self._owner.mode == 'd' and self._owner._has_driver:
@ -70,10 +68,32 @@ class WebPageCookiesSetter(CookiesSetter, SessionCookiesSetter):
elif self._owner.mode == 's' and self._owner._has_session:
if url or domain or path:
raise AttributeError('url、domain、path参数只有d模式下有效。')
super(CookiesSetter, self).remove(name)
self._owner.session.cookies.set(name, None)
def clear(self):
if self._owner.mode == 'd' and self._owner._has_driver:
super().clear()
elif self._owner.mode == 's' and self._owner._has_session:
super(CookiesSetter, self).clear()
self._owner.session.cookies.clear()
class MixTabCookiesSetter(CookiesSetter):
def __call__(self, cookies):
if self._owner._d_mode and self._owner._driver.is_running:
super().__call__(cookies)
elif not self._owner._d_mode and self._owner._session:
set_session_cookies(self._owner.session, cookies)
def remove(self, name, url=None, domain=None, path=None):
if self._owner._d_mode and self._owner._driver.is_running:
super().remove(name, url, domain, path)
elif not self._owner._d_mode and self._owner._session:
if url or domain or path:
raise AttributeError('url、domain、path参数只有d模式下有效。')
self._owner.session.cookies.set(name, None)
def clear(self):
if self._owner._d_mode and self._owner._driver.is_running:
super().clear()
elif not self._owner._d_mode and self._owner._session:
self._owner.session.cookies.clear()

View File

@ -100,11 +100,46 @@ class SessionCookiesSetter(object):
class WebPageCookiesSetter(CookiesSetter, SessionCookiesSetter):
_owner: Union[WebPage, MixTab] = ...
_owner: WebPage = ...
def __init__(self, owner: Union[WebPage, MixTab]):
def __init__(self, owner: WebPage):
"""
:param owner: WebPage, MixTab对象
:param owner: WebPage对象
"""
...
def __call__(self, cookies: Union[CookieJar, Cookie, list, tuple, str, dict]) -> None:
"""设置一个或多个cookie
:param cookies: cookies信息
:return: None
"""
...
def remove(self,
name: str,
url: str = None,
domain: str = None,
path: str = None) -> None:
"""删除一个cookie
:param name: cookie的name字段
:param url: cookie的url字段可选d模式时才有效
:param domain: cookie的domain字段可选d模式时才有效
:param path: cookie的path字段可选d模式时才有效
:return: None
"""
...
def clear(self) -> None:
"""清除cookies"""
...
class MixTabCookiesSetter(CookiesSetter, SessionCookiesSetter):
_owner: MixTab = ...
def __init__(self, owner: MixTab):
"""
:param owner: MixTab对象
"""
...

View File

@ -10,7 +10,8 @@ from time import sleep
from requests.structures import CaseInsensitiveDict
from .cookies_setter import SessionCookiesSetter, CookiesSetter, WebPageCookiesSetter, BrowserCookiesSetter
from .cookies_setter import (SessionCookiesSetter, CookiesSetter, WebPageCookiesSetter, BrowserCookiesSetter,
MixTabCookiesSetter)
from .._functions.tools import show_or_hide_browser
from .._functions.web import format_headers
from ..errors import ElementLostError, JavaScriptError
@ -300,7 +301,7 @@ class MixTabSetter(TabSetter):
@property
def cookies(self):
if self._cookies_setter is None:
self._cookies_setter = WebPageCookiesSetter(self._owner)
self._cookies_setter = MixTabCookiesSetter(self._owner)
return self._cookies_setter
def headers(self, headers):