From cd9439be5cfa7f7e4269b19dad8a28e07f2c94c3 Mon Sep 17 00:00:00 2001 From: g1879 Date: Thu, 14 Dec 2023 23:25:11 +0800 Subject: [PATCH] =?UTF-8?q?4.0.0b21run=5Fjs()=E7=AD=89=E5=BE=85=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DrissionPage/__init__.py | 2 +- DrissionPage/_elements/chromium_element.py | 12 +++++++++--- DrissionPage/_pages/chromium_base.py | 11 ++++++++--- setup.py | 2 +- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/DrissionPage/__init__.py b/DrissionPage/__init__.py index 1c99f50..edd6064 100644 --- a/DrissionPage/__init__.py +++ b/DrissionPage/__init__.py @@ -13,4 +13,4 @@ from ._configs.chromium_options import ChromiumOptions from ._configs.session_options import SessionOptions __all__ = ['ChromiumPage', 'ChromiumOptions', 'SessionOptions', 'SessionPage', 'WebPage', '__version__'] -__version__ = '4.0.0b20' +__version__ = '4.0.0b21' diff --git a/DrissionPage/_elements/chromium_element.py b/DrissionPage/_elements/chromium_element.py index 9769a80..c12333c 100644 --- a/DrissionPage/_elements/chromium_element.py +++ b/DrissionPage/_elements/chromium_element.py @@ -1279,13 +1279,19 @@ def run_js(page_or_ele, script, as_expr=False, timeout=None, args=None): :return: js执行结果 """ if isinstance(page_or_ele, (ChromiumElement, ShadowRoot)): + is_page = False page = page_or_ele.page obj_id = page_or_ele._obj_id - is_page = False else: - page = page_or_ele - obj_id = page_or_ele._root_id is_page = True + page = page_or_ele + end_time = perf_counter() + 5 + while perf_counter() < end_time: + obj_id = page_or_ele._root_id + if obj_id is not None: + break + else: + raise RuntimeError('js运行环境出错。') if page.states.has_alert: raise AlertExistsError diff --git a/DrissionPage/_pages/chromium_base.py b/DrissionPage/_pages/chromium_base.py index 4843b65..50bc643 100644 --- a/DrissionPage/_pages/chromium_base.py +++ b/DrissionPage/_pages/chromium_base.py @@ -155,9 +155,12 @@ class ChromiumBase(BasePage): return timeout = timeout if timeout >= .5 else .5 self._is_reading = True + end_time = perf_counter() + timeout try: b_id = self.run_cdp('DOM.getDocument', _timeout=timeout)['root']['backendNodeId'] - self._root_id = self.run_cdp('DOM.resolveNode', backendNodeId=b_id, _timeout=1)['object']['objectId'] + timeout = end_time - perf_counter() + timeout = .5 if timeout < 0 else timeout + self._root_id = self.run_cdp('DOM.resolveNode', backendNodeId=b_id, _timeout=timeout)['object']['objectId'] r = self.run_cdp('Page.getFrameTree') for i in findall(r"'id': '(.*?)'", str(r)): @@ -168,8 +171,10 @@ class ChromiumBase(BasePage): except: if self._debug: - print('获取文档失败') - return False + print('获取文档失败。') + print('请把报错信息和重现方法告知作者,感谢。\nhttps://gitee.com/g1879/DrissionPage/issues/new') + raise + # return False finally: self._is_loading = False diff --git a/setup.py b/setup.py index 800c5f1..7fc5b6b 100644 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ with open("README.md", "r", encoding='utf-8') as fh: setup( name="DrissionPage", - version="4.0.0b20", + version="4.0.0b21", author="g1879", author_email="g1879@qq.com", description="Python based web automation tool. It can control the browser and send and receive data packets.",