DrissionPage:一款让网页自动化更简单的 Python 库

在网页自动化领域,Selenium 和 Playwright 早已是开发者耳熟能详的工具。但今天要给大家介绍一款更轻量、更易用的 Python 库 ——DrissionPage。它以 "融合 selenium 和 requests 优势" 为核心设计理念,既能像 requests 一样高效处理静态网页,又能像 selenium 一样操控动态页面,让网页爬取和自动化测试变得前所未有的简单。

一、DrissionPage 是什么?

DrissionPage 是由国内开发者开发的一款网页自动化工具,它的核心特点是 **"一体化"**:将 "静态请求" 与 "动态渲染" 两种操作模式无缝结合,无需在 requests 和 selenium 之间切换,就能轻松应对各种网页场景。

二、为什么选择 DrissionPage?

相比传统工具,DrissionPage 的优势非常明显:

  1. 极简 API:告别 Selenium 繁琐的初始化配置,一行代码即可启动浏览器或发送请求。
  2. 兼顾效率与交互:静态页面用 requests 模式快速爬取,动态页面切换到浏览器模式处理,避免 "杀鸡用牛刀"。
  3. 强大的元素定位:支持 CSS 选择器、XPath、文本、属性等多种定位方式,且语法更简洁。
  4. 内置反反爬机制:自动处理部分反爬策略(如 User-Agent 随机化、Cookie 持久化)。
  5. 完整的文档支持:中文文档详尽,对国内开发者友好,入门门槛低。

三、快速上手:DrissionPage 基础用法

1. 安装库

bash

pip install DrissionPage

2. 静态模式:爬取静态网页

适用于无需交互的静态页面(如新闻详情页、博客文章):

代码:

from DrissionPage import SessionPage# 创建静态页面对象(基于requests)page = SessionPage()# 发送请求page.get("https://www.baidu.com")# 获取页面标题print("页面标题:", page.title)# 获取页面源码html = page.html# 用CSS选择器提取元素search_input = page.ele("#kw")  # 定位百度搜索框print("搜索框默认值:", search_input.attr("value"))

3. 动态模式:操控浏览器

适用于需要交互的动态页面(如登录、表单提交、JavaScript 渲染内容):

代码:

from DrissionPage import ChromiumPage
# 创建浏览器页面对象(默认启动Chrome)
page = ChromiumPage()
# 打开网页
page.get("https://www.baidu.com")
# 定位并输入搜索关键词
page.ele("#kw").input("DrissionPage")
# 点击搜索按钮
page.ele("#su").click()
# 等待页面加载完成
page.wait.load_start()
# 提取搜索结果
results = page.eles(".result a")  # 获取所有结果链接
for i, result in enumerate(results[:5], 1):print(f"结果{i}:{result.text},链接:{result.attr('href')}")# 关闭浏览器
page.close()

4. 多开浏览器

使用ChromiumOptions对象的atuo_port()方法,可指定程序自动创建全新的浏览器,多个浏览器互不干扰。

代码:

from DrissionPage import ChromiumPage
# 创建浏览器页面对象(默认启动Chrome)
page = ChromiumPage()
# 打开网页
page.get("https://www.baidu.com")
# 定位并输入搜索关键词
page.ele("#kw").input("DrissionPage")
# 点击搜索按钮
page.ele("#su").click()
# 等待页面加载完成
page.wait.load_start()
# 提取搜索结果
results = page.eles(".result a")  # 获取所有结果链接
for i, result in enumerate(results[:5], 1):print(f"结果{i}:{result.text},链接:{result.attr('href')}")# 关闭浏览器
page.close()

四、进阶技巧:让自动化更高效

1. 元素定位:多种方式灵活选择

DrissionPage 的元素定位语法非常灵活,支持多种方式:

代码:

# 1. CSS选择器(推荐)page.ele("#username")  # ID选择器page.ele(".password")  # 类选择器page.ele("input[name='email']")  # 属性选择器# 2. XPathpage.ele("//div[@class='content']")# 3. 文本内容(精确匹配)page.ele("text=提交订单")# 4. 部分文本匹配(模糊定位)page.ele("text:包含('登录')")# 5. 标签名page.ele("tag:select")

2. 处理 iframe 和弹窗

无需切换上下文,直接定位嵌套元素:

代码:

# 定位iframe中的元素(自动切换到iframe上下文)iframe_ele = page.ele("#iframe1").ele("#username")# 处理alert弹窗alert = page.alert  # 获取弹窗对象print(alert.text)  # 打印弹窗内容alert.accept()  # 确认弹窗

