Browser改名为Chromium

This commit is contained in:
g1879 2024-07-07 09:18:11 +08:00
parent 89af82dc2f
commit 7fdd976854
18 changed files with 53 additions and 49 deletions

View File

@ -5,7 +5,7 @@
@Copyright: (c) 2024 by g1879, Inc. All Rights Reserved. @Copyright: (c) 2024 by g1879, Inc. All Rights Reserved.
@License : BSD 3-Clause. @License : BSD 3-Clause.
""" """
from ._base.browser import Browser from ._base.browser import Chromium
from ._configs.chromium_options import ChromiumOptions from ._configs.chromium_options import ChromiumOptions
from ._configs.session_options import SessionOptions from ._configs.session_options import SessionOptions
# 即将废弃 # 即将废弃

View File

@ -5,7 +5,7 @@
@Copyright: (c) 2024 by g1879, Inc. All Rights Reserved. @Copyright: (c) 2024 by g1879, Inc. All Rights Reserved.
@License : BSD 3-Clause. @License : BSD 3-Clause.
""" """
from ._base.browser import Browser from ._base.browser import Chromium
from ._configs.chromium_options import ChromiumOptions from ._configs.chromium_options import ChromiumOptions
from ._configs.session_options import SessionOptions from ._configs.session_options import SessionOptions
from ._pages.session_page import SessionPage from ._pages.session_page import SessionPage
@ -13,5 +13,5 @@ from ._pages.session_page import SessionPage
from ._pages.chromium_page import ChromiumPage from ._pages.chromium_page import ChromiumPage
from ._pages.web_page import WebPage from ._pages.web_page import WebPage
__all__ = ['WebPage', 'ChromiumPage', 'Browser', 'ChromiumOptions', 'SessionOptions', 'SessionPage', '__version__'] __all__ = ['WebPage', 'ChromiumPage', 'Chromium', 'ChromiumOptions', 'SessionOptions', 'SessionPage', '__version__']
__version__: str = ... __version__: str = ...

View File

@ -32,7 +32,7 @@ from ..errors import PageDisconnectedError
__ERROR__ = 'error' __ERROR__ = 'error'
class Browser(object): class Chromium(object):
_BROWSERS = {} _BROWSERS = {}
def __new__(cls, addr_or_opts=None, session_options=None): def __new__(cls, addr_or_opts=None, session_options=None):
@ -61,7 +61,7 @@ class Browser(object):
return return
self._created = True self._created = True
self._type = 'Browser' self._type = 'Chromium'
self._frames = {} self._frames = {}
self._drivers = {} self._drivers = {}
@ -491,7 +491,7 @@ class Browser(object):
return r if __ERROR__ not in r else raise_error(r, ignore) return r if __ERROR__ not in r else raise_error(r, ignore)
def _on_disconnect(self): def _on_disconnect(self):
Browser._BROWSERS.pop(self.id, None) Chromium._BROWSERS.pop(self.id, None)
if self._chromium_options.is_auto_port and self._chromium_options.user_data_path: if self._chromium_options.is_auto_port and self._chromium_options.user_data_path:
path = Path(self._chromium_options.user_data_path) path = Path(self._chromium_options.user_data_path)
end_time = perf_counter() + 7 end_time = perf_counter() + 7

View File

@ -19,7 +19,7 @@ from .._units.setter import BrowserSetter
from .._units.waiter import BrowserWaiter from .._units.waiter import BrowserWaiter
class Browser(object): class Chromium(object):
id: str = ... id: str = ...
address: str = ... address: str = ...
version: str = ... version: str = ...

View File

@ -12,7 +12,7 @@ from typing import Union, Callable, Dict, Optional
from requests import Response, Session from requests import Response, Session
from websocket import WebSocket from websocket import WebSocket
from .browser import Browser from .browser import Chromium
class GenericAttr(object): class GenericAttr(object):
@ -67,11 +67,11 @@ class Driver(object):
class BrowserDriver(Driver): class BrowserDriver(Driver):
BROWSERS: Dict[str, Driver] = ... BROWSERS: Dict[str, Driver] = ...
owner: Browser = ... owner: Chromium = ...
_control_session: Session = ... _control_session: Session = ...
def __new__(cls, tab_id: str, tab_type: str, address: str, owner: Browser): ... def __new__(cls, tab_id: str, tab_type: str, address: str, owner: Chromium): ...
def __init__(self, tab_id: str, tab_type: str, address: str, owner: Browser): ... def __init__(self, tab_id: str, tab_type: str, address: str, owner: Chromium): ...
def get(self, url) -> Response: ... def get(self, url) -> Response: ...

