mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
3.0.32修复用run_js()从s转d模式时的异常
This commit is contained in:
parent
6ced0a0b43
commit
7023c7c1c6
@ -196,19 +196,31 @@ class ActionChains:
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def up(self, pixel):
|
def up(self, pixel):
|
||||||
"""鼠标向上移动若干像素"""
|
"""鼠标向上移动若干像素 \n
|
||||||
|
:param pixel: 鼠标移动的像素值
|
||||||
|
:return: self
|
||||||
|
"""
|
||||||
return self.move(0, -pixel)
|
return self.move(0, -pixel)
|
||||||
|
|
||||||
def down(self, pixel):
|
def down(self, pixel):
|
||||||
"""鼠标向下移动若干像素"""
|
"""鼠标向下移动若干像素 \n
|
||||||
|
:param pixel: 鼠标移动的像素值
|
||||||
|
:return: self
|
||||||
|
"""
|
||||||
return self.move(0, pixel)
|
return self.move(0, pixel)
|
||||||
|
|
||||||
def left(self, pixel):
|
def left(self, pixel):
|
||||||
"""鼠标向左移动若干像素"""
|
"""鼠标向左移动若干像素 \n
|
||||||
|
:param pixel: 鼠标移动的像素值
|
||||||
|
:return: self
|
||||||
|
"""
|
||||||
return self.move(-pixel, 0)
|
return self.move(-pixel, 0)
|
||||||
|
|
||||||
def right(self, pixel):
|
def right(self, pixel):
|
||||||
"""鼠标向右移动若干像素"""
|
"""鼠标向右移动若干像素 \n
|
||||||
|
:param pixel: 鼠标移动的像素值
|
||||||
|
:return: self
|
||||||
|
"""
|
||||||
return self.move(pixel, 0)
|
return self.move(pixel, 0)
|
||||||
|
|
||||||
def key_down(self, key):
|
def key_down(self, key):
|
||||||
|
@ -71,50 +71,50 @@ class DrissionElement(BaseElement):
|
|||||||
|
|
||||||
def texts(self, text_node_only: bool = False) -> list: ...
|
def texts(self, text_node_only: bool = False) -> list: ...
|
||||||
|
|
||||||
def parent(self, level_or_loc: Union[tuple, str, int] = 1) -> Union['DrissionElement', None]: ...
|
def parent(self, level_or_loc: Union[tuple, str, int] = 1) -> Union[DrissionElement, None]: ...
|
||||||
|
|
||||||
def prev(self,
|
def prev(self,
|
||||||
index: int = 1,
|
index: int = 1,
|
||||||
filter_loc: Union[tuple, str] = '',
|
filter_loc: Union[tuple, str] = '',
|
||||||
timeout: float = 0) -> Union['DrissionElement', str, None]: ...
|
timeout: float = 0) -> Union[DrissionElement, str, None]: ...
|
||||||
|
|
||||||
def next(self,
|
def next(self,
|
||||||
index: int = 1,
|
index: int = 1,
|
||||||
filter_loc: Union[tuple, str] = '',
|
filter_loc: Union[tuple, str] = '',
|
||||||
timeout: float = 0) -> Union['DrissionElement', str, None]: ...
|
timeout: float = 0) -> Union[DrissionElement, str, None]: ...
|
||||||
|
|
||||||
def before(self,
|
def before(self,
|
||||||
index: int = 1,
|
index: int = 1,
|
||||||
filter_loc: Union[tuple, str] = '',
|
filter_loc: Union[tuple, str] = '',
|
||||||
timeout: float = None) -> Union['DrissionElement', str, None]: ...
|
timeout: float = None) -> Union[DrissionElement, str, None]: ...
|
||||||
|
|
||||||
def after(self,
|
def after(self,
|
||||||
index: int = 1,
|
index: int = 1,
|
||||||
filter_loc: Union[tuple, str] = '',
|
filter_loc: Union[tuple, str] = '',
|
||||||
timeout: float = None) -> Union['DrissionElement', str, None]: ...
|
timeout: float = None) -> Union[DrissionElement, str, None]: ...
|
||||||
|
|
||||||
def prevs(self,
|
def prevs(self,
|
||||||
filter_loc: Union[tuple, str] = '',
|
filter_loc: Union[tuple, str] = '',
|
||||||
timeout: float = 0) -> List[Union['DrissionElement', str]]: ...
|
timeout: float = 0) -> List[Union[DrissionElement, str]]: ...
|
||||||
|
|
||||||
def nexts(self,
|
def nexts(self,
|
||||||
filter_loc: Union[tuple, str] = '',
|
filter_loc: Union[tuple, str] = '',
|
||||||
timeout: float = 0) -> List[Union['DrissionElement', str]]: ...
|
timeout: float = 0) -> List[Union[DrissionElement, str]]: ...
|
||||||
|
|
||||||
def befores(self,
|
def befores(self,
|
||||||
filter_loc: Union[tuple, str] = '',
|
filter_loc: Union[tuple, str] = '',
|
||||||
timeout: float = None) -> List[Union['DrissionElement', str]]: ...
|
timeout: float = None) -> List[Union[DrissionElement, str]]: ...
|
||||||
|
|
||||||
def afters(self,
|
def afters(self,
|
||||||
filter_loc: Union[tuple, str] = '',
|
filter_loc: Union[tuple, str] = '',
|
||||||
timeout: float = None) -> List[Union['DrissionElement', str]]: ...
|
timeout: float = None) -> List[Union[DrissionElement, str]]: ...
|
||||||
|
|
||||||
def _get_brothers(self,
|
def _get_brothers(self,
|
||||||
index: int = None,
|
index: int = None,
|
||||||
filter_loc: Union[tuple, str] = '',
|
filter_loc: Union[tuple, str] = '',
|
||||||
direction: str = 'following',
|
direction: str = 'following',
|
||||||
brother: bool = True,
|
brother: bool = True,
|
||||||
timeout: float = 0.5) -> List[Union['DrissionElement', str]]: ...
|
timeout: float = 0.5) -> List[Union[DrissionElement, str]]: ...
|
||||||
|
|
||||||
# ----------------以下属性或方法由后代实现----------------
|
# ----------------以下属性或方法由后代实现----------------
|
||||||
@property
|
@property
|
||||||
|
@ -295,6 +295,7 @@ class ChromiumBase(BasePage):
|
|||||||
:param args: 参数,按顺序在js文本中对应argument[0]、argument[1]...
|
:param args: 参数,按顺序在js文本中对应argument[0]、argument[1]...
|
||||||
:return: 运行的结果
|
:return: 运行的结果
|
||||||
"""
|
"""
|
||||||
|
self._to_d_mode()
|
||||||
return run_js(self, script, as_expr, self.timeouts.script, args)
|
return run_js(self, script, as_expr, self.timeouts.script, args)
|
||||||
|
|
||||||
def run_async_js(self, script, as_expr=False, *args):
|
def run_async_js(self, script, as_expr=False, *args):
|
||||||
@ -304,6 +305,7 @@ class ChromiumBase(BasePage):
|
|||||||
:param args: 参数,按顺序在js文本中对应argument[0]、argument[1]...
|
:param args: 参数,按顺序在js文本中对应argument[0]、argument[1]...
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
|
self._to_d_mode()
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
Thread(target=run_js, args=(self, script, as_expr, self.timeouts.script, args)).start()
|
Thread(target=run_js, args=(self, script, as_expr, self.timeouts.script, args)).start()
|
||||||
|
|
||||||
@ -650,6 +652,10 @@ class ChromiumBase(BasePage):
|
|||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def _to_d_mode(self):
|
||||||
|
"""用于使WebPage切换到d模式"""
|
||||||
|
return self._driver
|
||||||
|
|
||||||
|
|
||||||
class Timeout(object):
|
class Timeout(object):
|
||||||
"""用于保存d模式timeout信息的类"""
|
"""用于保存d模式timeout信息的类"""
|
||||||
|
@ -187,6 +187,8 @@ class ChromiumBase(BasePage):
|
|||||||
show_errmsg: bool = False,
|
show_errmsg: bool = False,
|
||||||
timeout: float = None) -> Union[bool, None]: ...
|
timeout: float = None) -> Union[bool, None]: ...
|
||||||
|
|
||||||
|
def _to_d_mode(self): ...
|
||||||
|
|
||||||
|
|
||||||
class Timeout(object):
|
class Timeout(object):
|
||||||
|
|
||||||
|
@ -258,6 +258,7 @@ class DriverElement(DrissionElement):
|
|||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
:return: 兄弟元素
|
:return: 兄弟元素
|
||||||
"""
|
"""
|
||||||
|
index, filter_loc = _exchange_arguments(index, filter_loc)
|
||||||
return super().prev(index, filter_loc, timeout)
|
return super().prev(index, filter_loc, timeout)
|
||||||
|
|
||||||
def next(self, index=1, filter_loc='', timeout=0):
|
def next(self, index=1, filter_loc='', timeout=0):
|
||||||
@ -267,6 +268,7 @@ class DriverElement(DrissionElement):
|
|||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
:return: 兄弟元素
|
:return: 兄弟元素
|
||||||
"""
|
"""
|
||||||
|
index, filter_loc = _exchange_arguments(index, filter_loc)
|
||||||
return super().next(index, filter_loc, timeout)
|
return super().next(index, filter_loc, timeout)
|
||||||
|
|
||||||
def before(self, index=1, filter_loc='', timeout=None):
|
def before(self, index=1, filter_loc='', timeout=None):
|
||||||
@ -276,6 +278,7 @@ class DriverElement(DrissionElement):
|
|||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
:return: 本元素前面的某个元素或节点
|
:return: 本元素前面的某个元素或节点
|
||||||
"""
|
"""
|
||||||
|
index, filter_loc = _exchange_arguments(index, filter_loc)
|
||||||
return super().before(index, filter_loc, timeout)
|
return super().before(index, filter_loc, timeout)
|
||||||
|
|
||||||
def after(self, index=1, filter_loc='', timeout=None):
|
def after(self, index=1, filter_loc='', timeout=None):
|
||||||
@ -285,6 +288,7 @@ class DriverElement(DrissionElement):
|
|||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
:return: 本元素后面的某个元素或节点
|
:return: 本元素后面的某个元素或节点
|
||||||
"""
|
"""
|
||||||
|
index, filter_loc = _exchange_arguments(index, filter_loc)
|
||||||
return super().after(index, filter_loc, timeout)
|
return super().after(index, filter_loc, timeout)
|
||||||
|
|
||||||
def prevs(self, filter_loc='', timeout=0):
|
def prevs(self, filter_loc='', timeout=0):
|
||||||
@ -325,6 +329,7 @@ class DriverElement(DrissionElement):
|
|||||||
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
||||||
:return: DriverElement对象
|
:return: DriverElement对象
|
||||||
"""
|
"""
|
||||||
|
index, filter_loc = _exchange_arguments(index, filter_loc)
|
||||||
eles = self._get_relative_eles('left', filter_loc)
|
eles = self._get_relative_eles('left', filter_loc)
|
||||||
return eles[index - 1] if index <= len(eles) else None
|
return eles[index - 1] if index <= len(eles) else None
|
||||||
|
|
||||||
@ -334,6 +339,7 @@ class DriverElement(DrissionElement):
|
|||||||
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
||||||
:return: DriverElement对象
|
:return: DriverElement对象
|
||||||
"""
|
"""
|
||||||
|
index, filter_loc = _exchange_arguments(index, filter_loc)
|
||||||
eles = self._get_relative_eles('right', filter_loc)
|
eles = self._get_relative_eles('right', filter_loc)
|
||||||
return eles[index - 1] if index <= len(eles) else None
|
return eles[index - 1] if index <= len(eles) else None
|
||||||
|
|
||||||
@ -343,6 +349,7 @@ class DriverElement(DrissionElement):
|
|||||||
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
||||||
:return: DriverElement对象
|
:return: DriverElement对象
|
||||||
"""
|
"""
|
||||||
|
index, filter_loc = _exchange_arguments(index, filter_loc)
|
||||||
eles = self._get_relative_eles('left', filter_loc)
|
eles = self._get_relative_eles('left', filter_loc)
|
||||||
return eles[index - 1] if index <= len(eles) else None
|
return eles[index - 1] if index <= len(eles) else None
|
||||||
|
|
||||||
@ -352,6 +359,7 @@ class DriverElement(DrissionElement):
|
|||||||
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
||||||
:return: DriverElement对象
|
:return: DriverElement对象
|
||||||
"""
|
"""
|
||||||
|
index, filter_loc = _exchange_arguments(index, filter_loc)
|
||||||
eles = self._get_relative_eles('left', filter_loc)
|
eles = self._get_relative_eles('left', filter_loc)
|
||||||
return eles[index - 1] if index <= len(eles) else None
|
return eles[index - 1] if index <= len(eles) else None
|
||||||
|
|
||||||
@ -361,6 +369,7 @@ class DriverElement(DrissionElement):
|
|||||||
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
||||||
:return: DriverElement对象
|
:return: DriverElement对象
|
||||||
"""
|
"""
|
||||||
|
index, filter_loc = _exchange_arguments(index, filter_loc)
|
||||||
eles = self._get_relative_eles('near', filter_loc)
|
eles = self._get_relative_eles('near', filter_loc)
|
||||||
return eles[index - 1] if index <= len(eles) else None
|
return eles[index - 1] if index <= len(eles) else None
|
||||||
|
|
||||||
@ -1245,3 +1254,14 @@ class Scroll(object):
|
|||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
self.driver.run_script(f'{self.t1}.scrollBy({pixel},0);')
|
self.driver.run_script(f'{self.t1}.scrollBy({pixel},0);')
|
||||||
|
|
||||||
|
|
||||||
|
def _exchange_arguments(index, filter_loc):
|
||||||
|
# 此方法用于兼容MixPage参数顺序相反的情况
|
||||||
|
if isinstance(index, str) and isinstance(filter_loc, int):
|
||||||
|
index, filter_loc = filter_loc, index
|
||||||
|
elif isinstance(index, int) and filter_loc == 1:
|
||||||
|
filter_loc = ''
|
||||||
|
elif isinstance(filter_loc, str) and index == '':
|
||||||
|
index = 1
|
||||||
|
return index, filter_loc
|
||||||
|
@ -44,7 +44,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
|
|||||||
self._response = None
|
self._response = None
|
||||||
|
|
||||||
if self._mode == 'd':
|
if self._mode == 'd':
|
||||||
self._driver
|
self._to_d_mode()
|
||||||
|
|
||||||
def __call__(self, loc_or_str, timeout=None):
|
def __call__(self, loc_or_str, timeout=None):
|
||||||
"""在内部查找元素 \n
|
"""在内部查找元素 \n
|
||||||
|
@ -34,9 +34,9 @@ from DrissionPage import ActionChains
|
|||||||
|
|
||||||
**参数:**
|
**参数:**
|
||||||
|
|
||||||
| 名称 | 数据类型 | 说明 |
|
| 名称 | 数据类型 | 默认值 | 说明 |
|
||||||
| ------ | ---------------------------- | ------------ |
|
| ------ | ---------------------------- | --- | ------------ |
|
||||||
| `page` | `WebPage`对象或`ChromiumPage`对象 | 动作链要操作的浏览器页面 |
|
| `page` | `WebPage`对象或`ChromiumPage`对象 | 无 | 动作链要操作的浏览器页面 |
|
||||||
|
|
||||||
**示例:**
|
**示例:**
|
||||||
|
|
||||||
@ -80,10 +80,10 @@ ac.move_to(ele_or_loc=ele) # 使鼠标移动过到 ele 元素上
|
|||||||
|
|
||||||
**参数:**
|
**参数:**
|
||||||
|
|
||||||
| 名称 | 数据类型 | 说明 |
|
| 名称 | 数据类型 | 默认值 | 说明 |
|
||||||
| ---------- | ----- | ----- |
|
| ---------- | ----- | --- | ---------------- |
|
||||||
| `offset_x` | `int` | 偏移量 x |
|
| `offset_x` | `int` | 0 | x 轴偏移量,向右为正,向左为负 |
|
||||||
| `offset_y` | `int` | 偏移量 y |
|
| `offset_y` | `int` | 0 | y 轴偏移量,向下为正,向上为负 |
|
||||||
|
|
||||||
**返回:**
|
**返回:**
|
||||||
|
|
||||||
@ -93,10 +93,8 @@ ac.move_to(ele_or_loc=ele) # 使鼠标移动过到 ele 元素上
|
|||||||
|
|
||||||
**示例:**
|
**示例:**
|
||||||
|
|
||||||
鼠标向右移动 300 像素
|
|
||||||
|
|
||||||
```python
|
```python
|
||||||
ac.move(300, 0)
|
ac.move(300, 0) # 鼠标向右移动 300 像素
|
||||||
```
|
```
|
||||||
|
|
||||||
## 📍 `up()`
|
## 📍 `up()`
|
||||||
@ -105,9 +103,17 @@ ac.move(300, 0)
|
|||||||
|
|
||||||
**参数:**
|
**参数:**
|
||||||
|
|
||||||
- `pixel`:移动距离
|
| 名称 | 数据类型 | 默认值 | 说明 |
|
||||||
|
| ------- | ----- | --- | -------- |
|
||||||
|
| `pixel` | `int` | 无 | 鼠标移动的像素值 |
|
||||||
|
|
||||||
**返回:**`ActionChains`对象自己
|
**返回:**
|
||||||
|
|
||||||
|
| 数据类型 | 说明 |
|
||||||
|
| -------------- | ------- |
|
||||||
|
| `ActionChains` | 动作链对象本身 |
|
||||||
|
|
||||||
|
**示例:**
|
||||||
|
|
||||||
```python
|
```python
|
||||||
ac.up(50) # 鼠标向上移动 50 像素
|
ac.up(50) # 鼠标向上移动 50 像素
|
||||||
@ -119,9 +125,15 @@ ac.up(50) # 鼠标向上移动 50 像素
|
|||||||
|
|
||||||
**参数:**
|
**参数:**
|
||||||
|
|
||||||
- `pixel`:移动距离
|
| 名称 | 数据类型 | 默认值 | 说明 |
|
||||||
|
| ------- | ----- | --- | -------- |
|
||||||
|
| `pixel` | `int` | 无 | 鼠标移动的像素值 |
|
||||||
|
|
||||||
**返回:**`ActionChains`对象自己
|
**返回:**
|
||||||
|
|
||||||
|
| 数据类型 | 说明 |
|
||||||
|
| -------------- | ------- |
|
||||||
|
| `ActionChains` | 动作链对象本身 |
|
||||||
|
|
||||||
## 📍 `left()`
|
## 📍 `left()`
|
||||||
|
|
||||||
@ -129,9 +141,15 @@ ac.up(50) # 鼠标向上移动 50 像素
|
|||||||
|
|
||||||
**参数:**
|
**参数:**
|
||||||
|
|
||||||
- `pixel`:移动距离
|
| 名称 | 数据类型 | 默认值 | 说明 |
|
||||||
|
| ------- | ----- | --- | -------- |
|
||||||
|
| `pixel` | `int` | 无 | 鼠标移动的像素值 |
|
||||||
|
|
||||||
**返回:**`ActionChains`对象自己
|
**返回:**
|
||||||
|
|
||||||
|
| 数据类型 | 说明 |
|
||||||
|
| -------------- | ------- |
|
||||||
|
| `ActionChains` | 动作链对象本身 |
|
||||||
|
|
||||||
## 📍 `right()`
|
## 📍 `right()`
|
||||||
|
|
||||||
@ -139,9 +157,15 @@ ac.up(50) # 鼠标向上移动 50 像素
|
|||||||
|
|
||||||
**参数:**
|
**参数:**
|
||||||
|
|
||||||
- `pixel`:移动距离
|
| 名称 | 数据类型 | 默认值 | 说明 |
|
||||||
|
| ------- | ----- | --- | -------- |
|
||||||
|
| `pixel` | `int` | 无 | 鼠标移动的像素值 |
|
||||||
|
|
||||||
**返回:**`ActionChains`对象自己
|
**返回:**
|
||||||
|
|
||||||
|
| 数据类型 | 说明 |
|
||||||
|
| -------------- | ------- |
|
||||||
|
| `ActionChains` | 动作链对象本身 |
|
||||||
|
|
||||||
# ✔ 鼠标按键
|
# ✔ 鼠标按键
|
||||||
|
|
||||||
@ -151,9 +175,15 @@ ac.up(50) # 鼠标向上移动 50 像素
|
|||||||
|
|
||||||
**参数:**
|
**参数:**
|
||||||
|
|
||||||
- `on_ele`:`ChromiumElement`元素或文本定位符
|
| 名称 | 数据类型 | 默认值 | 说明 |
|
||||||
|
| -------- | ----------------------- | ------ | -------------- |
|
||||||
|
| `on_ele` | `ChromiumElement`、`str` | `None` | 要点击的元素对象或文本定位符 |
|
||||||
|
|
||||||
**返回:**`ActionChains`对象自己
|
**返回:**
|
||||||
|
|
||||||
|
| 数据类型 | 说明 |
|
||||||
|
| -------------- | ------- |
|
||||||
|
| `ActionChains` | 动作链对象本身 |
|
||||||
|
|
||||||
## 📍 `r_click()`
|
## 📍 `r_click()`
|
||||||
|
|
||||||
@ -161,9 +191,15 @@ ac.up(50) # 鼠标向上移动 50 像素
|
|||||||
|
|
||||||
**参数:**
|
**参数:**
|
||||||
|
|
||||||
- `on_ele`:`ChromiumElement`元素或文本定位符
|
| 名称 | 数据类型 | 默认值 | 说明 |
|
||||||
|
| -------- | ----------------------- | ------ | -------------- |
|
||||||
|
| `on_ele` | `ChromiumElement`、`str` | `None` | 要点击的元素对象或文本定位符 |
|
||||||
|
|
||||||
**返回:**`ActionChains`对象自己
|
**返回:**
|
||||||
|
|
||||||
|
| 数据类型 | 说明 |
|
||||||
|
| -------------- | ------- |
|
||||||
|
| `ActionChains` | 动作链对象本身 |
|
||||||
|
|
||||||
## 📍 `m_click()`
|
## 📍 `m_click()`
|
||||||
|
|
||||||
@ -171,9 +207,15 @@ ac.up(50) # 鼠标向上移动 50 像素
|
|||||||
|
|
||||||
**参数:**
|
**参数:**
|
||||||
|
|
||||||
- `on_ele`:`ChromiumElement`元素或文本定位符
|
| 名称 | 数据类型 | 默认值 | 说明 |
|
||||||
|
| -------- | ----------------------- | ------ | -------------- |
|
||||||
|
| `on_ele` | `ChromiumElement`、`str` | `None` | 要点击的元素对象或文本定位符 |
|
||||||
|
|
||||||
**返回:**`ActionChains`对象自己
|
**返回:**
|
||||||
|
|
||||||
|
| 数据类型 | 说明 |
|
||||||
|
| -------------- | ------- |
|
||||||
|
| `ActionChains` | 动作链对象本身 |
|
||||||
|
|
||||||
## 📍 `hold()`
|
## 📍 `hold()`
|
||||||
|
|
||||||
@ -181,9 +223,15 @@ ac.up(50) # 鼠标向上移动 50 像素
|
|||||||
|
|
||||||
**参数:**
|
**参数:**
|
||||||
|
|
||||||
- `on_ele`:`ChromiumElement`元素或文本定位符
|
| 名称 | 数据类型 | 默认值 | 说明 |
|
||||||
|
| -------- | ----------------------- | ------ | -------------- |
|
||||||
|
| `on_ele` | `ChromiumElement`、`str` | `None` | 要按住的元素对象或文本定位符 |
|
||||||
|
|
||||||
**返回:**`ActionChains`对象自己
|
**返回:**
|
||||||
|
|
||||||
|
| 数据类型 | 说明 |
|
||||||
|
| -------------- | ------- |
|
||||||
|
| `ActionChains` | 动作链对象本身 |
|
||||||
|
|
||||||
## 📍 `release()`
|
## 📍 `release()`
|
||||||
|
|
||||||
@ -191,9 +239,15 @@ ac.up(50) # 鼠标向上移动 50 像素
|
|||||||
|
|
||||||
**参数:**
|
**参数:**
|
||||||
|
|
||||||
- `on_ele`:`ChromiumElement`元素或文本定位符
|
| 名称 | 数据类型 | 默认值 | 说明 |
|
||||||
|
| -------- | ----------------------- | ------ | -------------- |
|
||||||
|
| `on_ele` | `ChromiumElement`、`str` | `None` | 要释放的元素对象或文本定位符 |
|
||||||
|
|
||||||
**返回:**`ActionChains`对象自己
|
**返回:**
|
||||||
|
|
||||||
|
| 数据类型 | 说明 |
|
||||||
|
| -------------- | ------- |
|
||||||
|
| `ActionChains` | 动作链对象本身 |
|
||||||
|
|
||||||
## 📍 `r_hold()`
|
## 📍 `r_hold()`
|
||||||
|
|
||||||
@ -201,9 +255,15 @@ ac.up(50) # 鼠标向上移动 50 像素
|
|||||||
|
|
||||||
**参数:**
|
**参数:**
|
||||||
|
|
||||||
- `on_ele`:`ChromiumElement`元素或文本定位符
|
| 名称 | 数据类型 | 默认值 | 说明 |
|
||||||
|
| -------- | ----------------------- | ------ | -------------- |
|
||||||
|
| `on_ele` | `ChromiumElement`、`str` | `None` | 要按住的元素对象或文本定位符 |
|
||||||
|
|
||||||
**返回:**`ActionChains`对象自己
|
**返回:**
|
||||||
|
|
||||||
|
| 数据类型 | 说明 |
|
||||||
|
| -------------- | ------- |
|
||||||
|
| `ActionChains` | 动作链对象本身 |
|
||||||
|
|
||||||
## 📍 `r_release()`
|
## 📍 `r_release()`
|
||||||
|
|
||||||
@ -211,9 +271,15 @@ ac.up(50) # 鼠标向上移动 50 像素
|
|||||||
|
|
||||||
**参数:**
|
**参数:**
|
||||||
|
|
||||||
- `on_ele`:`ChromiumElement`元素或文本定位符
|
| 名称 | 数据类型 | 默认值 | 说明 |
|
||||||
|
| -------- | ----------------------- | ------ | -------------- |
|
||||||
|
| `on_ele` | `ChromiumElement`、`str` | `None` | 要释放的元素对象或文本定位符 |
|
||||||
|
|
||||||
**返回:**`ActionChains`对象自己
|
**返回:**
|
||||||
|
|
||||||
|
| 数据类型 | 说明 |
|
||||||
|
| -------------- | ------- |
|
||||||
|
| `ActionChains` | 动作链对象本身 |
|
||||||
|
|
||||||
## 📍 `m_hold()`
|
## 📍 `m_hold()`
|
||||||
|
|
||||||
@ -221,9 +287,15 @@ ac.up(50) # 鼠标向上移动 50 像素
|
|||||||
|
|
||||||
**参数:**
|
**参数:**
|
||||||
|
|
||||||
- `on_ele`:`ChromiumElement`元素或文本定位符
|
| 名称 | 数据类型 | 默认值 | 说明 |
|
||||||
|
| -------- | ----------------------- | ------ | -------------- |
|
||||||
|
| `on_ele` | `ChromiumElement`、`str` | `None` | 要按住的元素对象或文本定位符 |
|
||||||
|
|
||||||
**返回:**`ActionChains`对象自己
|
**返回:**
|
||||||
|
|
||||||
|
| 数据类型 | 说明 |
|
||||||
|
| -------------- | ------- |
|
||||||
|
| `ActionChains` | 动作链对象本身 |
|
||||||
|
|
||||||
## 📍 `m_release()`
|
## 📍 `m_release()`
|
||||||
|
|
||||||
@ -231,9 +303,15 @@ ac.up(50) # 鼠标向上移动 50 像素
|
|||||||
|
|
||||||
**参数:**
|
**参数:**
|
||||||
|
|
||||||
- `on_ele`:`ChromiumElement`元素或文本定位符
|
| 名称 | 数据类型 | 默认值 | 说明 |
|
||||||
|
| -------- | ----------------------- | ------ | -------------- |
|
||||||
|
| `on_ele` | `ChromiumElement`、`str` | `None` | 要释放的元素对象或文本定位符 |
|
||||||
|
|
||||||
**返回:**`ActionChains`对象自己
|
**返回:**
|
||||||
|
|
||||||
|
| 数据类型 | 说明 |
|
||||||
|
| -------------- | ------- |
|
||||||
|
| `ActionChains` | 动作链对象本身 |
|
||||||
|
|
||||||
# ✔ 滚动滚轮
|
# ✔ 滚动滚轮
|
||||||
|
|
||||||
@ -243,23 +321,37 @@ ac.up(50) # 鼠标向上移动 50 像素
|
|||||||
|
|
||||||
**参数:**
|
**参数:**
|
||||||
|
|
||||||
- `delta_x`:滚轮变化值 x
|
| 名称 | 数据类型 | 默认值 | 说明 |
|
||||||
- `delta_y`:滚轮变化值 y
|
| --------- | ----------------------- | ------ | -------------- |
|
||||||
- `on_ele`:`ChromiumElement`元素或文本定位符
|
| `delta_x` | `int` | 0 | 滚轮 x 轴变化值 |
|
||||||
|
| `delta_y` | `str` | 0 | 滚轮 y 轴变化值 |
|
||||||
|
| `on_ele` | `ChromiumElement`、`str` | `None` | 要滚动的元素对象或文本定位符 |
|
||||||
|
|
||||||
**返回:**`ActionChains`对象自己
|
**返回:**
|
||||||
|
|
||||||
|
| 数据类型 | 说明 |
|
||||||
|
| -------------- | ------- |
|
||||||
|
| `ActionChains` | 动作链对象本身 |
|
||||||
|
|
||||||
# ✔ 键盘按键
|
# ✔ 键盘按键
|
||||||
|
|
||||||
## 📍 `key_down()`
|
## 📍 `key_down()`
|
||||||
|
|
||||||
此方法用于按下键盘按键。
|
此方法用于按下键盘按键,特殊字符见 Keys。
|
||||||
|
|
||||||
**参数:**
|
**参数:**
|
||||||
|
|
||||||
- `key`:按键键值,特殊字符见 Keys
|
| 名称 | 数据类型 | 默认值 | 说明 |
|
||||||
|
| ----- | ----- | --- | ---- |
|
||||||
|
| `key` | `str` | 无 | 按键键值 |
|
||||||
|
|
||||||
**返回:**`ActionChains`对象自己
|
**返回:**
|
||||||
|
|
||||||
|
| 数据类型 | 说明 |
|
||||||
|
| -------------- | ------- |
|
||||||
|
| `ActionChains` | 动作链对象本身 |
|
||||||
|
|
||||||
|
**示例:**
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from DrissionPage.keys import Keys
|
from DrissionPage.keys import Keys
|
||||||
@ -269,13 +361,19 @@ ac.key_down(Keys.CTRL) # 按下 ctrl 键
|
|||||||
|
|
||||||
## 📍 `key_up()`
|
## 📍 `key_up()`
|
||||||
|
|
||||||
此方法用于提起键盘按键。
|
此方法用于提起键盘按键,特殊字符见 Keys。
|
||||||
|
|
||||||
**参数:**
|
**参数:**
|
||||||
|
|
||||||
- `key`:按键键值,特殊字符见 Keys
|
| 名称 | 数据类型 | 默认值 | 说明 |
|
||||||
|
| ----- | ----- | --- | ---- |
|
||||||
|
| `key` | `str` | 无 | 按键键值 |
|
||||||
|
|
||||||
**返回:**`ActionChains`对象自己
|
**返回:**
|
||||||
|
|
||||||
|
| 数据类型 | 说明 |
|
||||||
|
| -------------- | ------- |
|
||||||
|
| `ActionChains` | 动作链对象本身 |
|
||||||
|
|
||||||
## 📍 `type()`
|
## 📍 `type()`
|
||||||
|
|
||||||
@ -283,9 +381,15 @@ ac.key_down(Keys.CTRL) # 按下 ctrl 键
|
|||||||
|
|
||||||
**参数:**
|
**参数:**
|
||||||
|
|
||||||
- `text`:文本字符串
|
| 名称 | 数据类型 | 默认值 | 说明 |
|
||||||
|
| ------ | ----- | --- | ------ |
|
||||||
|
| `text` | `str` | 无 | 要输入的文本 |
|
||||||
|
|
||||||
**返回:**`ActionChains`对象自己
|
**返回:**
|
||||||
|
|
||||||
|
| 数据类型 | 说明 |
|
||||||
|
| -------------- | ------- |
|
||||||
|
| `ActionChains` | 动作链对象本身 |
|
||||||
|
|
||||||
# ✔ 等待
|
# ✔ 等待
|
||||||
|
|
||||||
@ -295,9 +399,17 @@ ac.key_down(Keys.CTRL) # 按下 ctrl 键
|
|||||||
|
|
||||||
**参数:**
|
**参数:**
|
||||||
|
|
||||||
- `second`:秒数
|
| 名称 | 数据类型 | 默认值 | 说明 |
|
||||||
|
| -------- | ------- | --- | ---- |
|
||||||
|
| `second` | `float` | 无 | 等待秒数 |
|
||||||
|
|
||||||
**返回:**`ActionChains`对象自己
|
**返回:**
|
||||||
|
|
||||||
|
| 数据类型 | 说明 |
|
||||||
|
| -------------- | ------- |
|
||||||
|
| `ActionChains` | 动作链对象本身 |
|
||||||
|
|
||||||
|
**示例:**
|
||||||
|
|
||||||
```python
|
```python
|
||||||
ac.wait(3) # 停顿 3 秒
|
ac.wait(3) # 停顿 3 秒
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
如果只使用收发数据包功能,无须任何准备工作。
|
如果只使用收发数据包功能,无须任何准备工作。
|
||||||
|
|
||||||
如果要控制浏览器,须设置浏览器路径。以下用 Chrome 作为演示。其它 Chromium 内核浏览器设置方法是一样的。
|
如果要控制浏览器,须设置浏览器路径。程序默认设置控制 Chrome,所以以下用 Chrome 作为演示。如果要使用 edge 或其它 Chromium 内核浏览器,设置方法是一样的。
|
||||||
|
|
||||||
# ✔️ 执行步骤
|
# ✔️ 执行步骤
|
||||||
|
|
||||||
@ -12,6 +12,8 @@
|
|||||||
|
|
||||||
后面在"创建页面对象"章节再介绍多 Chrome 浏览器共存的方法。
|
后面在"创建页面对象"章节再介绍多 Chrome 浏览器共存的方法。
|
||||||
|
|
||||||
|
!>**注意:**<br>如果您使用的是 edge 浏览器,直接关闭不能清干净进程,请打开任务管理器手动关闭进程。
|
||||||
|
|
||||||
## 📍 尝试启动浏览器
|
## 📍 尝试启动浏览器
|
||||||
|
|
||||||
执行以下代码,如果正常启动了浏览器并且访问了百度,则可跳过后面的步骤。
|
执行以下代码,如果正常启动了浏览器并且访问了百度,则可跳过后面的步骤。
|
||||||
|
22
docs/版本历史.md
22
docs/版本历史.md
@ -1,3 +1,13 @@
|
|||||||
|
# v3.0.32
|
||||||
|
|
||||||
|
- `WebPage`删除`check_page()`方法
|
||||||
|
- `DriverOptions`和`easy_set`的`set_paths()`增加`browser_path`参数
|
||||||
|
- `DriverOptions`增加`browser_path`属性
|
||||||
|
- `ChromiumFrame`现在支持页面滚动
|
||||||
|
- 修改`SessionElement`相对定位参数顺序
|
||||||
|
- 改进滚动到元素功能
|
||||||
|
- 修复一些问题
|
||||||
|
|
||||||
# v3.0.31
|
# v3.0.31
|
||||||
|
|
||||||
- `run_script()`、`run_async_script()`更名为`run_js`和`run_async_js()`
|
- `run_script()`、`run_async_script()`更名为`run_js`和`run_async_js()`
|
||||||
@ -29,6 +39,7 @@
|
|||||||
# v3.0.20
|
# v3.0.20
|
||||||
|
|
||||||
重大更新。推出`WebPage`,重新开发底层逻辑,摆脱对 selenium 的依赖,增强了功能,提升了运行效率。支持 chromium 内核的浏览器(如 chrome 和 edge)。比`MixPage`有以下优点:
|
重大更新。推出`WebPage`,重新开发底层逻辑,摆脱对 selenium 的依赖,增强了功能,提升了运行效率。支持 chromium 内核的浏览器(如 chrome 和 edge)。比`MixPage`有以下优点:
|
||||||
|
|
||||||
- 无 webdriver 特征,不会被网站识别
|
- 无 webdriver 特征,不会被网站识别
|
||||||
- 无需为不同版本的浏览器下载不同的驱动
|
- 无需为不同版本的浏览器下载不同的驱动
|
||||||
- 运行速度更快
|
- 运行速度更快
|
||||||
@ -39,6 +50,7 @@
|
|||||||
- 可以对整个网页截图,包括视口外的部分(90以上版本浏览器支持)
|
- 可以对整个网页截图,包括视口外的部分(90以上版本浏览器支持)
|
||||||
|
|
||||||
其它更新:
|
其它更新:
|
||||||
|
|
||||||
- 增加`ChromiumTab`和`ChromiumFrame`类用于处理 tab 和 frame 元素
|
- 增加`ChromiumTab`和`ChromiumFrame`类用于处理 tab 和 frame 元素
|
||||||
- 新增与`WebPage`配合的动作链接`ActionChains`
|
- 新增与`WebPage`配合的动作链接`ActionChains`
|
||||||
- ini 文件和`DriverOption`删除`set_window_rect`属性
|
- ini 文件和`DriverOption`删除`set_window_rect`属性
|
||||||
@ -57,8 +69,8 @@
|
|||||||
# v2.7.1
|
# v2.7.1
|
||||||
|
|
||||||
- DriverPage
|
- DriverPage
|
||||||
- 增加`get_session_storage()`、`get_local_storage()`、`set_session_storage()`、`set_local_storage()`、`clean_cache()`方法
|
- 增加`get_session_storage()`、`get_local_storage()`、`set_session_storage()`、`set_local_storage()`、`clean_cache()`方法
|
||||||
- `run_cdp()`的`cmd_args`参数改为`**cmd_args`
|
- `run_cdp()`的`cmd_args`参数改为`**cmd_args`
|
||||||
- 关闭 driver 时会主动关闭 chromedriver.exe 的进程
|
- 关闭 driver 时会主动关闭 chromedriver.exe 的进程
|
||||||
- 优化关闭浏览器进程逻辑
|
- 优化关闭浏览器进程逻辑
|
||||||
|
|
||||||
@ -70,9 +82,9 @@
|
|||||||
# v2.6.0
|
# v2.6.0
|
||||||
|
|
||||||
- 新增`Listener`类
|
- 新增`Listener`类
|
||||||
- 可监听浏览器数据包
|
- 可监听浏览器数据包
|
||||||
- 可异步监听
|
- 可异步监听
|
||||||
- 可实现每监听到若干数据包执行操作
|
- 可实现每监听到若干数据包执行操作
|
||||||
- 放弃对selenium4.1以下的支持
|
- 放弃对selenium4.1以下的支持
|
||||||
- 解决使用新版浏览器时出现的一些问题
|
- 解决使用新版浏览器时出现的一些问题
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user