3. 配置浏览器参数

自定义浏览器启动参数(如无头模式、代理):

代码:

from DrissionPage import ChromiumOptions, ChromiumPage# 创建配置对象co = ChromiumOptions()co.set_headless(True)  # 无头模式(不显示浏览器窗口)co.set_proxy("http://127.0.0.1:8888")  # 设置代理co.add_argument("--disable-images")  # 禁用图片加载# 应用配置启动浏览器page = ChromiumPage(co)

五、DrissionPage vs 其他工具

工具

优势

劣势

DrissionPage

静态 / 动态无缝切换,API 简洁,学习成本低

生态相对较小,复杂场景案例较少

Selenium

生态成熟,支持多浏览器

API 繁琐,配置复杂,速度较慢

Playwright

跨浏览器支持好,异步性能强

语法较新,与 requests 配合需额外处理 Cookie

requests

速度快,轻量

无法处理 JavaScript 动态内容

官方文档链接:https://www.drissionpage.cn/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/89122.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

理解Grafana中`X-Scope-OrgID`的作用与配置

X-Scope-OrgID的作用 该HTTP Header用于标识Loki日志数据的所属租户(组织)。在多租户模式下,Loki通过此Header隔离不同团队或用户的数据,确保查询和存储的独立性。数据隔离: 租户A的日志标记为X-Scope-OrgID: team-a&a…

【PycharmPyqt designer桌面程序设计】

在 main.py 中调用 Qt Designer 生成的 windows.py(假设它是 PySide2 版)。 只要把两个文件放在同一目录即可直接运行。 ──────────────────── 1️⃣ windows.py(Qt Designer 生成,已转码) # -*-…

Unity Android Logcat插件 输出日志中文乱码解决

背景之前安卓真机调试看日志,一直用的是Android Studio自带的adb命令进行看日志,不太方便,改用Unity自带的安卓日志插件时,存在中文日志乱码问题。插件安装基于Unity6000.1.11版本:Window -> Package Management -&…

Halcon双相机单标定板标定实现拼图

1.Halcon图像拼接算法在之前的文章里也写过,主要是硬拼接和特征点拼接两种方式,今天增加另一种拼接图像的方式。应用场景是多个相机联合一起拍大尺寸的物体,并且相机视野之间存在重叠区域。通过在同一个标定板上面标定,计算两个相…

动物世界一语乾坤韵芳华 人工智能应用大学毕业论文 -仙界AI——仙盟创梦IDE

提示词在一个奇幻的童话森林里,所有的动物都像人类一样直立行走,穿着各种搞怪的衣服。 一只戴着超大眼镜、穿着背带裤的乌龟,正一本正经地站在一个蘑菇舞台上,拿着一根树枝当作麦克风,准备唱歌。它的眼镜总是往下滑&am…

SpringBoot(原理篇)

大家好,这里是 盛码笔记。 本篇我们来聊一聊 Spring Boot 的“魔法”是如何实现的。你可能已经用过 Spring Boot 快速搭建项目,但有没有想过:为什么只需要引入几个 starter,Spring Boot 就能自动配置好整个应用环境? …

数据结构:栈(区间问题)

码蹄集OJ-小码哥的栈 #include<bits/stdc.h> using namespace std; #define int long long const int N1e67; struct MOOE {int ll,rr; }; stack<MOOE>st; signed main( ) {ios::sync_with_stdio(false);cin.tie(nullptr);int n;cin>>n;while(n--){int opt…

Vue 中 data、watch、created 和 methods

以下是 Vue 中 data、watch、created 和 methods 的详细解释&#xff0c;结合常见使用场景和示例&#xff1a;1. data&#xff1a;响应式数据容器 作用&#xff1a;定义组件的响应式数据&#xff08;状态&#xff09;&#xff0c;当数据变化时&#xff0c;视图自动更新。特点&a…

精密模具冷却孔内轮廓检测方法探究 —— 激光频率梳 3D 轮廓检测

引言精密模具冷却孔的内轮廓精度直接影响注塑成型效率与制品质量。冷却孔具有深径比大&#xff08;可达 25:1&#xff09;、结构复杂&#xff08;多为螺旋形或异形&#xff09;、表面质量要求高&#xff08;Ra≤0.2μm&#xff09;等特点&#xff0c;传统检测方法难以满足其高精…

Vue单文件组件与脚手架工程化开发

