一、前言
用 requests 做数据采集面对要登录的网站时,要分析数据包、JS 源码,构造复杂的请求,往往还要应付验证码、JS 混淆、签名参数等反爬手段,门槛较高。若数据是由 JS 计算生成的,还须重现计算过程,体验不好,开发效率不高。使用浏览器,可以很大程度上绕过这些坑,但浏览器运行效率不高。
因此,这个库设计初衷,是将它们合而为一,能够在不同须要时切换相应模式,并提供一种人性化的使用方法,提高开发和运行效率。
除了合并两者,本库还以网页为单位封装了常用功能,提供非常简便的操作和语句,在用于网页自动化操作时,减少考虑细节,专注功能实现,使用更方便。一切从简,尽量提供简单直接的使用方法,对新手更友好。
二、特性
本库采用全自研的内核,内置了 N 多实用功能,对常用功能作了整合和优化,对比 selenium,有以下优点:
• 无 webdriver 特征,不会被网站识别
• 无需为不同版本的浏览器下载不同的驱动
• 运行速度更快
• 可以跨 iframe 查找元素,无需切入切出
• 把 iframe 看作普通元素,获取后可直接在其中查找元素,逻辑更清晰
• 可以同时操作浏览器中的多个标签页,即使标签页为非激活状态,无需切换
• 可以直接读取浏览器缓存来保存图片,无需用 GUI 点击另存
• 可以对整个网页截图,包括视口外的部分(90以上版本浏览器支持)
亮点功能
除了以上优点,本库还内置了无数人性化设计:
• 极简的语法规则。集成大量常用功能,代码更优雅
• 定位元素更加容易,功能更强大稳定
• 无处不在的等待和自动重试功能。使不稳定的网络变得易于控制,程序更稳定,编写更省心
• 提供强大的下载工具。操作浏览器时也能享受快捷可靠的下载功能
• 允许反复使用已经打开的浏览器。无须每次运行从头启动浏览器,调试超方便
• 使用 ini 文件保存常用配置,自动调用,提供便捷的设置,远离繁杂的配置项
• 内置 lxml 作为解析引擎,解析速度成几个数量级提升
• 使用 POM 模式封装,可直接用于测试,便于扩展
• 高度集成的便利功能,从每个细节中体现
三、结构图
WebPage 继承自 ChromiumPage 和 SessionPage ,前者负责控制浏览器,后者负责数据包收发,因此WebPage 既能控制浏览器,也能收发数据包,并且能在两种模式中共享登录状态。
![image](6575364bb37c14648be45405/image.png)
四、安装
pip install DrissionPage
不用安装浏览器驱动就可以直接调用比selenium强多了。
五、实例代码
from DrissionPage import ChromiumPage
# 创建页面对象,并启动或接管浏览器
page = ChromiumPage()
# 跳转到登录页面
page.get('https://id1.cloud.huawei.com/CAS/portal/loginAuth.html') # get()方法用于访问参数中的网址。它会等待页面完全加载,再继续执行后面的代码。
txtUname =page.ele('@class:userAccount') # 查找所有拥有 class 属性的元素
txtUname.input('亚丁号') #用户名
txtPword = page.ele('@class:hwid-input-pwd')
txtPword.input('https://www.yadinghao.com/') #密码
page.ele('@class:hwid-login-btn').click() #点击登录
比 selenium代码少多了
你有时间常去我家看看我在这里谢谢你啦...
我家地址:亚丁号
最后送大家一首诗:
山高路远坑深,
大军纵横驰奔,
谁敢横刀立马?
惟有点赞加关注大军。