一、工具概述
DrissionPage 是一个基于 python 的网页自动化工具。它既能控制浏览器,也能收发数据包,还能把两者合而为一。可兼顾浏览器自动化的便利性和 requests 的高效率。它功能强大,内置无数人性化设计和便捷功能。它的语法简洁而优雅,代码量少,对新手友好。
- 支持 Windows、Linux 和 Mac 系统,满足不同用户的需求;
- 需要 Python 3.6 或更高版本,确保了代码的现代性和兼容性;
- 支持所有 Chromium 内核的浏览器,如 Chrome 和 Edge;
- 4.0 版本中,许多 API 发生了变化,包括新的抓包功能、页面访问逻辑、下载管理功能等;
二、安装使用
1、安装
pip install DrissionPage -i https://pypi.tuna.tsinghua.edu.cn/simple
2、模拟登录
from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get('https://gitee.com/login')
ele = page.ele('#user_login')
ele.input('账号')
page.ele('#user_password').input('密码')
page.ele('@value=登 录').click()
3、下载图片
from DrissionPage import SessionPage
url = 'https://www.baidu.com/img/flexible/logo/pc/result.png'
save_path = r'images' # 保存的路径,当前的项目路径,如为空则保存在与py同目录
page = SessionPage()
page.download(url, save_path, 'img')
4、获取html元素值
from DrissionPage import WebPage
page = WebPage()
page.get('https://gitee.com/explore')
page('#q').input('DrissionPage')
page('t:button@tx():搜索').click()
page.wait.load_start()
page.change_mode()
items = page('#hits-list').eles('.item')
# 遍历获取到的元素
for item in items:
print(item('.title').text)
print(item('.desc').text)
print()
三、高级用法
element.click(by_js) # 点击元素,可选择是否用 js 方式点击
element.input(value) # 输入文本
element.run_script(js) # 对元素运行 JavaScript 脚本
element.submit() # 提交
element.clear() # 清空元素
element.screenshot(path, filename) # 对元素截图
element.select(text) # 根据文本选择下拉列表
element.set_attr(attr, value) # 设置元素属性值
element.remove_attr(attr) # 删除属性
element.drag(x, y, speed, shake) # 拖动元素相对距离,可设置速度和是否随机抖动
element.drag_to(ele_or_loc, speed, shake) # 拖动元素到另一个元素或某个坐标,可设置速度和是否随机抖动
element.hover() # 在元素上悬停鼠标
element.html # 返回元素 outerHTML
element.inner_html # 返回元素 innerHTML
element.tag # 返回元素 tag name
element.text # 返回元素 innerText 值
element.comments # 返回元素内注释列表
element.link # 返回元素 href 或 src 绝对 url
element.texts() # 返回元素内所有直接子节点的文本,包括元素和文本节点,可指定只返回文本节点
element.attrs # 返回元素所有属性的字典
element.attr(attr) # 返回元素指定属性的值
element.css_path # 返回元素绝对 css 路径
element.xpath # 返回元素绝对 xpath 路径
element.parent # 返回元素父元素
element.next # 返回元素后一个兄弟元素
element.prev # 返回元素前一个兄弟元素
element.parents(num) # 返回第 num 级父元素
element.nexts(num, mode) # 返回后面第几个元素或节点
element.prevs(num, mode) # 返回前面第几个元素或节点
element.ele(loc_or_str, timeout) # 返回当前元素下级第一个符合条件的子元素、属性或节点文本
element.eles(loc_or_str, timeout) # 返回当前元素下级所有符合条件的子元素、属性或节点文本