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()textget_attribute() 等 click()input()textattr() 等,并支持链式操作和更高级操作 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的更多相关文章

  1. 所有selenium相关的库

    通过爬虫 获取 官方文档库 如果想获取 相应的库 修改对应配置即可 代码如下 from urllib.parse import urljoin import requests from lxml im ...

  2. 推荐一款新的自动化测试框架:DrissionPage!

    今天给大家推荐一款基于Python的网页自动化工具:DrissionPage.这款工具既能控制浏览器,也能收发数据包,甚至能把两者合而为一,简单来说:集合了WEB浏览器自动化的便利性和 request ...

  3. 新一代自动化利器-DrissionPage

    熟悉的小伙伴知道我的工作有相当一部分是自动化,在探索相关的技术上一直没停下脚步,我痛恨selenium.playwright的非标准内核机制,也曾对clicknium引进了新的问题无语,以及接口爬取数 ...

  4. Python爬虫小白入门(四)PhatomJS+Selenium第一篇

    一.前言 在上一篇博文中,我们的爬虫面临着一个问题,在爬取Unsplash网站的时候,由于网站是下拉刷新,并没有分页.所以不能够通过页码获取页面的url来分别发送网络请求.我也尝试了其他方式,比如下拉 ...

  5. Selenium的PO模式(Page Object Model)[python版]

     Page Object Model 简称POM  普通的测试用例代码: .... #测试用例 def test_login_mail(self): driver = self.driver driv ...

  6. selenium元素定位篇

    Selenium webdriver是完全模拟用户在对浏览器进行操作,所有用户都是在页面进行的单击.双击.输入.滚动等操作,而webdriver也是一样,所以需要我们指定元素让webdriver进行单 ...

  7. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

  8. 幼儿园的 selenium

    from selenium import webdriver     *固定开头     b=webdriver.Firefox()              *打开火狐浏览器    browser. ...

  9. 使用selenium编写脚本常见问题(一)

    前提:我用selenium IDE录制脚本,我用java写的脚本,如果大家想看的清楚明白推荐java/Junit4/Webdriver 我用的是java/TestNG/remote control 1 ...

  10. 关于selenium RC的脚本开发

    第一.需要录制脚本,找个我也不说了.就是在firefox下下载一个selenium-IDE并且安装. 第二.在工具里找到selenium-IDE点击运行. 第三.默认是红色按钮点击状态的,接下来随便你 ...

随机推荐

  1. Java中的静态块(static{})

    静态块(static{}) (1) static关键字还有一个比较关键的作用,用来形成静态代码块(static{} 即static块 )以优化程序性能. (2) static块可以置于类中的任何地方, ...

  2. Synchronized是怎么实现的?

    回答重点 synchronized 实现原理依赖于JVM 的 Monitor(监视器锁)和对象头(Object Header) synchronized 修饰代码块:会在代码块的前后插入 monito ...

  3. maixpy 常用API整理

    2.openmvAPI整理 2.1 cmath - 复数的数学函数 cos cmath.cos(z) 返回z的余弦. exp cmath.exp(z) 返回z的指数. log cmath.log(z) ...

  4. DRF之JWT签发Token源码分析

    DRF之JWT签发Token源码分析 [一]JWT介绍 JWT(JSON Web Token)是一种用于身份认证和授权的开放标准(RFC 7519). 它基于JSON格式定义了一种安全的令牌,用于在客 ...

  5. Blazor学习之旅(6)路由系统

    大家好,我是Edison. Blazor 的路由系统就和 ASP.NET MVC的路由系统一样,可以为我们提供灵活的选项,可用于确保用户请求到达可处理它们并返回用户想要的信息的组件. 本篇,我们来了解 ...

  6. JS ES6数组中删除指定元素

    https://www.cnblogs.com/linsx/p/8331623.html arr.splice(arr.findIndex(item => item.id === data.id ...

  7. 关于 winform Dev 使用的总结

    treeList控件 1.去除树的头一行:属性–OptionsView–ShowColumns 设为fakse 2.去除树最左列的鼠标箭头列:属性–OptionsView–ShowIndicator设 ...

  8. java 中的函数参数传递方式

    简介 值传递. 但是对于基本数据类型, 传递的是就是数值, 如果不是基本数据类型, 传递的就是对象的地址,也就是将对象的地址拷贝了一份传递过去. 参考链接 https://www.cnblogs.co ...

  9. TreeSetTest

    简介 java 核心编程 关于TreeSetTest的知识 输出 [[descrition=Toaster,partNumber=1234], [descrition=Widget,partNumbe ...

  10. MoneyPrinterTurbo – 免费开源的AI短视频生成工具

    一.MoneyPrinterTurbo简介 MoneyPrinterTurbo是一款由开发者harry0703基于原有MoneyPrinter项目优化而来的开源AI视频生成工具. 这款工具的核心价值在 ...