From 561c20377ab65672d52ee32b5f2e76896067f3a2 Mon Sep 17 00:00:00 2001 From: g1879 Date: Sat, 29 Apr 2023 16:53:34 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=AF=B9=E8=B1=A1=E5=8F=AF?= =?UTF-8?q?=E7=94=A8xpath=E7=9B=B4=E6=8E=A5=E8=BF=94=E5=9B=9E=E6=96=87?= =?UTF-8?q?=E6=9C=AC=E6=88=96=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DrissionPage/chromium_element.py | 25 +++++++++++++++++++++++-- DrissionPage/chromium_element.pyi | 2 +- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/DrissionPage/chromium_element.py b/DrissionPage/chromium_element.py index 32e6ef3..59f4eb0 100644 --- a/DrissionPage/chromium_element.py +++ b/DrissionPage/chromium_element.py @@ -39,7 +39,11 @@ class ChromiumElement(DrissionElement): self._tag = None self._wait = None - if node_id: + if node_id and obj_id and backend_id: + self._node_id = node_id + self._obj_id = obj_id + self._backend_id = backend_id + elif node_id: self._node_id = node_id self._obj_id = self._get_obj_id(node_id) self._backend_id = self._get_backend_id(self._node_id) @@ -1163,7 +1167,24 @@ def make_chromium_ele(page, node_id=None, obj_id=None): :param obj_id: 元素的object id :return: ChromiumElement对象或ChromiumFrame对象 """ - ele = ChromiumElement(page, obj_id=obj_id, node_id=node_id) + if node_id: + node = page.run_cdp('DOM.describeNode', nodeId=node_id) + if node['node']['nodeName'] in ('#text', '#comment'): + return node['node']['nodeValue'] + backend_id = node['node']['backendNodeId'] + obj_id = page.run_cdp('DOM.resolveNode', nodeId=node_id)['object']['objectId'] + + elif obj_id: + node = page.run_cdp('DOM.describeNode', objectId=obj_id) + if node['node']['nodeName'] in ('#text', '#comment'): + return node['node']['nodeValue'] + backend_id = node['node']['backendNodeId'] + node_id = node['node']['nodeId'] + + else: + raise ElementLossError + + ele = ChromiumElement(page, obj_id=obj_id, node_id=node_id, backend_id=backend_id) if ele.tag in FRAME_ELEMENT: from .chromium_frame import ChromiumFrame ele = ChromiumFrame(page, ele) diff --git a/DrissionPage/chromium_element.pyi b/DrissionPage/chromium_element.pyi index ca3743b..53538ff 100644 --- a/DrissionPage/chromium_element.pyi +++ b/DrissionPage/chromium_element.pyi @@ -360,7 +360,7 @@ def find_by_css(ele: ChromiumElement, def make_chromium_ele(page: ChromiumBase, node_id: str = ..., obj_id: str = ...) \ - -> Union[ChromiumElement, ChromiumFrame]: ... + -> Union[ChromiumElement, ChromiumFrame, str]: ... def make_js_for_find_ele_by_xpath(xpath: str, type_txt: str, node_txt: str) -> str: ...