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') exceptionDetails = res.get('exceptionDetails')
if exceptionDetails: if exceptionDetails:
print(script)
raise RuntimeError(f'javascript错误: {exceptionDetails}') raise RuntimeError(f'javascript错误: {exceptionDetails}')
try: try:
@ -1397,21 +1398,21 @@ class ChromiumScroll(object):
def __init__(self, page_or_ele): 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): if isinstance(page_or_ele, ChromiumElement):
self.t1 = self.t2 = 'this' 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: else:
self.t1 = 'window' self.t1 = 'window'
self.t2 = 'document.documentElement' self.t2 = 'document.documentElement'
def _run_js(self, js): def _run_js(self, js):
js = js.format(self.t1, self.t2, self.t2) js = js.format(self.t1, self.t2, self.t2)
if self.t1 == 'this': # 在元素上滚动 self._driver.run_js(js)
self.page_or_ele.run_js(js)
else:
self.page_or_ele.run_js(js, as_expr=True)
def to_top(self): def to_top(self):
"""滚动到顶端,水平位置不变""" """滚动到顶端,水平位置不变"""

View File

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

View File

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