mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
优先使用backend_id
This commit is contained in:
parent
cb6fe6d68b
commit
5db489c4d9
@ -115,10 +115,10 @@ class ChromiumBase(BasePage):
|
||||
|
||||
while True:
|
||||
try:
|
||||
root_id = self.run_cdp('DOM.getDocument')['root']['nodeId']
|
||||
b_id = self.run_cdp('DOM.getDocument')['root']['backendNodeId']
|
||||
self._root_id = self.run_cdp('DOM.resolveNode', backendNodeId=b_id)['object']['objectId']
|
||||
if self._debug_recorder:
|
||||
self._debug_recorder.add_data((perf_counter(), '信息', f'root_id:{root_id}'))
|
||||
self._root_id = self.run_cdp('DOM.resolveNode', nodeId=root_id)['object']['objectId']
|
||||
self._debug_recorder.add_data((perf_counter(), '信息', f'root_id:{self._root_id}'))
|
||||
break
|
||||
|
||||
except Exception:
|
||||
@ -962,11 +962,11 @@ class ChromiumPageScroll(ChromiumScroll):
|
||||
ele.run_js('this.scrollIntoView({behavior: "auto", block: "nearest", inline: "nearest"});')
|
||||
x, y = ele.location
|
||||
try:
|
||||
ID = ele.page.run_cdp('DOM.getNodeForLocation', x=x, y=y).get('nodeId', None)
|
||||
ID = ele.page.run_cdp('DOM.getNodeForLocation', x=x, y=y).get('backendNodeId', None)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if ID != ele.ids.node_id:
|
||||
if ID != ele.ids.backend_id:
|
||||
ele.run_js('this.scrollIntoView({behavior: "auto", block: "center", inline: "center"});')
|
||||
|
||||
|
||||
|
@ -22,7 +22,7 @@ class ChromiumElement(DrissionElement):
|
||||
"""ChromePage页面对象中的元素对象"""
|
||||
|
||||
def __init__(self, page, node_id=None, obj_id=None, backend_id=None):
|
||||
"""初始化,node_id和obj_id必须至少传入一个
|
||||
"""初始化,node_id、obj_id和backend_id必须至少传入一个
|
||||
:param page: 元素所在ChromePage页面对象
|
||||
:param node_id: cdp中的node id
|
||||
:param obj_id: js中的object id
|
||||
@ -76,13 +76,14 @@ class ChromiumElement(DrissionElement):
|
||||
def tag(self):
|
||||
"""返回元素tag"""
|
||||
if self._tag is None:
|
||||
self._tag = self.page.run_cdp('DOM.describeNode', nodeId=self._node_id)['node']['localName'].lower()
|
||||
self._tag = self.page.run_cdp('DOM.describeNode',
|
||||
backendNodeId=self._backend_id)['node']['localName'].lower()
|
||||
return self._tag
|
||||
|
||||
@property
|
||||
def html(self):
|
||||
"""返回元素outerHTML文本"""
|
||||
return self.page.run_cdp('DOM.getOuterHTML', nodeId=self._node_id)['outerHTML']
|
||||
return self.page.run_cdp('DOM.getOuterHTML', backendNodeId=self._backend_id)['outerHTML']
|
||||
|
||||
@property
|
||||
def inner_html(self):
|
||||
@ -114,7 +115,7 @@ class ChromiumElement(DrissionElement):
|
||||
@property
|
||||
def size(self):
|
||||
"""返回元素宽和高"""
|
||||
model = self.page.run_cdp('DOM.getBoxModel', nodeId=self._node_id)['model']
|
||||
model = self.page.run_cdp('DOM.getBoxModel', backendNodeId=self._backend_id)['model']
|
||||
return model['height'], model['width']
|
||||
|
||||
@property
|
||||
@ -153,7 +154,7 @@ class ChromiumElement(DrissionElement):
|
||||
@property
|
||||
def shadow_root(self):
|
||||
"""返回当前元素的shadow_root元素对象"""
|
||||
info = self.page.run_cdp('DOM.describeNode', nodeId=self.ids.node_id)['node']
|
||||
info = self.page.run_cdp('DOM.describeNode', backendNodeId=self._backend_id)['node']
|
||||
if not info.get('shadowRoots', None):
|
||||
return None
|
||||
|
||||
@ -411,7 +412,7 @@ class ChromiumElement(DrissionElement):
|
||||
while not self.run_js(js) and perf_counter() < end_time:
|
||||
sleep(.1)
|
||||
|
||||
node = self.page.run_cdp('DOM.describeNode', nodeId=self._node_id)['node']
|
||||
node = self.page.run_cdp('DOM.describeNode', backendNodeId=self._backend_id)['node']
|
||||
frame = node.get('frameId', None)
|
||||
frame = frame or self.page.tab_id
|
||||
try:
|
||||
@ -479,7 +480,7 @@ class ChromiumElement(DrissionElement):
|
||||
return self._set_file_input(vals)
|
||||
|
||||
try:
|
||||
self.page.run_cdp('DOM.focus', nodeId=self._node_id)
|
||||
self.page.run_cdp('DOM.focus', backendNodeId=self._backend_id)
|
||||
except Exception:
|
||||
self.click(by_js=True)
|
||||
|
||||
@ -652,7 +653,7 @@ class ChromiumElement(DrissionElement):
|
||||
if isinstance(files, str):
|
||||
files = files.split('\n')
|
||||
files = [str(Path(i).absolute()) for i in files]
|
||||
self.page.run_cdp('DOM.setFileInputFiles', files=files, nodeId=self._node_id)
|
||||
self.page.run_cdp('DOM.setFileInputFiles', files=files, backendNodeId=self._backend_id)
|
||||
|
||||
# ---------------准备废弃-----------------
|
||||
def wait_ele(self, loc_or_ele, timeout=None):
|
||||
@ -1043,8 +1044,7 @@ class ChromiumShadowRootElement(BaseElement):
|
||||
else:
|
||||
results = []
|
||||
for i in css_paths:
|
||||
node_id = self.page.run_cdp('DOM.querySelector',
|
||||
nodeId=self._node_id, selector=i)['nodeId']
|
||||
node_id = self.page.run_cdp('DOM.querySelector', nodeId=self._node_id, selector=i)['nodeId']
|
||||
if node_id:
|
||||
results.append(make_chromium_ele(self.page, node_id=node_id))
|
||||
return results
|
||||
@ -1484,7 +1484,7 @@ class ShadowRootElementStates(object):
|
||||
def is_alive(self):
|
||||
"""返回元素是否仍在DOM中"""
|
||||
try:
|
||||
self._ele.page.run_cdp('DOM.describeNode', nodeId=self._ele.ids.node_id)
|
||||
self._ele.page.run_cdp('DOM.describeNode', backendNodeId=self._ele.ids.backend_id)
|
||||
return True
|
||||
except Exception:
|
||||
return False
|
||||
@ -1591,7 +1591,7 @@ class Locations(object):
|
||||
:param quad: 方框类型,margin border padding
|
||||
:return: 四个角坐标,大小为0时返回None
|
||||
"""
|
||||
return self._ele.page.run_cdp('DOM.getBoxModel', nodeId=self._ele.ids.node_id)['model'][quad]
|
||||
return self._ele.page.run_cdp('DOM.getBoxModel', backendNodeId=self._ele.ids.backend_id)['model'][quad]
|
||||
|
||||
def _get_page_coord(self, x, y):
|
||||
"""根据视口坐标获取绝对坐标"""
|
||||
|
@ -15,7 +15,7 @@ class ChromiumFrame(ChromiumBase):
|
||||
def __init__(self, page, ele):
|
||||
self.page = page
|
||||
self.address = page.address
|
||||
node = page.run_cdp('DOM.describeNode', nodeId=ele.ids.node_id)['node']
|
||||
node = page.run_cdp('DOM.describeNode', backendNodeId=ele.ids.backend_id)['node']
|
||||
self.frame_id = node['frameId']
|
||||
self._backend_id = ele.ids.backend_id
|
||||
self._frame_ele = ele
|
||||
@ -69,7 +69,7 @@ class ChromiumFrame(ChromiumBase):
|
||||
def _reload(self):
|
||||
"""重新获取document"""
|
||||
self._frame_ele = ChromiumElement(self.page, backend_id=self._backend_id)
|
||||
node = self.page.run_cdp('DOM.describeNode', nodeId=self._frame_ele.ids.node_id)['node']
|
||||
node = self.page.run_cdp('DOM.describeNode', backendNodeId=self._frame_ele.ids.backend_id)['node']
|
||||
|
||||
if self._is_inner_frame():
|
||||
self._is_diff_domain = False
|
||||
@ -88,7 +88,7 @@ class ChromiumFrame(ChromiumBase):
|
||||
self._reload()
|
||||
|
||||
try:
|
||||
self.page.run_cdp('DOM.describeNode', nodeId=self.ids.node_id)
|
||||
self.page.run_cdp('DOM.describeNode', backendNodeId=self.ids.backend_id)
|
||||
except Exception:
|
||||
self._reload()
|
||||
# sleep(2)
|
||||
@ -164,8 +164,7 @@ class ChromiumFrame(ChromiumBase):
|
||||
"""返回元素outerHTML文本"""
|
||||
self._check_ok()
|
||||
tag = self.tag
|
||||
out_html = self.page.run_cdp('DOM.getOuterHTML',
|
||||
nodeId=self.frame_ele.ids.node_id)['outerHTML']
|
||||
out_html = self.page.run_cdp('DOM.getOuterHTML', backendNodeId=self.frame_ele.ids.backend_id)['outerHTML']
|
||||
sign = search(rf'<{tag}.*?>', out_html).group(0)
|
||||
return f'{sign}{self.inner_html}</{tag}>'
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user