3分钟上手DrissionPage:零代码基础也能玩转Web自动化

3分钟上手DrissionPage:零代码基础也能玩转Web自动化

【免费下载链接】DrissionPage Python based web automation tool. Powerful and elegant. 【免费下载链接】DrissionPage 项目地址: https://gitcode.com/gh_mirrors/dr/DrissionPage

引言:告别繁琐,拥抱极简Web自动化

你是否还在为Selenium的复杂配置而头疼?是否因Requests无法处理JavaScript渲染内容而束手无策?本文将带你3分钟入门一款集浏览器控制与数据包收发于一体的Python自动化工具——DrissionPage,让零代码基础的你也能轻松玩转Web自动化。

读完本文,你将学会:

  • 快速安装DrissionPage
  • 创建页面对象并访问网页
  • 定位和操作页面元素
  • 在浏览器模式与数据包模式间自由切换
  • 编写一个完整的自动化案例

DrissionPage简介

DrissionPage是一款基于Python的Web自动化工具,它创新性地将浏览器控制和数据包收发功能融合在一起,既能像Selenium一样操控浏览器,又能像Requests一样高效收发网络请求。其主要特点包括:

  • 无需WebDriver:告别繁琐的浏览器驱动配置
  • 双模式切换:浏览器模式(d模式)和数据包模式(s模式)无缝切换
  • 简洁定位语法:比XPath和CSS选择器更直观的元素定位方式
  • 自动等待机制:内置智能等待,大幅提升脚本稳定性
  • 跨iframe操作:无需切换即可直接定位iframe内元素

快速开始

安装DrissionPage

使用pip命令即可快速安装DrissionPage:

pip install DrissionPage

第一个程序:访问网页并获取标题

下面的代码将展示如何创建一个页面对象,访问百度首页,并获取页面标题:

from DrissionPage import WebPage

# 创建WebPage对象,默认使用浏览器模式
page = WebPage()

# 访问百度首页
page.get('https://www.baidu.com')

# 获取并打印页面标题
print(page.title)  # 输出: 百度一下,你就知道

核心概念:页面对象

DrissionPage提供了三种主要的页面对象,以适应不同的自动化场景:

页面对象功能描述适用场景
ChromiumPage纯浏览器控制需要完整渲染JavaScript的场景
SessionPage纯数据包收发高效爬取静态网页数据
WebPage双模式整合需要登录后爬取或复杂交互的场景

页面对象关系图

mermaid

元素定位:极简语法,告别繁琐

DrissionPage独创了简洁高效的元素定位语法,让元素查找变得前所未有的简单:

基础定位语法

语法说明示例
#id通过ID定位page('#kw') 定位id为kw的元素
.class通过class定位page('.s_ipt') 定位class为s_ipt的元素
@attr=value通过属性定位page('@name=wd') 定位name属性为wd的元素
text通过文本定位page('百度一下') 定位文本为"百度一下"的元素
tag:tag_name通过标签名定位page('tag:input') 定位input标签元素

定位示例:百度搜索

from DrissionPage import ChromiumPage

# 创建浏览器页面对象
page = ChromiumPage()

# 访问百度首页
page.get('https://www.baidu.com')

# 定位搜索框并输入内容
page('#kw').input('DrissionPage')

# 定位搜索按钮并点击
page('@value=百度一下').click()

# 等待搜索结果加载
page.wait.load_start()

# 获取搜索结果标题
results = page.eles('.result h3')
for i, result in enumerate(results[:5], 1):
    print(f'{i}. {result.text}')

高级定位技巧

DrissionPage还支持更高级的定位方式,如模糊匹配、正则表达式和相对定位:

# 模糊匹配包含特定文本的元素
page('text:DrissionPage')

# 使用正则表达式定位
page('regex:^百度.*')

# 相对定位 - 获取下一个兄弟元素
page('#kw').next()

# 相对定位 - 获取父元素
page('#kw').parent()

双模式切换:兼顾灵活性与效率

WebPage对象支持在浏览器模式(d模式)和数据包模式(s模式)之间无缝切换,结合了浏览器的交互能力和数据包的高效特性。

模式切换示例:登录后爬取数据

from DrissionPage import WebPage

# 创建WebPage对象,默认使用浏览器模式
page = WebPage()

