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