news 2026/5/19 14:57:45

告别Selenium!用DrissionPage的ChromiumPage和SessionPage,5分钟搞定登录与爬虫

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
告别Selenium!用DrissionPage的ChromiumPage和SessionPage,5分钟搞定登录与爬虫

告别Selenium!用DrissionPage的ChromiumPage和SessionPage,5分钟搞定登录与爬虫

在Python自动化测试和爬虫开发领域,Selenium曾经是无可争议的王者。但随着时间的推移,开发者们逐渐意识到Selenium的局限性——复杂的配置、缓慢的执行速度,以及需要额外安装浏览器驱动。这些痛点催生了一批新兴的替代方案,其中DrissionPage以其简洁高效的特性脱颖而出。

DrissionPage是一个纯Python编写的自动化工具库,它巧妙地整合了浏览器自动化和网络请求两大功能。通过ChromiumPage和SessionPage两个核心类,开发者可以轻松应对各种场景:从需要渲染JavaScript的复杂网页操作,到高性能的纯数据抓取。本文将带你快速上手DrissionPage,通过实际案例展示它如何用更简洁的代码完成传统Selenium的任务。

1. 为什么选择DrissionPage而非Selenium

在深入代码之前,让我们先看看DrissionPage相比Selenium的几大优势:

  • 零配置启动:不需要下载额外的浏览器驱动,安装即用
  • 更简洁的API:方法命名直观,链式调用让代码更易读
  • 混合模式支持:可在浏览器控制和纯请求模式间无缝切换
  • 内置智能等待:自动处理元素加载等待,减少冗余代码
  • 性能优势:比Selenium执行相同任务快30%-50%
# Selenium与DrissionPage初始化对比 from selenium import webdriver from DrissionPage import ChromiumPage # Selenium需要配置驱动路径 driver = webdriver.Chrome(executable_path='/path/to/chromedriver') # DrissionPage直接使用系统已安装的浏览器 page = ChromiumPage()

从上面的简单对比就能看出,DrissionPage省去了繁琐的驱动配置环节。对于经常需要在不同环境部署脚本的开发者来说,这大大降低了维护成本。

2. 快速实现网站登录:以Gitee为例

自动化登录是许多爬虫和测试脚本的第一步。让我们看看如何使用DrissionPage的ChromiumPage完成Gitee登录流程。

2.1 登录流程实现

from DrissionPage import ChromiumPage # 创建页面对象(会自动打开浏览器) page = ChromiumPage() page.get('https://gitee.com/login') # 输入用户名和密码 page.ele('#user_login').input('your_username') page.ele('#user_password').input('your_password') # 点击登录按钮 page.ele('@value=登 录').click()

这段代码有几个值得注意的特点:

  1. 智能元素定位ele()方法支持CSS选择器、XPath、属性定位等多种方式
  2. 自动等待:所有元素操作都内置等待机制,默认10秒超时
  3. 链式调用:可以直接在元素定位后接操作命令,代码更紧凑

2.2 登录状态保持

登录成功后,DrissionPage会自动管理cookies。你可以将会话保存下来供后续使用:

# 保存当前会话 page.save_cookies('gitee_cookies.json') # 下次使用时加载cookies page = ChromiumPage() page.get('https://gitee.com') page.load_cookies('gitee_cookies.json') page.get('https://gitee.com/dashboard') # 直接进入登录后页面

3. 高效数据爬取:SessionPage实战

对于不需要浏览器渲染的简单页面,使用SessionPage(基于requests)可以获得更高的性能。下面我们以爬取Gitee开源项目为例。

3.1 单页数据抓取

from DrissionPage import SessionPage page = SessionPage() page.get('https://gitee.com/explore/all') # 获取所有项目标题和链接 projects = page.eles('.title project-namespace-path') for proj in projects: print(f"项目: {proj.text}, 链接: {proj.link}")

3.2 分页爬取完整实现

