ChromiumFrame支持滚动

This commit is contained in:
g1879 2023-01-10 18:35:15 +08:00
parent 9ddbe27b6c
commit 6ced0a0b43
3 changed files with 31 additions and 18 deletions

View File

@ -1300,6 +1300,7 @@ def run_js(page_or_ele, script, as_expr=False, timeout=None, args=None, not_chan
exceptionDetails = res.get('exceptionDetails')
if exceptionDetails:
print(script)
raise RuntimeError(f'javascript错误: {exceptionDetails}')
try:
@ -1397,21 +1398,21 @@ class ChromiumScroll(object):
def __init__(self, page_or_ele):
"""
:param page_or_ele: ChromePage或ChromiumElement
:param page_or_ele: 页面对象元素对象或frame对象
"""
self.page_or_ele = page_or_ele
self._driver = page_or_ele
if isinstance(page_or_ele, ChromiumElement):
self.t1 = self.t2 = 'this'
elif 'ChromiumFrame' in str(type(page_or_ele)):
self._driver = page_or_ele.doc_ele
self.t1 = self.t2 = 'this.documentElement'
else:
self.t1 = 'window'
self.t2 = 'document.documentElement'
def _run_js(self, js):
js = js.format(self.t1, self.t2, self.t2)
if self.t1 == 'this': # 在元素上滚动
self.page_or_ele.run_js(js)
else:
self.page_or_ele.run_js(js, as_expr=True)
self._driver.run_js(js)
def to_top(self):
"""滚动到顶端,水平位置不变"""

View File

@ -381,10 +381,10 @@ def _send_key(ele: ChromiumElement, modifier: int, key: str) -> None: ...
class ChromiumScroll(object):
def __init__(self, page_or_ele: Union[ChromiumBase, ChromiumElement]):
def __init__(self, page_or_ele: Union[ChromiumBase, ChromiumElement, ChromiumFrame]):
self.t1: str = ...
self.t2: str = ...
self.page_or_ele: Union[ChromiumPage, ChromiumElement] = ...
self._driver: Union[ChromiumPage, ChromiumElement, ChromiumFrame] = ...
def _run_js(self, js: str): ...

View File

@ -256,3 +256,15 @@ iframe.refresh()
- `*args`:参数,按顺序在 js 文本中对应 argument[0]、argument[1]...
**返回:** 运行的结果
## 📍 `scroll`
`ChromiumFrame`的滚动方法与页面或元素是一致的。
**示例:**
使`<iframe>`元素向下滚动 300 像素
```python
iframe.scroll.down(300)
```