From a8b89b51e2a75850f7cb2b8f116c8f43100dc443 Mon Sep 17 00:00:00 2001 From: g1879 Date: Thu, 19 Sep 2024 00:04:24 +0800 Subject: [PATCH] =?UTF-8?q?4.1.0.1=E4=BF=AE=E5=A4=8DSettings.raise=5Fwhen?= =?UTF-8?q?=5Fele=5Fnot=5Ffound=E4=B8=BATure=E6=97=B6=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=9BConsoleData=E5=A2=9E=E5=8A=A0body?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=EF=BC=9B=E4=BF=AE=E5=A4=8Dconsloe=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E8=8E=B7=E5=8F=96=E4=BF=A1=E6=81=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DrissionPage/__init__.py | 2 +- DrissionPage/_base/base.py | 4 ++-- DrissionPage/_units/console.py | 17 ++++++++++++++--- DrissionPage/_units/console.pyi | 6 +++++- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/DrissionPage/__init__.py b/DrissionPage/__init__.py index 1ed1536..d96d013 100644 --- a/DrissionPage/__init__.py +++ b/DrissionPage/__init__.py @@ -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.0' +__version__ = '4.1.0.1' diff --git a/DrissionPage/_base/base.py b/DrissionPage/_base/base.py index 4c22c2e..c4ca655 100644 --- a/DrissionPage/_base/base.py +++ b/DrissionPage/_base/base.py @@ -90,7 +90,7 @@ class BaseElement(BaseParser): r = self._find_elements(locator, timeout=timeout, index=index, relative=relative, raise_err=raise_err) if r or isinstance(r, list): return r - if Settings.raise_when_ele_not_found or raise_err is True: + if raise_err is True or (Settings.raise_when_ele_not_found and raise_err is None): raise ElementNotFoundError(None, method, {'locator': locator, 'index': index, 'timeout': timeout}) r.method = method @@ -356,7 +356,7 @@ class BasePage(BaseParser): r = self._find_elements(locator, timeout=timeout, index=index, raise_err=raise_err) if r or isinstance(r, list): return r - if Settings.raise_when_ele_not_found or raise_err is True: + if raise_err is True or (Settings.raise_when_ele_not_found and raise_err is None): raise ElementNotFoundError(None, method, {'locator': locator, 'index': index, 'timeout': timeout}) r.method = method diff --git a/DrissionPage/_units/console.py b/DrissionPage/_units/console.py index 54d91eb..ee3a34e 100644 --- a/DrissionPage/_units/console.py +++ b/DrissionPage/_units/console.py @@ -6,8 +6,9 @@ from time import perf_counter, sleep class Console(object): def __init__(self, owner): self._owner = owner - self.listening = False self._caught = None + self._not_enabled = True + self.listening = False @property def messages(self): @@ -21,12 +22,13 @@ class Console(object): def start(self): self._caught = Queue(maxsize=0) self._owner._driver.set_callback("Console.messageAdded", self._console) - self._owner._run_cdp("Console.enable") + if self._not_enabled: + self._owner._run_cdp("Console.enable") + self._not_enabled = False self.listening = True def stop(self): if self.listening: - self._owner._run_cdp("Console.disable") self._owner._driver.set_callback('Console.messageAdded', None) self.listening = False @@ -61,6 +63,7 @@ class Console(object): while self._owner._driver.is_running and self.listening and perf_counter() < end: if self._caught.qsize(): yield self._caught.get_nowait() + end = perf_counter() + timeout sleep(0.05) return False @@ -80,3 +83,11 @@ class ConsoleData(object): def __repr__(self): return (f'') + + @property + def body(self): + from json import loads + try: + return loads(self.text) + except: + return self._raw_body diff --git a/DrissionPage/_units/console.pyi b/DrissionPage/_units/console.pyi index d962a18..5ab45b7 100644 --- a/DrissionPage/_units/console.pyi +++ b/DrissionPage/_units/console.pyi @@ -1,6 +1,6 @@ # -*- coding:utf-8 -*- from queue import Queue -from typing import Optional, Iterable, List, Union +from typing import Optional, Iterable, List, Union, Any from .._pages.chromium_base import ChromiumBase @@ -9,6 +9,7 @@ class Console(object): listening: bool = ... _owner: ChromiumBase = ... _caught: Optional[Queue] = ... + _not_enabled: bool = ... def __init__(self, owner: ChromiumBase) -> None: """ @@ -56,3 +57,6 @@ class ConsoleData(object): def __init__(self, data: dict) -> None: ... def __getattr__(self, item: str) -> str: ... + + @property + def body(self) -> Any: ...