Drissionpage VS Selenium
DrissionPage vs Selenium
特性/功能点 | Selenium | DrissionPage | 备注 |
---|---|---|---|
底层驱动 | WebDriver 协议 (如 ChromeDriver, geckodriver) | playwright (基于 CDP/DevTools Protocol) | Selenium 是老牌协议,DrissionPage 使用更现代的协议,性能和稳定性更优。 |
性能 | 相对较低,启动 WebDriver 实例耗时 | 较高,Playwright 的驱动性能更好,DOM 操作更快 | DrissionPage 在操作速度上有优势。 |
易用性/API | 相对底层,需要手动管理等待、查找元素等 | 高,封装了大量常用操作,提供链式调用,API 更符合直觉 | DrissionPage 的 API 设计更符合“人”的思维,减少了样板代码。 |
页面等待 | 需要手动编写 WebDriverWait 和 expected_conditions |
封装了智能等待,默认更智能,也支持多种显式等待 | DrissionPage 在这方面做了大量优化,减少了等待的复杂度。 |
元素定位 | find_element_by_* 系列方法,支持 XPath, CSS Selector, ID 等 |
提供更简洁的 ele() 方法,支持多种定位方式,并支持组合定位 |
DrissionPage 的定位方法更灵活,组合定位很强大。 |
元素操作 | click() , send_keys() , text , get_attribute() 等 |
click() , input() , text , attr() 等,并支持链式操作和更高级操作 |
DrissionPage 提供了更多高级操作和属性获取方法。 |
多页面/标签页 | 需要手动切换 driver.switch_to.window() |
自动管理,切换更方便,支持同时操作多个标签页 | DrissionPage 在多标签页管理上更智能和高效。 |
弹窗处理 | driver.switch_to.alert 手动处理 |
自动处理常见弹窗,也可手动指定 | DrissionPage 减少了弹窗处理的麻烦。 |
代理设置 | 需要通过 Options 设置 |
更简单,直接在 SessionPage 或 ChromiumPage 初始化时设置 |
DrissionPage 在代理设置上更直接。 |
User-Agent/Headers | 需要通过 Options 设置或拦截请求 |
更简单,直接在 SessionPage 或 ChromiumPage 初始化时设置或修改 |
DrissionPage 提供了更便捷的 Headers 管理。 |
浏览器模式 | 仅支持有界面模式 (Headful) 和无界面模式 (Headless) | 除了有界面和无界面,还支持“半无头”模式(不加载界面但保留渲染能力) | DrissionPage 提供了更丰富的浏览器运行模式。 |
请求拦截与修改 | 需依赖 Selenium Wire 等第三方库或复杂设置 | 内置强大的请求拦截和修改功能,可拦截 JS、CSS、图片等资源 | DrissionPage 在这方面是其一大亮点,非常适合反爬和资源控制。 |
JS 执行 | execute_script() |
同样支持 run_js() ,但通常其内置方法已足够 |
两者都支持 JS 执行。 |
网络请求模块 | 仅驱动浏览器,不直接提供 HTTP 请求功能 | 内置强大的 requests 库,可以直接发起 HTTP 请求 | 关键区别! DrissionPage 兼具浏览器自动化和 HTTP 请求能力。 |
反爬能力 | 依赖浏览器指纹模拟,需要额外配置和插件 | 更强,通过底层协议模拟浏览器行为,内置反爬指纹,更难被检测 | DrissionPage 在反爬方面做了大量优化,更难被识别为自动化工具。 |
学习曲线 | 中等,概念较多,需理解 WebDriver 协议 | 较低,API 设计更直观,很多高级功能开箱即用 | DrissionPage 适合快速上手和开发。 |
社区/生态 | 巨大,历史悠久,资源丰富,各种语言版本支持 | 新兴,社区逐渐壮大,主要针对 Python | Selenium 的社区支持更广泛。 |
维护状态 | 活跃维护 | 活跃维护,更新迭代较快 | 两者都在积极发展。 |
总结与选择建议:
选择 DrissionPage 的场景:
- 追求效率和速度: 如果你的爬虫或自动化任务需要快速执行,并且对性能有要求。
- 需要更强的反爬能力: DrissionPage 在模拟真实浏览器行为和伪装方面做了大量工作。
- 希望简化代码,提高开发效率: 其更高级、更直观的 API 和链式调用能大幅减少样板代码。
- 需要同时进行 HTTP 请求和浏览器自动化: DrissionPage 的 Session 模式和 Chromium 模式结合得非常好,可以在同一个会话中无缝切换。
- 对新技术栈感兴趣: 基于 Playwright 的底层驱动,代表了 Web 自动化领域的新趋势。
- 处理复杂页面和交互: 例如处理异步加载、大量 JS 渲染的页面,其智能等待和元素操作更高效。
选择 Selenium 的场景:
- 对 WebDriver 协议非常熟悉,并有大量基于 Selenium 的现有代码库。
- 需要跨多种编程语言进行 Web 自动化: Selenium 支持 Java, C#, Ruby, JavaScript 等多种语言。
- 项目对社区支持和历史沉淀有极高要求: Selenium 社区庞大,遇到问题更容易找到解决方案。
- 自动化测试场景: Selenium 在自动化测试领域有更广泛的应用和成熟的测试框架集成。
- 只需要简单的浏览器操作: 如果你的任务只是非常基础的点击、输入等操作,Selenium 也能胜任。
个人观点:
对于大多数 Python Web 自动化和爬虫项目,DrissionPage 是一个更现代、更强大、更易用的选择。它在底层性能、反爬能力和 API 设计上都做了显著优化,尤其内置了 requests
库的功能,使其成为一个兼具浏览器自动化和传统 HTTP 请求的“一站式”解决方案。如果你正在开始一个新的项目,或者想升级你的爬虫/自动化工具,强烈建议尝试 DrissionPage。Selenium 则更适合那些有深厚 Selenium 基础或需要跨语言支持的场景。
Drissionpage VS Selenium的更多相关文章
- 所有selenium相关的库
通过爬虫 获取 官方文档库 如果想获取 相应的库 修改对应配置即可 代码如下 from urllib.parse import urljoin import requests from lxml im ...
- 推荐一款新的自动化测试框架:DrissionPage!
今天给大家推荐一款基于Python的网页自动化工具:DrissionPage.这款工具既能控制浏览器,也能收发数据包,甚至能把两者合而为一,简单来说:集合了WEB浏览器自动化的便利性和 request ...
- 新一代自动化利器-DrissionPage
熟悉的小伙伴知道我的工作有相当一部分是自动化,在探索相关的技术上一直没停下脚步,我痛恨selenium.playwright的非标准内核机制,也曾对clicknium引进了新的问题无语,以及接口爬取数 ...
- Python爬虫小白入门(四)PhatomJS+Selenium第一篇
一.前言 在上一篇博文中,我们的爬虫面临着一个问题,在爬取Unsplash网站的时候,由于网站是下拉刷新,并没有分页.所以不能够通过页码获取页面的url来分别发送网络请求.我也尝试了其他方式,比如下拉 ...
- Selenium的PO模式(Page Object Model)[python版]
Page Object Model 简称POM 普通的测试用例代码: .... #测试用例 def test_login_mail(self): driver = self.driver driv ...
- selenium元素定位篇
Selenium webdriver是完全模拟用户在对浏览器进行操作,所有用户都是在页面进行的单击.双击.输入.滚动等操作,而webdriver也是一样,所以需要我们指定元素让webdriver进行单 ...
- selenium自动化基础知识
什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...
- 幼儿园的 selenium
from selenium import webdriver *固定开头 b=webdriver.Firefox() *打开火狐浏览器 browser. ...
- 使用selenium编写脚本常见问题(一)
前提:我用selenium IDE录制脚本,我用java写的脚本,如果大家想看的清楚明白推荐java/Junit4/Webdriver 我用的是java/TestNG/remote control 1 ...
- 关于selenium RC的脚本开发
第一.需要录制脚本,找个我也不说了.就是在firefox下下载一个selenium-IDE并且安装. 第二.在工具里找到selenium-IDE点击运行. 第三.默认是红色按钮点击状态的,接下来随便你 ...
随机推荐
- Java中的静态块(static{})
静态块(static{}) (1) static关键字还有一个比较关键的作用,用来形成静态代码块(static{} 即static块 )以优化程序性能. (2) static块可以置于类中的任何地方, ...
- Synchronized是怎么实现的?
回答重点 synchronized 实现原理依赖于JVM 的 Monitor(监视器锁)和对象头(Object Header) synchronized 修饰代码块:会在代码块的前后插入 monito ...
- maixpy 常用API整理
2.openmvAPI整理 2.1 cmath - 复数的数学函数 cos cmath.cos(z) 返回z的余弦. exp cmath.exp(z) 返回z的指数. log cmath.log(z) ...
- DRF之JWT签发Token源码分析
DRF之JWT签发Token源码分析 [一]JWT介绍 JWT(JSON Web Token)是一种用于身份认证和授权的开放标准(RFC 7519). 它基于JSON格式定义了一种安全的令牌,用于在客 ...
- Blazor学习之旅(6)路由系统
大家好,我是Edison. Blazor 的路由系统就和 ASP.NET MVC的路由系统一样,可以为我们提供灵活的选项,可用于确保用户请求到达可处理它们并返回用户想要的信息的组件. 本篇,我们来了解 ...
- JS ES6数组中删除指定元素
https://www.cnblogs.com/linsx/p/8331623.html arr.splice(arr.findIndex(item => item.id === data.id ...
- 关于 winform Dev 使用的总结
treeList控件 1.去除树的头一行:属性–OptionsView–ShowColumns 设为fakse 2.去除树最左列的鼠标箭头列:属性–OptionsView–ShowIndicator设 ...
- java 中的函数参数传递方式
简介 值传递. 但是对于基本数据类型, 传递的是就是数值, 如果不是基本数据类型, 传递的就是对象的地址,也就是将对象的地址拷贝了一份传递过去. 参考链接 https://www.cnblogs.co ...
- TreeSetTest
简介 java 核心编程 关于TreeSetTest的知识 输出 [[descrition=Toaster,partNumber=1234], [descrition=Widget,partNumbe ...
- MoneyPrinterTurbo – 免费开源的AI短视频生成工具
一.MoneyPrinterTurbo简介 MoneyPrinterTurbo是一款由开发者harry0703基于原有MoneyPrinter项目优化而来的开源AI视频生成工具. 这款工具的核心价值在 ...