# 访问需要登录的网站
page.get('https://gitee.com/login')

# 在浏览器模式下完成登录(此处省略输入账号密码步骤)
# page('#user_login').input('your_username')
# page('#user_password').input('your_password')
# page('@value=登录').click()

# 切换到数据包模式
page.change_mode()

# 现在可以用高效的数据包模式爬取数据了
page.get('https://gitee.com/explore/all')
repos = page.eles('.title project-namespace-path')
for repo in repos[:5]:
    print(repo.text, repo.link)

模式切换流程图

mermaid

实战案例:爬取猫眼电影排行榜

下面我们将通过一个完整的案例,展示如何使用DrissionPage爬取猫眼电影排行榜数据:

from DrissionPage import ChromiumPage

# 创建浏览器页面对象
page = ChromiumPage()

# 访问猫眼电影排行榜
page.get('https://www.maoyan.com/board/4')

# 存储电影数据的列表
movies = []

# 循环翻页爬取数据
while True:
    # 获取当前页所有电影元素
    movie_elements = page.eles('t:dd')
    
    # 提取每部电影的信息
    for movie in movie_elements:
        rank = movie('t:i').text
        title = movie('.movie-item-title').text
        actors = movie('.star').text
        release_time = movie('.releasetime').text
        score = movie('.score').text
        
        movies.append({
            '排名': rank,
            '标题': title,
            '主演': actors,
            '上映时间': release_time,
            '评分': score
        })
    
    # 尝试点击下一页
    next_btn = page('text:下一页', timeout=2)
    if next_btn:
        next_btn.click()
        page.wait.load_start()
    else:
        break

# 打印爬取结果
for movie in movies[:10]:
    print(f"{movie['排名']}. {movie['标题']} - {movie['评分']}")
    print(f"   {movie['主演']}")
    print(f"   {movie['上映时间']}\n")

DrissionPage vs 传统工具

特性DrissionPageSeleniumRequests
浏览器控制
数据包收发
无需WebDriver
元素自动等待
跨iframe定位
语法简洁性⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

常见问题与解决方案

Q: 浏览器启动失败怎么办?

A: 确保已安装Chrome或Edge浏览器,或通过ChromiumOptions指定浏览器路径:

from DrissionPage import ChromiumPage
from DrissionPage._configs import ChromiumOptions

co = ChromiumOptions()
co.set_browser_path(r'C:\Program Files\Google\Chrome\Application\chrome.exe')
page = ChromiumPage(co)

Q: 如何处理登录验证码?

A: 使用浏览器模式手动完成登录后,切换到数据包模式继续爬取:

page = WebPage()
page.get('https://example.com/login')
# 手动完成验证码输入
page.change_mode('s')  # 切换到数据包模式
# 继续后续操作

Q: 如何设置代理?

A: 通过ChromiumOptions或SessionOptions设置代理:

# 浏览器模式设置代理
co = ChromiumOptions()
co.set_proxy('http://username:password@proxy_ip:port')

# 数据包模式设置代理
so = SessionOptions()
so.set_proxy('http://username:password@proxy_ip:port')

总结与展望

通过本文的介绍,你已经了解了DrissionPage的基本用法和核心特性。它不仅简化了Web自动化的实现流程,还创新性地将浏览器控制和数据包收发功能结合,为Web自动化开辟了新的可能。

未来,DrissionPage将继续优化性能,增加更多实用功能,让Web自动化变得更加简单高效。

如果你觉得本文对你有帮助,不妨点赞、收藏、关注三连,后续我们还将推出更多DrissionPage高级用法教程。

附录:常用API速查表

方法说明示例
get(url)访问指定URLpage.get('https://www.baidu.com')
ele(locator)定位单个元素page.ele('#kw')
eles(locator)定位多个元素page.eles('.result')
input(text)向元素输入文本page('#kw').input('DrissionPage')
click()点击元素page('@value=百度一下').click()
change_mode()切换工作模式page.change_mode()
wait.load_start()等待页面开始加载page.wait.load_start()
html获取页面HTMLpage.html
title获取页面标题page.title

【免费下载链接】DrissionPage Python based web automation tool. Powerful and elegant. 【免费下载链接】DrissionPage 项目地址: https://gitcode.com/gh_mirrors/dr/DrissionPage

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值