DrissionPage/README.md
2020-05-23 01:15:16 +08:00

1295 lines
34 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 简介
***
DrissionPage即driver和session的合体是个基于python的Web自动化操作集成工具。
它整合了selenium和requests_html实现了它们之间的无缝切换。
因此可以兼顾selenium的便利性和requests的高效率。
它封装了页面元素常用的方法很适合自动化操作PO模式的扩展。
更棒的是,它的使用方式非常简洁和人性化,代码量少,对新手友好。
# 背景
***
新手学习爬虫时面对须要登录的网站要分析数据包、JS源码构造复杂的请求往往还要应付验证码、JS混淆、签名参数等反爬手段学习门槛较高。获取数据时有的数据是由JS计算生成的若只拿到源数据还须重现计算过程体验不好开发效率不高。
使用selenium可以很大程度上绕过这些坑但selenium效率不高。因此这个库要做的是将selenium和requests合而为一不同须要时切换相应模式并提供一种人性化的使用方法提高开发和运行效率。
除了合并两者本库还以网页为单位封装了常用功能简化了selenium的操作和语句在用于网页自动化操作时减少考虑细节专注功能实现使用更方便。
本人学习过程中踩了很多坑,因此这个库的设计理念是一切从简,尽量提供简单直接的使用方法,对新手更友好。
**项目地址:**
- https://github.com/g1879/DrissionPage
- https://gitee.com/g1879/DrissionPage
**联系邮箱:** g1879@qq.com
# 特性
***
- 允许在selenium和requests间无缝切换共享session。
- 两种模式提供统一的操作方法,使用体验一致。
- 以页面为单位封装常用方法便于PO模式扩展。
- 人性化的页面元素操作方法,减轻页面分析工作量和编码量。
- 把配置信息保存到文件,方便调用。
- 对某些常用功能(如点击)作了优化,更符合实际使用需要。
# 简单演示
***
用selenium登录网站然后切换到requests读取网页打印元素属性。
```python
from DrissionPage import *
from time import sleep
drission = Drission() # 创建驱动器对象
page = MixPage(drission) # 创建页面对象默认driver模式
page.get('https://gitee.com/profile') # 访问个人中心页面(未登录,重定向到登录页面)
# 使用selenium输入账号密码登录
page.ele('@id:user_login').input('your_user_name')
page.ele('@id:user_password').input('your_password\n')
sleep(1) # 等待登录
page.change_mode() # 切换到session模式
print('登录后title', page.title, '\n') # 登录后session模式的输出
# 获取并打印属性
foot = page.ele('@id:footer-left') # 用id查找元素
first_col = foot.ele('css:>div') # 使用css selector在元素的下级中查找元素第一个
lnk = first_col.ele('text:命令学') # 使用文本内容查找元素
text = lnk.text # 获取元素文本
href = lnk.attr('href') # 获取元素属性值
print(first_col)
print(text, href)
```
输出:
```
登录后title 个人资料 - 码云 Gitee.com
<SessionElement div class='column'>
Git 命令学习 https://oschina.gitee.io/learn-git-branching/
```
# 安装
***
```
pip install DrissionPage
```
只支持python3.6及以上版本driver模式目前只支持chrome。
若要使用driver模式须下载chrome和 **对应版本** 的chromedriver。[[chromedriver下载]](https://chromedriver.chromium.org/downloads)
目前只在Windows环境下作了测试。
# 使用方法
***
## 导入模块
```python
from DrissionPage import *
```
## 初始化
使用selenium前必须配置chrome.exe和chromedriver.exe的路径并确保它们版本匹配。
如果你只使用session模式可跳过本节。
配置路径有三种方法:
- 将两个路径路径写入系统变量。
- 使用时手动传入路径。
- 将路径写入本库的ini文件推荐
若你选择第三种方式请在第一次使用本库前运行这几行代码把这两个路径记录到ini文件中。
```python
from DrissionPage.easy_set import set_paths
driver_path = 'C:\\chrome\\chromedriver.exe' # 你的driver_path路径可选
chrome_path = 'D:\\chrome\\chrome.exe' # 你的chrome.exe路径可选
set_paths(driver_path, chrome_path)
```
该方法还会检查chrome和chromedriver版本是否匹配显示
```
版本匹配,可正常使用。
版本不兼容。
请下载与当前chrome版本匹配的chromedriver。
当前chromedriver版本<你的chromedriver版本号>
查看chrome版本方法帮助 -> 关于Google Chrome
chromedriver下载网址https://chromedriver.chromium.org/downloads
```
检查通过后即可正常使用driver模式。
除了上述两个路径,该方法还可以设置以下路径:
```python
debugger_address # 调试浏览器地址127.0.0.1:9222
download_path # 下载文件路径
global_tmp_path # 临时文件夹路径
```
Tips
- 不同项目可能须要不同版本的chrome和chromedriver你还可保存多个ini文件按须使用。
- 推荐使用绿色版chrome并手动设置路径避免浏览器升级造成与chromedriver版本不匹配。
- 调试项目时推荐设置debugger_address使用手动打开的浏览器调试省时省力。
## 创建驱动器对象Drission
Drission对象用于管理driver和session对象。可直接读取ini文件配置信息创建也可以在初始化时传入配置信息。
```python
# 由ini文件创建
drission = Drission()
```
若要手动传入配置:
```python
# 用传入的配置信息创建忽略ini文件
from DrissionPage.config import DriverOptions
driver_options = DriverOptions() # 创建driver配置对象
driver_options.binary_location = 'D:\\chrome\\chrome.exe' # chrome.exe路径
session_options = {'headers': {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)'}}
driver_path = 'C:\\chrome\\chromedriver.exe' # driver_path路径
drission = Drission(driver_options, session_options, driver_path) # 传入配置
```
## 使用页面对象MixPage
MixPage页面对象封装了常用的网页操作并实现driver和session模式之间的切换。
```python
page = MixPage(drission) # 默认driver模式
page = MixPage(drission, mode='s', timeout=10) # session模式元素等待时间5秒默认10秒
# 访问URL
page.get(url, **kwargs)
page.post(url, data, **kwargs) # 只有session模式才有post方法
# 切换模式
page.change_mode()
# 操作页面
print(page.html) # 页面源代码
page.run_script(js) # 运行js语句
page.close_other_tabs(num) # 关闭其它标签页
page.to_iframe(iframe) # 切入iframe
page.screenshot(path) # 页面截图
page.scrool_to_see(element) # 滚动直到某元素可见
# 详见APIs...
```
Tips调用只属于driver模式的方法会自动切换到driver模式。
## 查找元素
可使用多种方法查找页面元素eles函数会返回所有符合要求的元素对象列表
元素查找超时默认为10秒你也可以按需要设置。
```python
# 根据属性查找
page.ele('@id:ele_id', timeout = 2) # 查找id为ele_id的元素设置等待时间2秒
page.eles('@class:class_name') # 查找所有class为class_name的元素
# 根据tag name查找
page.ele('tag:li') # 查找第一个li元素
page.eles('tag:li') # 查找所有li元素
# 根据位置查找
page.ele('@id:ele_id').parent # 父元素
page.ele('@id:ele_id').next # 下一个兄弟元素
page.ele('@id:ele_id').prev # 上一个兄弟元素
# 根据文本内容查找
page.ele('search text') # 查找包含传入文本的元素
page.eles('text:search text') # 如文本以@、tag:、css:、xpath:、text:开头则在前面加上text:避免冲突
# 根据xpath或css selector查找
page.eles('xpath://div[@class="ele_class"]')
page.eles('css:div.ele_class')
# 根据loc查找
loc1 = By.ID, 'ele_id'
loc2 = By.XPATH, '//div[@class="ele_class"]'
page.ele(loc1)
page.ele(loc2)
# 查找下级元素
element = page.ele('@id:ele_id')
element.ele('@class:class_name') # 在element下级查找第一个class为ele_class的元素
element.eles('tag:li') # 在ele_id下级查找所有li元素
# 串连查找
page.ele('@id:ele_id').ele('tag:div').next.ele('some text').eles('tag:a')
```
## 元素操作
```python
# 获取元素信息
element = page.ele('@id:ele_id')
element.html # 返回元素内html
element.text # 返回元素内去除html标签后的text值
element.tag # 返回元素tag name
element.attrs # 返回元素所有属性的字典
element.attr('class') # 返回元素的class属性
element.is_valid # driver模式独有用于判断元素是否还可用
# 操作元素
element.click() # 点击元素
element.input(text) # 输入文字
element.run_script(js) # 运行js
element.submit() # 提交表单
element.clear() # 清空元素
element.is_selected() # 是否被选中
element.is_enabled() # 是否可用
element.is_displayed() # 是否可见
element.is_valid() # 是否有效,用于判断页面跳转导致元素失效的情况
element.select(text) # 选中下拉列表选项
element.set_attr(attr,value) # 设置元素属性
element.size # 元素大小
element.location # 元素位置
```
## 保存配置
因chrome和headers配置繁多故设置一个ini文件专门用于保存常用配置你可使用OptionsManager对象获取和保存配置用DriverOptions对象修改chrome配置。你也可以保存多个ini文件按不同项目须要调用。
Tips建议把常用配置文件保存到别的路径以防本库升级时配置被重置。
### ini文件内容
ini文件默认拥有三部分配置paths、chrome_options、session_options初始内容如下。
```ini
[paths]
; chromedriver.exe路径
chromedriver_path =
; 临时文件夹路径,用于保存截图、文件下载等
global_tmp_path =
[chrome_options]
; 已打开的浏览器地址和端口如127.0.0.1:9222
debugger_address =
; chrome.exe路径
binary_location =
; 配置信息
arguments = [
; 隐藏浏览器窗口
'--headless',
; 静音
'--mute-audio',
; 不使用沙盒
'--no-sandbox',
; 谷歌文档提到需要加上这个属性来规避bug
'--disable-gpu'
]
; 插件
extensions = []
; 实验性配置
experimental_options = {
'prefs': {
; 下载不弹出窗口
'profile.default_content_settings.popups': 0,
; 无弹窗
'profile.default_content_setting_values': {'notifications': 2},
; 禁用PDF插件
'plugins.plugins_list': [{"enabled": False, "name": "Chrome PDF Viewer"}],
; 设置为开发者模式,防反爬虫(无用)
'excludeSwitches': ["ignore-certificate-errors", "enable-automation"],
'useAutomationExtension': False
}
}
[session_options]
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Connection": "keep-alive",
"Accept-Charset": "utf-8;q=0.7,*;q=0.7"
}
```
### 使用示例
```python
from DrissionPage import *
from DrissionPage.configs import *
driver_options = DriverOptions() # 从默认ini文件读取配置
driver_options = DriverOptions('D:\\settings.ini') # 从传入的ini文件读取配置
driver_options.add_argument('--headless') # 添加配置
driver_options.remove_experimental_options('prefs') # 移除配置
driver_options.save() # 保存配置
driver_options.save('D:\\settings.ini') # 保存到其它路径
options_manager = OptionsManager() # 创建OptionsManager对象
driver_path = options_manager.get_value('paths', 'chromedriver_path') # 读取路径信息
drission = Drission(driver_options, driver_path) # 使用配置创建Drission对象
```
### OptionsManager对象
OptionsManager对象用于读取、设置和保存配置。
```python
get_value(section, item) -> str # 获取某个配置的值
get_option(section) -> dict # 以字典格式返回配置全部属性
set_item(section, item, value) # 设置配置属性
save() # 保存配置到默认ini文件
save('D:\\settings.ini') # 保存到其它路径
```
**注意**保存时若不传入路径会保存到模块目录下的ini文件即使读取的不是默认ini文件也一样。
### DriverOptions对象
DriverOptions对象继承自selenium.webdriver.chrome.options的Options对象在其基础上增加了以下方法
```python
remove_argument(value) # 删除某argument值
remove_experimental_option(key) # 删除某experimental_option设置
remove_all_extensions() # 删除全部插件
save() # 保存配置到ini文件
save('D:\\settings.ini') # 保存到其它路径
```
# PO模式
***
MixPage封装了常用的页面操作可方便地用于扩展。
例:扩展一个列表页面读取类
```python
import re
from time import sleep
from DrissionPage import *
class ListPage(MixPage):
"""本类封装读取列表页面的方法根据必须的4个元素可读取同构的列表页面
(中文变量真香)"""
def __init__(self, drission: Drission, url: str = None, **xpaths):
super().__init__(drission)
self._url = url
self.xpath_栏目名 = xpaths['栏目名'] # [xpath字符串, 正则表达式]
self.xpath_下一页 = xpaths['下一页']
self.xpath_行s = xpaths['行']
self.xpath_页数 = xpaths['页数'] # [xpath字符串, 正则表达式]
self.总页数 = self.get_总页数()
if url:
self.get(url)
def get_栏目名称(self) -> str:
if self.xpath_栏目名[1]:
s = self.ele(f'xpath:{self.xpath_栏目名[0]}').text
r = re.search(self.xpath_栏目名[1], s)
return r.group(1)
else:
return self.ele(f'xpath:{self.xpath_栏目名[0]}').text
def get_总页数(self) -> int:
if self.xpath_页数[1]:
s = self.ele(f'xpath:{self.xpath_页数[0]}').text
r = re.search(self.xpath_页数[1], s)
return int(r.group(1))
else:
return int(self.ele(f'xpath:{self.xpath_页数[0]}').text)
def click_下一页(self, wait: float = None):
self.ele(f'xpath:{self.xpath_下一页}').click()
if wait:
sleep(wait)
def get_当前页列表(self, 待爬内容: list) -> list:
"""
待爬内容格式:[[xpath1,参数1],[xpath2,参数2]...]
返回列表格式:[[参数1,参数2...],[参数1,参数2...]...]
"""
结果列表 = []
行s = self.eles(f'xpath:{self.xpath_行s}')
for in 行s:
行结果 = []
for j in 待爬内容:
行结果.append(.ele(f'xpath:{j[0]}').attr(j[1]))
结果列表.append(行结果)
print(行结果)
return 结果列表
def get_列表(self, 待爬内容: list, wait: float = None) -> list:
列表 = self.get_当前页列表(待爬内容)
for _ in range(self.总页数 - 1):
self.click_下一页(wait)
列表.extend(self.get_当前页列表(待爬内容))
return 列表
```
# 其它
***
## DriverPage和SessionPage
如果无须切换模式可根据需要只使用DriverPage或SessionPage用法和MixPage一致。
```python
from DrissionPage.session_page import SessionPage
from DrissionPage.drission import Drission
session = Drission().session
page = SessionPage(session) # 传入Session对象
page.get('http://www.baidu.com')
print(page.ele('@id:su').text) # 输出:百度一下
driver = Drission().driver
page = DriverPage(driver) # 传入Driver对象
page.get('http://www.baidu.com')
print(page.ele('@id:su').text) # 输出:百度一下
```
# APIs
***
## Drission类
class **Drission**(driver_options: Union[dict, Options] = None, session_options: dict = None, driver_path: str = None)
用于管理driver和session对象。参数说明
- driver_options - chrome配置参数可接收Options对象或字典
- session_options - session配置参数接收字典
- driver_path - chromedriver.exe路径如不设置须在系统设置系统变量
### session
返回HTMLSession对象调用时自动创建。
### driver
获取WebDriver对象调用时自动创建按传入配置或ini文件配置初始化。
### session_options
以字典格式返回或设置session配置。
### cookies_to_session
cookies_to_session(copy_user_agent: bool = False, driver: WebDriver = None, session: Session = None) -> None
把cookies从driver复制到session。默认复制self.driver到self.session也可以接收driver和session进行操作。
参数说明:
- copy_user_agent - 是否复制user_agent到session
- driver - WebDriver对象复制cookies
- session - Session对象接收cookies
### cookies_to_driver
cookies_to_driver(url: str, driver: WebDriver = None, session: Session = None) -> None
把cookies从session复制到driver。默认复制self.session到self.driver也可以接收driver和session进行操作。须要指定url或域名。
参数说明:
- url - cookies的域
- driver - WebDriver对象接收cookies
- session - Session对象复制cookies
### user_agent_to_session
user_agent_to_session(driver: WebDriver = None, session: Session = None) -> None
把user agent从driver复制到session。默认复制self.driver到self.session也可以接收driver和session进行操作。
参数说明:
- driver - WebDriver对象复制user agent
- session - Session对象接收user agent
### close_driver
close_driver() -> None
关闭浏览器driver置为None。
### close_session
close_session() -> None
关闭session并置为None。
### close
close() -> None
关闭driver和session。
## MixPage类
class **MixPage**(drission: Drission, mode='d', timeout: float = 10)
MixPage封装了页面操作的常用功能可在driver和session模式间无缝切换。切换的时候会自动同步cookies。
获取信息功能为两种模式共有操作页面元素功能只有d模式有。调用某种模式独有的功能会自动切换到该模式。
它继承自DriverPage和SessionPage类这些功能由这两个类实现MixPage作为调度的角色存在。
参数说明:
- drission - Drission对象
- mode - 模式,可选'd'或's',默认为'd'
- timeout - 查找元素超时时间(每次查找元素时还可单独设置)
### url
返回当前访问的url。
### mode
返回当前模式('s'或'd')。
### drission
返回当前使用的Dirssion对象。
### driver
返回driver对象如没有则创建调用时会切换到driver模式。
### session
返回session对象如没有则创建。
### response
返回Response对象调用时会切换到session模式。
### cookies
返回cookies从当前模式获取。
### html
返回页面html文本。
### title
返回页面title文本。
### change_mode
change_mode(mode: str = None, go: bool = True) -> None
切换模式,可指定目标模式,若目标模式与当前模式一致,则直接返回。
参数说明:
- mode - 指定目标模式,'d'或's'。
- go - 切换模式后是否跳转到当前url
### get
get(url: str, params: dict = None, go_anyway=False, **kwargs) -> Union[bool, None]
跳转到一个url跳转前先同步cookies跳转后返回目标url是否可用。
参数说明:
- url - 目标url
- params - url参数
- go_anyway - 是否强制跳转。若目标url和当前url一致默认不跳转。
- kwargs - 用于session模式时访问参数。
### ele
ele(loc_or_ele: Union[tuple, str, DriverElement, SessionElement], mode: str = None, timeout: float = None, show_errmsg: bool = False) -> Union[DriverElement, SessionElement]
根据查询参数获取元素,返回元素或元素列表。
如查询参数是字符串,可选'@属性名:'、'tag:'、'text:'、'css:'、'xpath:'方式。无控制方式时默认用text方式查找。
如是loc直接按照内容查询。
参数说明:
- loc_or_str - 查询条件参数,如传入一个元素对象,则直接返回
- mode - 查找一个或多个,传入'single'或'all'
- timeout - 查找元素超时时间driver模式下有效
- show_errmsg - 出现异常时是否抛出及显示
示例:
- page.ele('@id:ele_id') - 按照属性查找元素
- page.ele('tag:div') - 按照tag name查找元素
- page.ele('text:some text') - 按照文本查找元素
- page.ele('some text') - 按照文本查找元素
- page.ele('css:>div') - 按照css selector查找元素
- page.ele('xpath://div') - 按照xpath查找元素
- page.ele((By.ID, 'ele_id')) - 按照loc方式查找元素
### eles
eles(loc_or_str: Union[tuple, str], timeout: float = None, show_errmsg: bool = False) -> List[DriverElement]
根据查询参数获取符合条件的元素列表。查询参数使用方法和ele方法一致。
参数说明:
- loc_or_str - 查询条件参数
- timeout - 查找元素超时时间driver模式下有效
- show_errmsg - 出现异常时是否抛出及显示
### cookies_to_session
cookies_to_session(copy_user_agent: bool = False) -> None
手动把cookies从driver复制到session。
参数说明:
- copy_user_agent - 是否同时复制user agent
### cookies_to_driver
cookies_to_driver(url=None) -> None
手动把cookies从session复制到driver。
参数说明:
- url - cookies的域或url
### post
post(url: str, params: dict = None, data: dict = None, go_anyway: bool = False, **kwargs) -> Union[bool, None]
以post方式跳转调用时自动切换到session模式。
参数说明:
- url - 目标url
- parame - url参数
- data - 提交的数据
- go_anyway - 是否强制跳转。若目标url和当前url一致默认不跳转。
- kwargs - headers等访问参数
### download
download(file_url: str, goal_path: str = None, rename: str = None, **kwargs) -> tuple
下载一个文件,返回是否成功和下载信息字符串。改方法会自动避免和目标路径现有文件重名。
参数说明:
- file_url - 文件URL
- goal_path - 存放路径默认为ini文件中指定的临时文件夹
- rename - 重命名文件名,默认不重命名
- kwargs - 用于requests的连接参数
以下方法只有driver模式下生效调用时会自动切换到driver模式
***
### check_page
check_page() -> bool
派生子类后用于检查域名是否符合预期,功能由子类实现。
### run_script
run_script(script: str) -> Any
执行JavaScript代码。
参数说明:
- script - JavaScript代码文本
### get_tabs_sum
get_tabs_sum() -> int
返回浏览器标签页数量。
### get_tab_num
get_tab_num() -> int
返回当前标签页序号。
### to_tab
to_tab(index: int = 0) -> None
跳转到某序号的标签页。
参数说明:
- index - 目标标签页序号从0开始计算
### close_current_tab
close_current_tab() -> None
关闭当前标签页。
### close_other_tabs
close_other_tabs(tab_index: int = None) -> None
关闭除序号外的标签页。
参数说明:
- index - 保留的标签页序号从0开始计算
### to_iframe
to_iframe(loc_or_ele: Union[str, tuple, WebElement] = 'main') -> bool
跳转到iframe默认跳转到最高层级。
参数说明:
- loc_or_ele - 查找iframe元素的条件和ele()方法的查找条件一致。
示例:
- to_iframe('@id:iframe_id')
- to_iframe(iframe_element)
### scroll_to_see
scroll_to_see(loc_or_ele: Union[WebElement, tuple]) -> None
滚动直到元素可见。
参数说明:
- loc_or_ele - 查找iframe元素的条件和ele()方法的查找条件一致。
### scroll_to
scroll_to(mode: str = 'bottom', pixel: int = 300) -> None
滚动页面,按照参数决定如何滚动。
参数说明:
- mode - 滚动的方向top、bottom、rightmost、leftmost、up、down、left、right
- pixel - 滚动的像素
### refresh
refresh() -> None
刷新页面。
### back
back() -> None
页面后退。
### set_window_size
set_window_size(x: int = None, y: int = None) -> None
设置窗口大小,默认最大化。
参数说明:
- x - 目标宽度
- y - 目标高度
### screenshot
screenshot(path: str = None, filename: str = None) -> str
网页截图,返回截图文件路径。
参数说明:
- path - 截图保存路径默认为ini文件中指定的临时文件夹
- filename - 截图文件名默认为页面title为文件名
### is_downloading
is_downloading(download_path: str = None) -> bool
检测浏览器是否下载完毕。
参数说明:
- download_path - 下载路径默认为ini文件中定义的路径
### close_driver
close_driver() -> None
关闭driver及浏览器切换到s模式。
### close_session
close_session() -> None
关闭session切换到d模式。
## DriverElement类
class DriverElement(ele: WebElement, timeout: float = 10)
driver模式的元素对象包装了一个WebElement对象并封装了常用功能。
参数说明:
- ele - WebElement对象
- timeout - 查找元素超时时间(每次查找元素时还可单独设置)
### inner_ele
被包装的WebElement对象。
### attrs
以字典方式返回元素所有属性及值。
### text
返回元素内的文本。
### html
返回元素内html文本。
### tag
返回元素标签名文本。
### parent
返回父级元素对象。
### next
返回下一个兄弟元素对象。
### prev
返回上一个兄弟元素对象。
### size
以字典方式返回元素大小。
### location
以字典方式放回元素坐标。
### ele
ele(loc_or_str: Union[tuple, str], mode: str = None, show_errmsg: bool = False, timeout: float = None) -> Union[DriverElement, List[DriverElement], None]
根据查询参数获取元素。
如查询参数是字符串,可选'@属性名:'、'tag:'、'text:'、'css:'、'xpath:'方式。无控制方式时默认用text方式查找。
如是loc直接按照内容查询。
参数说明:
- loc_or_str - 查询条件参数
- mode - 查找一个或多个,传入'single'或'all'
- show_errmsg - 出现异常时是否抛出及显示
- timeout - 查找元素超时时间
示例:
- element.ele('@id:ele_id') - 按照属性查找元素
- element.ele('tag:div') - 按照tag name查找元素
- element.ele('text:some text') - 按照文本查找元素
- element.ele('some text') - 按照文本查找元素
- element.ele('css:>div') - 按照css selector查找元素
- element.ele('xpath://div') - 按照xpath查找元素
- element.ele((By.ID, 'ele_id')) - 按照loc方式查找元素
### eles
eles(loc_or_str: Union[tuple, str], show_errmsg: bool = False, timeout: float = None) -> List[DriverElement]
根据查询参数获取符合条件的元素列表。查询参数使用方法和ele方法一致。
参数说明:
- loc_or_str - 查询条件参数
- show_errmsg - 出现异常时是否抛出及显示
- timeout - 查找元素超时时间
### attr
attr(attr: str) -> str
获取元素某个属性的值。
参数说明:
- attr - 属性名称
### click
click(by_js=False) -> bool
点击元素如不成功则用js方式点击可指定用js方式点击。
参数说明:
- by_js - 是否用js方式点击
### input
input(value, clear: bool = True) -> bool
输入文本。
参数说明:
- value - 文本值
- clear - 输入前是否清除文本框
### run_script
run_script(script: str) -> Any
在元素上运行JavaScript。
参数说明:
- script - JavaScript文本
### submit
submit() -> None
提交表单。
### clear
clear() -> None
清空文本框。
### is_selected
is_selected() -> bool
元素是否被选中。
### is_enabled
is_enabled() -> bool
元素在页面中是否可用。
### is_displayed
is_displayed() -> bool
元素是否可见。
### is_valid
is_valid() -> bool
元素是否有效。该方法用于判断页面跳转元素不能用的情况
### screenshot
screenshot(path: str = None, filename: str = None) -> str
网页截图,返回截图文件路径。
参数说明:
- path - 截图保存路径默认为ini文件中指定的临时文件夹
- filename - 截图文件名默认为页面title为文件名
### select
select(text: str) -> bool
在下拉列表中选择。
参数说明:
- text - 选项文本
### set_attr
set_attr(attr: str, value: str) -> bool
设置元素属性。
参数说明:
- attr - 参数名
- value - 参数值
## SessionElement类
class SessionElement(ele: Element)
session模式的元素对象包装了一个Element对象并封装了常用功能。
参数说明:
- ele - requests_html库的Element对象
### inner_ele
被包装的Element对象。
### attrs
以字典格式返回元素所有属性的名称和值。
### text
返回元素内的文本。
### html
返回元素内html文本。
### tag
返回元素标签名文本。
### parent
返回父级元素对象。
### next
返回下一个兄弟元素对象。
### prev
返回上一个兄弟元素对象。
### ele
ele(loc_or_str: Union[tuple, str], mode: str = None, show_errmsg: bool = False) -> Union[SessionElement, List[SessionElement], None]
根据查询参数获取元素。
如查询参数是字符串,可选'@属性名:'、'tag:'、'text:'、'css:'、'xpath:'方式。无控制方式时默认用text方式查找。
如是loc直接按照内容查询。
参数说明:
- loc_or_str - 查询条件参数
- mode - 查找一个或多个,传入'single'或'all'
- show_errmsg - 出现异常时是否抛出及显示
示例:
- element.ele('@id:ele_id') - 按照属性查找元素
- element.ele('tag:div') - 按照tag name查找元素
- element.ele('text:some text') - 按照文本查找元素
- element.ele('some text') - 按照文本查找元素
- element.ele('css:>div') - 按照css selector查找元素
- element.ele('xpath://div') - 按照xpath查找元素
- element.ele((By.ID, 'ele_id')) - 按照loc方式查找元素
### eles
eles(loc_or_str: Union[tuple, str], show_errmsg: bool = False) -> List[SessionElement]
根据查询参数获取符合条件的元素列表。查询参数使用方法和ele方法一致。
参数说明:
- loc_or_str - 查询条件参数
- show_errmsg - 出现异常时是否抛出及显示
### attr
attr(attr: str) -> str
获取元素某个属性的值。
参数说明:
- attr - 属性名称
## OptionsManager类
class OptionsManager(path: str = None)
管理配置文件内容的类。
参数说明:
- path - ini文件路径不传入则默认读取当前文件夹下的configs.ini文件
### get_value
get_value(section: str, item: str) -> Any
获取配置的值。
参数说明:
- section - 段落名称
- item - 配置项名称
### get_option
get_option(section: str) -> dict
以字典的格式返回整个段落的配置信息。
参数说明:
- section - 段落名称
### set_item
set_item(section: str, item: str, value: str) -> None
设置配置值。
参数说明:
- section - 段落名称
- item - 配置项名称
- value - 值内容
### save
save(path: str = None) -> None
保存设置到文件。
参数说明:
- path - ini文件的路径默认保存到模块文件夹下的
## DriverOptions类
class DriverOptions(read_file=True)
chrome浏览器配置类继承自selenium.webdriver.chrome.options的Options类增加了删除配置和保存到文件方法。
参数说明:
- read_file - 布尔型指定创建时是否从ini文件读取配置信息
### remove_argument
remove_argument(value: str) -> None
移除一个设置。
参数说明:
- value - 要移除的属性值
### remove_experimental_option
remove_experimental_option(key: str) -> None
移除一个实验设置传入key值删除。
参数说明:
- key - 要移除的实验设置key值
### remove_argument
remove_argument() -> None
移除所有插件,因插件是以整个文件储存,难以移除其中一个,故如须设置则全部移除再重设。
### save()
save(path: str = None) -> None
保存设置到文件。
参数说明:
- path - ini文件的路径默认保存到模块文件夹下的
## 有用的方法
### set_paths
set_paths(driver_path: str = None, chrome_path: str = None, debugger_address: str = None, global_tmp_path: str = None, download_path: str = None) -> None
便捷的设置路径方法把传入的路径保存到默认ini文件并检查chrome和chromedriver版本是否匹配。
参数说明:
- driver_path - chromedriver.exe路径
- chrome_path - chrome.exe路径
- debugger_address - 调试浏览器地址127.0.0.1:9222
- download_path - 下载文件路径
- global_tmp_path - 临时文件夹路径
### check_driver_version
check_driver_version(driver_path: str = None, chrome_path: str = None) -> bool
检查chrome与chromedriver版本是否匹配。
参数说明:
- driver_path - chromedriver.exe路径
- chrome_path - chrome.exe路径