页面对象可用xpath直接返回文本或注释

This commit is contained in:
g1879 2023-04-29 16:53:34 +08:00
parent c021d83212
commit 561c20377a
2 changed files with 24 additions and 3 deletions

View File

@ -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)

View File

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