from DrissionPage import SessionPage import time page = SessionPage() for i in range(1, 6): # 爬取前5页 page.get(f'https://gitee.com/explore/all?page={i}') # 使用CSS选择器定位元素 items = page.eles('.project-info') for item in items: title = item.ele('a').text desc = item.ele('.project-desc').text stars = item.ele('.stars-count').text print(f"{title}: {desc} | 星标: {stars}") time.sleep(1) # 礼貌性延迟

提示:对于反爬严格的网站,可以结合ChromiumPage和SessionPage使用。先用浏览器获取渲染后的页面,然后提取关键数据用SessionPage批量请求。

4. 元素定位与操作大全

DrissionPage提供了丰富的元素定位和操作方法,比Selenium更加灵活。以下是常用方式的总结:

4.1 元素定位方式对比

定位方式示例代码适用场景
CSS选择器page.ele('#id')简单的ID/class定位
XPathpage.ele('xpath://div[@class="name"]')复杂层级结构
属性定位page.ele('@name=username')通过任意属性定位
文本定位page.ele('text:登录')通过可见文本定位
组合定位page.ele('tag:div@class=header')标签+属性组合

4.2 常用元素操作

element = page.ele('#some-element') # 基本操作 element.click() # 点击 element.input('text') # 输入文本 element.clear() # 清空内容 # 高级操作 element.drag_to(other_element) # 拖拽 element.hover() # 鼠标悬停 element.screenshot('elem.png') # 元素截图 # JavaScript执行 element.run_script('arguments[0].style.border="2px solid red"')

5. 从Selenium迁移到DrissionPage的实用技巧

如果你已经有Selenium项目,以下转换指南可以帮助你平滑迁移:

5.1 常见模式转换对照表

Selenium代码DrissionPage等效代码
find_element(By.ID, 'id')ele('#id')
find_elements(By.CLASS, 'class')eles('.class')
WebDriverWait(driver, 10)内置自动等待,无需额外代码
ActionChains(driver).move_to_element(elem)elem.hover()
driver.execute_script()page.run_js()element.run_script()

5.2 性能优化建议

  1. 合理选择页面模式

    • 需要JS渲染:用ChromiumPage
    • 纯数据抓取:用SessionPage
  2. 复用浏览器实例

    # 创建时指定不自动关闭 page = ChromiumPage(quit_driver=False) # 多次操作... # 最后手动关闭 page.quit()
  3. 并行处理技巧

    from concurrent.futures import ThreadPoolExecutor def crawl_page(url): page = SessionPage() page.get(url) return page.ele('tag:title').text urls = ['https://example.com/page1', 'https://example.com/page2'] with ThreadPoolExecutor(max_workers=4) as executor: results = list(executor.map(crawl_page, urls))

在实际项目中,DrissionPage的简洁API确实大幅减少了样板代码。一个常见的登录+数据抓取流程,用Selenium可能需要100行代码,而用DrissionPage通常50行内就能完成,且执行速度更快。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/19 14:57:42

从RTL Viewer到真实波形:Quartus II里看电路图与仿真结果对照指南

从RTL Viewer到真实波形:Quartus II里看电路图与仿真结果对照指南 在FPGA开发中,Verilog代码到实际电路的映射过程常常让初学者感到抽象。当你在Quartus II中编写了一个简单的加法器模块,点击综合后,那些看似简单的代码究竟生成了…

作者头像 李华
网站建设 2026/5/19 14:55:27

3个实战技巧:如何用QuPath高效完成生物图像定量分析

3个实战技巧:如何用QuPath高效完成生物图像定量分析 【免费下载链接】qupath QuPath - Open-source bioimage analysis for research 项目地址: https://gitcode.com/gh_mirrors/qu/qupath 在生物医学研究中,图像分析往往是决定研究质量和效率的关…

作者头像 李华
网站建设 2026/5/19 14:54:23

OpenWrt驱动DHT11温湿度传感器:从硬件连接到数据可视化的完整实践

1. 项目概述与核心价值最近在折腾一个智能家居网关的项目,需要实时监测几个关键位置的温湿度数据。市面上成品传感器模块不少,但考虑到成本、可定制性以及想把手头闲置的OpenWrt路由器利用起来,我决定自己动手,在OpenWrt系统上集成…

作者头像 李华