DrissionPage
今天给大家推荐一款基于Python的网页自动化工具:DrissionPage。这款工具既能控制浏览器,也能收发数据包,甚至能把两者合而为一,简单来说:集合了WEB浏览器自动化的便利性和 requests 的高效率优点。
项目地址
项目地址:https://gitee.com/g1879/DrissionPage
一、DrissionPage框架产生背景
对网页实现自动化,通常会有两类形式:
直接向服务器发送请求数据包,获取需要的数据,模拟数据流向操作。
控制浏览器跟网页进行交互,模拟用户界面操作。
前者轻量级,速度快,例如requests 库。但requests面对需要登录的网站时,往往还要应付验证码、JS 混淆、签名参数等反爬手段,门槛较高。若数据是由 JS 计算生成的,还须重现计算过程,开发效率不高。
而后者直接使用浏览器,模拟用户行为,如Selenium库,可以很大程度上绕过这些坑,但浏览器运行效率不高。
因此,DrissionPag设计初衷,是将它们合而为一,能够在不同须要时切换相应模式,并提供一种人性化的使用方法,提高开发和运行效率。
为什么叫DrissionPag
Selenium框架用于操作浏览器的对象叫 Driver,requests 用于管理请求连接的对象叫 Session,因此Drission 就是它们两者的合体。在旧版本中,是通过对 selenium 和 requests 的重新封装实现的。
但从 3.0 版开始,作者另起炉灶,用 chromium 协议自行实现了 selenium 全部功能,从而摆脱了对 selenium 的依赖,功能更多更强,运行效率更高,开发更灵活。
二、DrissionPage框架亮点特色
本库采用全自研的内核,对比 selenium,有以下优点:
1、无 webdriver 特征,不会被网站识别,无需为不同版本的浏览器下载不同的驱动 。
2、运行速度更快,可以跨 iframe 查找元素,无需切入切出,iframe 看作普通元素,获取后可直接在其中查找元素,逻辑更清晰。
3、可以同时操作浏览器中的多个标签页,即使标签页为非激活状态,无需切换。
4、内置等待和自动重试功能。使不稳定的网络变得易于控制,程序更稳定,编写更省心。
5、允许反复使用已经打开的浏览器。无须每次运行从头启动浏览器,调试超方便。
6、极简的语法规则。集成大量常用功能,定位元素更加容易,功能更强大稳定。
7、使用 POM 模式封装,可直接用于测试,便于扩展。
等等。。。
三、安装搭建
说了这么多,相信很多人已经跃跃欲试了,怎么快速搭建这套框架,先要准备一些基础环境。
环境
操作系统:Windows、Linux 或 Mac。
Python 版本:3.6 及以上
支持浏览器:Chromium 内核(如 Chrome 和 Edge)
项目地址:
https://gitee.com/g1879/DrissionPage
安装
pip install DrissionPage
另外在开始之前,我们先进行一些简单设置。如果只使用收发数据包功能,无须任何准备工作。
如果要控制浏览器,须设置浏览器路径。程序默认设置控制 Chrome,所以以下用 Chrome 作为演示。如果要使用 Edge 或其它 Chromium 内核浏览器,设置方法是一样的。
设置浏览器路径:
from DrissionPage.easy_set import set_paths
set_paths(browser_path=r'Chrome浏览器exe文件路径')
这段代码会记录 Chrome 浏览器路径到配置文件。由于路径设置只要运行一次即可,不要写到正式程序里。一般建议新建一个临时 py 文件,并输入以下代码,填入您电脑里的 Chrome 浏览器 exe 文件路径,然后执行。
四、测试
执行以下代码,如果正常启动了浏览器并且访问了百度,说明可直接使用,跳过后面的步骤即可。
执行代码前,如果已有打开的 Chrome 浏览器,请关闭。
demo1.py
from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get('https://www.baidu.com')
sionPage除了web自动化操作也封装了 requests、lxml
demo2.py
from DrissionPage import SessionPage
page = SessionPage()
page.get('https://www.baidu.com')
print(page. Response)
print(page.response.text)