View File

@ -11,7 +11,7 @@ from typing import Union
from requests import Session from requests import Session
from requests.cookies import RequestsCookieJar from requests.cookies import RequestsCookieJar
from .._base.browser import Browser from .._base.browser import Chromium
from .._pages.chromium_base import ChromiumBase from .._pages.chromium_base import ChromiumBase
@ -24,7 +24,7 @@ def cookies_to_tuple(cookies: Union[RequestsCookieJar, list, tuple, str, dict, C
def set_session_cookies(session: Session, cookies: Union[RequestsCookieJar, list, tuple, str, dict]) -> None: ... def set_session_cookies(session: Session, cookies: Union[RequestsCookieJar, list, tuple, str, dict]) -> None: ...
def set_browser_cookies(browser: Browser, cookies: Union[RequestsCookieJar, list, tuple, str, dict]) -> None: ... def set_browser_cookies(browser: Chromium, cookies: Union[RequestsCookieJar, list, tuple, str, dict]) -> None: ...
def set_tab_cookies(page: ChromiumBase, cookies: Union[RequestsCookieJar, list, tuple, str, dict]) -> None: ... def set_tab_cookies(page: ChromiumBase, cookies: Union[RequestsCookieJar, list, tuple, str, dict]) -> None: ...

View File

@ -346,7 +346,9 @@ def format_headers(txt):
:param txt: 从浏览器复制的原始文本格式headers :param txt: 从浏览器复制的原始文本格式headers
:return: dict格式headers :return: dict格式headers
""" """
if not isinstance(txt, str): if isinstance(txt, dict):
for k, v in txt.items():
txt[k] = str(v)
return txt return txt
headers = {} headers = {}
for header in txt.split('\n'): for header in txt.split('\n'):

View File

@ -41,7 +41,7 @@ class ChromiumBase(BasePage):
def __init__(self, browser, tab_id=None): def __init__(self, browser, tab_id=None):
""" """
:param browser: Browser :param browser: Chromium
:param tab_id: 要控制的标签页id不指定默认为激活的 :param tab_id: 要控制的标签页id不指定默认为激活的
""" """
super().__init__() super().__init__()

View File

@ -10,7 +10,7 @@ from typing import Union, Tuple, List, Any, Optional, Literal
from .chromium_tab import ChromiumTab, MixTab from .chromium_tab import ChromiumTab, MixTab
from .._base.base import BasePage from .._base.base import BasePage
from .._base.browser import Browser from .._base.browser import Chromium
from .._base.driver import Driver from .._base.driver import Driver
from .._elements.chromium_element import ChromiumElement from .._elements.chromium_element import ChromiumElement
from .._elements.session_element import SessionElement from .._elements.session_element import SessionElement
@ -32,10 +32,10 @@ PIC_TYPE = Literal['jpg', 'jpeg', 'png', 'webp', True]
class ChromiumBase(BasePage): class ChromiumBase(BasePage):
def __init__(self, def __init__(self,
browser: Browser, browser: Chromium,
tab_id: str = None): tab_id: str = None):
self._tab: Union[ChromiumTab, MixTab, ChromiumFrame] = ... self._tab: Union[ChromiumTab, MixTab, ChromiumFrame] = ...
self._browser: Browser = ... self._browser: Chromium = ...
self._driver: Driver = ... self._driver: Driver = ...
self._frame_id: str = ... self._frame_id: str = ...
self._is_reading: bool = ... self._is_reading: bool = ...
@ -102,7 +102,7 @@ class ChromiumBase(BasePage):
def _js_ready_state(self) -> str: ... def _js_ready_state(self) -> str: ...
@property @property
def browser(self) -> Browser: ... def browser(self) -> Chromium: ...
@property @property
def title(self) -> str: ... def title(self) -> str: ...

View File

@ -7,7 +7,7 @@
""" """
from time import sleep from time import sleep
from .._base.browser import Browser from .._base.browser import Chromium
from .._functions.web import save_page from .._functions.web import save_page
from .._pages.chromium_base import ChromiumBase from .._pages.chromium_base import ChromiumBase
from .._units.setter import ChromiumPageSetter from .._units.setter import ChromiumPageSetter
@ -24,7 +24,7 @@ class ChromiumPage(ChromiumBase):
:param tab_id: 要控制的标签页id不指定默认为激活的 :param tab_id: 要控制的标签页id不指定默认为激活的
:param timeout: 超时时间 :param timeout: 超时时间
""" """
browser = Browser(addr_or_opts=addr_or_opts) browser = Chromium(addr_or_opts=addr_or_opts)
if browser.id in cls._PAGES: if browser.id in cls._PAGES:
r = cls._PAGES[browser.id] r = cls._PAGES[browser.id]
while not hasattr(r, '_frame_id'): while not hasattr(r, '_frame_id'):

View File

@ -8,7 +8,7 @@
from pathlib import Path from pathlib import Path
from typing import Union, Tuple, List, Optional from typing import Union, Tuple, List, Optional
from .._base.browser import Browser from .._base.browser import Chromium
from .._configs.chromium_options import ChromiumOptions from .._configs.chromium_options import ChromiumOptions
from .._pages.chromium_base import ChromiumBase from .._pages.chromium_base import ChromiumBase
from .._pages.chromium_tab import ChromiumTab from .._pages.chromium_tab import ChromiumTab
@ -20,7 +20,7 @@ from .._units.waiter import PageWaiter
class ChromiumPage(ChromiumBase): class ChromiumPage(ChromiumBase):
_PAGES: dict = ... _PAGES: dict = ...
tab: ChromiumPage = ... tab: ChromiumPage = ...
_browser: Browser = ... _browser: Chromium = ...
_rect: Optional[TabRect] = ... _rect: Optional[TabRect] = ...
_is_exist: bool = ... _is_exist: bool = ...
@ -41,7 +41,7 @@ class ChromiumPage(ChromiumBase):
def _page_init(self) -> None: ... def _page_init(self) -> None: ...
@property @property
def browser(self) -> Browser: ... def browser(self) -> Chromium: ...
@property @property
def tabs_count(self) -> int: ... def tabs_count(self) -> int: ...

View File

@ -52,6 +52,7 @@ class ChromiumTab(ChromiumBase):
def _d_set_runtime_settings(self): def _d_set_runtime_settings(self):
"""重写设置浏览器运行参数方法""" """重写设置浏览器运行参数方法"""
print('a')
self._timeouts = copy(self.browser.timeouts) self._timeouts = copy(self.browser.timeouts)
self.retry_times = self.browser.retry_times self.retry_times = self.browser.retry_times
self.retry_interval = self.browser.retry_interval self.retry_interval = self.browser.retry_interval
@ -96,7 +97,7 @@ class ChromiumTab(ChromiumBase):
class MixTab(SessionPage, ChromiumTab, BasePage): class MixTab(SessionPage, ChromiumTab, BasePage):
def __init__(self, browser, tab_id): def __init__(self, browser, tab_id):
""" """
:param browser: Browser对象 :param browser: Chromium对象
:param tab_id: 标签页id :param tab_id: 标签页id
""" """
if Settings.singleton_tab_obj and hasattr(self, '_created'): if Settings.singleton_tab_obj and hasattr(self, '_created'):

View File

@ -13,7 +13,7 @@ from requests import Session, Response
from .chromium_base import ChromiumBase from .chromium_base import ChromiumBase
from .chromium_frame import ChromiumFrame from .chromium_frame import ChromiumFrame
from .session_page import SessionPage from .session_page import SessionPage
from .._base.browser import Browser from .._base.browser import Chromium
from .._elements.chromium_element import ChromiumElement from .._elements.chromium_element import ChromiumElement
from .._elements.session_element import SessionElement from .._elements.session_element import SessionElement
from .._functions.cookies import CookiesList from .._functions.cookies import CookiesList
@ -26,9 +26,9 @@ from .._units.waiter import TabWaiter
class ChromiumTab(ChromiumBase): class ChromiumTab(ChromiumBase):
_TABS: dict = ... _TABS: dict = ...
def __new__(cls, browser: Browser, tab_id: str): ... def __new__(cls, browser: Chromium, tab_id: str): ...
def __init__(self, browser: Browser, tab_id: str): def __init__(self, browser: Chromium, tab_id: str):
self._tab: ChromiumTab = ... self._tab: ChromiumTab = ...
self._rect: Optional[TabRect] = ... self._rect: Optional[TabRect] = ...
@ -70,7 +70,7 @@ class MixTab(SessionPage, ChromiumTab):
_has_driver: bool = ... _has_driver: bool = ...
_has_session: bool = ... _has_session: bool = ...
def __init__(self, browser: Browser, tab_id: str): ... def __init__(self, browser: Chromium, tab_id: str): ...
def __call__(self, def __call__(self,
locator: Union[Tuple[str, str], str, ChromiumElement, SessionElement], locator: Union[Tuple[str, str], str, ChromiumElement, SessionElement],

View File

@ -8,7 +8,7 @@
from http.cookiejar import Cookie, CookieJar from http.cookiejar import Cookie, CookieJar
from typing import Union from typing import Union
from .._base.browser import Browser from .._base.browser import Chromium
from .._pages.chromium_base import ChromiumBase from .._pages.chromium_base import ChromiumBase
from .._pages.chromium_tab import MixTab from .._pages.chromium_tab import MixTab
from .._pages.session_page import SessionPage from .._pages.session_page import SessionPage
@ -28,9 +28,9 @@ class CookiesSetter(object):
class BrowserCookiesSetter(CookiesSetter): class BrowserCookiesSetter(CookiesSetter):
_owner: Browser = ... _owner: Chromium = ...
def __init__(self, page: Browser): ... def __init__(self, page: Chromium): ...
class SessionCookiesSetter(object): class SessionCookiesSetter(object):

View File

@ -7,13 +7,13 @@
""" """
from typing import Dict, Optional, Union, Literal from typing import Dict, Optional, Union, Literal
from .._base.browser import Browser from .._base.browser import Chromium
from .._pages.chromium_base import ChromiumBase from .._pages.chromium_base import ChromiumBase
# from .._pages.chromium_page import ChromiumPage # from .._pages.chromium_page import ChromiumPage
FILE_EXISTS = Literal['skip', 'rename', 'overwrite', 's', 'r', 'o'] FILE_EXISTS = Literal['skip', 'rename', 'overwrite', 's', 'r', 'o']
class DownloadManager(object): class DownloadManager(object):
_browser: Browser = ... _browser: Chromium = ...
# _page: ChromiumPage = ... # _page: ChromiumPage = ...
_missions: Dict[str, DownloadMission] = ... _missions: Dict[str, DownloadMission] = ...
_tab_missions: dict = ... _tab_missions: dict = ...
@ -21,7 +21,7 @@ class DownloadManager(object):
_running: bool = ... _running: bool = ...
# _save_path: Optional[str] = ... # _save_path: Optional[str] = ...
def __init__(self, browser: Browser): ... def __init__(self, browser: Chromium): ...
@property @property
def missions(self) -> Dict[str, DownloadMission]: ... def missions(self) -> Dict[str, DownloadMission]: ...

View File

@ -14,7 +14,7 @@ from requests.auth import HTTPBasicAuth
from .cookies_setter import SessionCookiesSetter, CookiesSetter, WebPageCookiesSetter, BrowserCookiesSetter from .cookies_setter import SessionCookiesSetter, CookiesSetter, WebPageCookiesSetter, BrowserCookiesSetter
from .scroller import PageScroller from .scroller import PageScroller
from .._base.base import BasePage from .._base.base import BasePage
from .._base.browser import Browser from .._base.browser import Chromium
from .._elements.chromium_element import ChromiumElement from .._elements.chromium_element import ChromiumElement
from .._pages.chromium_base import ChromiumBase from .._pages.chromium_base import ChromiumBase
from .._pages.chromium_frame import ChromiumFrame from .._pages.chromium_frame import ChromiumFrame
@ -27,8 +27,8 @@ FILE_EXISTS = Literal['skip', 'rename', 'overwrite', 's', 'r', 'o']
class BasePageSetter(object): class BasePageSetter(object):
def __init__(self, owner: Union[Browser, BasePage]): def __init__(self, owner: Union[Chromium, BasePage]):
self._owner: Union[Browser, BasePage] = ... self._owner: Union[Chromium, BasePage] = ...
def NoneElement_value(self, value: Any = None, on_off: bool = True) -> None: ... def NoneElement_value(self, value: Any = None, on_off: bool = True) -> None: ...
@ -48,8 +48,8 @@ class BrowserBaseSetter(BasePageSetter):
def timeouts(self, base=None, page_load=None, script=None) -> None: ... def timeouts(self, base=None, page_load=None, script=None) -> None: ...
class BrowserSetter(BasePageSetter): class BrowserSetter(BrowserBaseSetter):
_owner: Browser = ... _owner: Chromium = ...
_cookies_setter: BrowserCookiesSetter = ... _cookies_setter: BrowserCookiesSetter = ...
def tab_to_front(self, tab_or_id: Union[str, ChromiumTab]) -> None: ... def tab_to_front(self, tab_or_id: Union[str, ChromiumTab]) -> None: ...
@ -221,9 +221,9 @@ class ChromiumFrameSetter(ChromiumBaseSetter):
class LoadMode(object): class LoadMode(object):
_owner: Union[Browser, ChromiumBase] = ... _owner: Union[Chromium, ChromiumBase] = ...
def __init__(self, owner: Union[Browser, ChromiumBase]): ... def __init__(self, owner: Union[Chromium, ChromiumBase]): ...
def __call__(self, value: str) -> None: ... def __call__(self, value: str) -> None: ...

View File

@ -8,7 +8,7 @@
from typing import Union, Tuple, Literal, List from typing import Union, Tuple, Literal, List
from .downloader import DownloadMission from .downloader import DownloadMission
from .._base.browser import Browser from .._base.browser import Chromium
from .._elements.chromium_element import ChromiumElement from .._elements.chromium_element import ChromiumElement
from .._pages.chromium_base import ChromiumBase from .._pages.chromium_base import ChromiumBase
from .._pages.chromium_frame import ChromiumFrame from .._pages.chromium_frame import ChromiumFrame
@ -20,7 +20,7 @@ class OriginWaiter(object):
class BrowserWaiter(OriginWaiter): class BrowserWaiter(OriginWaiter):
def __init__(self, owner: Browser): def __init__(self, owner: Chromium):
self._owner = owner self._owner = owner
def download_begin(self, timeout: float = None, cancel_it: bool = False) -> DownloadMission: ... def download_begin(self, timeout: float = None, cancel_it: bool = False) -> DownloadMission: ...

View File

@ -5,6 +5,7 @@
@Copyright: (c) 2024 by g1879, Inc. All Rights Reserved. @Copyright: (c) 2024 by g1879, Inc. All Rights Reserved.
@License : BSD 3-Clause. @License : BSD 3-Clause.
""" """
from ._base.browser import Chromium
from ._elements.session_element import make_session_ele from ._elements.session_element import make_session_ele
from ._functions.by import By from ._functions.by import By
from ._functions.elements import get_eles from ._functions.elements import get_eles
@ -12,7 +13,7 @@ from ._functions.keys import Keys
from ._functions.settings import Settings from ._functions.settings import Settings
from ._functions.tools import wait_until, configs_to_here from ._functions.tools import wait_until, configs_to_here
from ._functions.web import get_blob, tree from ._functions.web import get_blob, tree
from ._pages.chromium_page import ChromiumPage
from ._units.actions import Actions from ._units.actions import Actions
__all__ = ['make_session_ele', 'Actions', 'Keys', 'By', 'Settings', 'wait_until', 'configs_to_here', 'get_blob', __all__ = ['make_session_ele', 'Actions', 'Keys', 'By', 'Settings', 'wait_until', 'configs_to_here', 'get_blob',
@ -20,15 +21,15 @@ __all__ = ['make_session_ele', 'Actions', 'Keys', 'By', 'Settings', 'wait_until'
def from_selenium(driver): def from_selenium(driver):
"""从selenium的WebDriver对象生成ChromiumPage对象""" """从selenium的WebDriver对象生成Chromium对象"""
address, port = driver.caps.get('goog:chromeOptions', {}).get('debuggerAddress', ':').split(':') address, port = driver.caps.get('goog:chromeOptions', {}).get('debuggerAddress', ':').split(':')
if not address: if not address:
raise RuntimeError('获取失败。') raise RuntimeError('获取失败。')
return ChromiumPage(f'{address}:{port}') return Chromium(f'{address}:{port}')
def from_playwright(page_or_browser): def from_playwright(page_or_browser):
"""从playwright的Page或Browser对象生成ChromiumPage对象""" """从playwright的Page或Browser对象生成Chromium对象"""
if hasattr(page_or_browser, 'context'): if hasattr(page_or_browser, 'context'):
page_or_browser = page_or_browser.context.browser page_or_browser = page_or_browser.context.browser
try: try:
@ -49,4 +50,4 @@ def from_playwright(page_or_browser):
break break
else: else:
raise RuntimeError('获取失败。') raise RuntimeError('获取失败。')
return ChromiumPage(f'127.0.0.1:{port}') return Chromium(f'127.0.0.1:{port}')