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: ...