一、Vue与VueComponent原型关系解析1. 原型链关系图解在Vue中&#xff0c;组件实例(VueComponent)与Vue实例之间存在特殊的原型链关系&#xff1a;VueComponent.prototype.__proto__ Vue.prototype这种设计使得所有组件都能访问Vue原型上定义的方法和属性。2. 原理验证示例// …

架构设计之计算高性能——单体服务器高性能

架构设计之计算高性能——单体服务器高性能 高性能是每个程序员共同的追求&#xff0c;无论是开发系统&#xff0c;还是仅仅只是写一段脚本&#xff0c;都希望能够达到高性能的效果&#xff0c;而高性能又是软件系统设计中最复杂的一步。无论是开发千万级并发的电商系统&#…

Unity灯光面板环境设置

在Unity中&#xff0c;环境设置&#xff08;Environment Lighting&#xff09; 是灯光面板&#xff08;Lighting Window&#xff09;的核心功能之一&#xff0c;用于控制场景的全局光照效果&#xff0c;包括天空盒、环境光、反射和雾效等。这些设置直接影响场景的整体氛围和真实…

MySQL语句优化案例

1.案例in查询条件很慢其中in中共115个select id,detail_id,request,response,utime,ctime from response_detaill where detaill_id in (26371986, 26372242, 26371984, 26371990, 26400150, 26371988, 26371994, 26371992,26371998, 26371996, 26371970, 26371968, 2637197…

能行为监测算法:低成本下的高效管理

AI监控智慧公司管理&#xff1a;降本增效的实践与突破一、背景&#xff1a;经济压力下的管理转型需求在经济下行周期&#xff0c;企业面临人力成本攀升、管理效率低下、安全风险频发等多重挑战。传统监控依赖人工巡检&#xff0c;存在响应滞后、误判率高、数据孤岛等问题&#…

当前(2024-07-14)视频插帧(VFI)方向的 SOTA 基本被三篇顶会工作占据,按“精度-速度-感知质量”三条线总结如下,供你快速定位最新范式

当前&#xff08;2024-07-14&#xff09;视频插帧&#xff08;VFI&#xff09;方向的 SOTA 基本被三篇顶会工作占据&#xff0c;按“精度-速度-感知质量”三条线总结如下&#xff0c;供你快速定位最新范式。感知质量最佳&#xff1a;CVPR 2024 ‑ PerVFI • 关键词&#xff1a;…

开源 python 应用 开发(七)数据可视化

最近有个项目需要做视觉自动化处理的工具&#xff0c;最后选用的软件为python&#xff0c;刚好这个机会进行系统学习。短时间学习&#xff0c;需要快速开发&#xff0c;所以记录要点步骤&#xff0c;防止忘记。 链接&#xff1a; 开源 python 应用 开发&#xff08;一&#xf…

基于深度学习的情感分析模型:从文本数据到模型部署

前言 情感分析&#xff08;Sentiment Analysis&#xff09;是自然语言处理&#xff08;NLP&#xff09;领域中的一个重要应用&#xff0c;它通过分析文本数据来判断文本的情感倾向&#xff0c;例如正面、负面或中性。随着社交媒体的兴起&#xff0c;情感分析在市场调研、品牌管…

使用python 实现一个http server

下面是一个使用 Python 内置库 http.server 的简单 HTTP 服务器实现。不需要安装任何第三方库&#xff0c;非常适合做演示或开发测试用。 from http.server import HTTPServer, BaseHTTPRequestHandlerclass SimpleHTTPRequestHandler(BaseHTTPRequestHandler):def do_GET(self…

Redis技术笔记-主从复制、哨兵与持久化实战指南

目录 前言 一、Redis主从复制 &#xff08;一&#xff09;Redis主从复制介绍 &#xff08;二&#xff09;基本环境准备 &#xff08;三&#xff09;工作原理 &#xff08;四&#xff09;结构模式 &#xff08;五&#xff09;一主一从&#xff08;无密码&#xff09; 配置…

sundog公司的SilverLining SDK库实现3d动态云层和下雨、下雨、雨夹雪效果

OSG系列文章目录 文章目录OSG系列文章目录前言一、3d动态云与下雨、下雪效果不能同时出现二、3d动态云与下雨、下雪效果不能同时出现的原因三、解决办法&#xff1a;前言 先看下效果&#xff1a;下雨 效果&#xff1a;下雪 效果&#xff1a;雨夹雪 &#x1f324;️ Sundo…