最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

selenium的新一代替代品---DrissionPage

业界 admin 5浏览 0评论
😀 **selenium的新一代替代品---DrissionPage 新一代自动化利器**

!https://pic2.zhimg/v2-326357efbfd6c494c732ae10ed2d3a83_1440w.jpg

官方文档地址:http://g1879.gitee.io/drissionpagedocs/

✨️ 概述

DrissionPage 是一个基于 Python

的强大网页自动化工具,融合了浏览器控制与数据包收发的功能。它不仅能提供浏览器自动化的便利性,还能实现 requests

的高效性,将两者完美结合。该工具功能丰富,内置众多人性化设计和便捷功能,语法简洁优雅,代码量少,非常适合新手使用。

最新版本:3.2.26

支持系统:Windows、Linux、Mac

python 版本:3.6 及以上

支持应用:Chromium 内核浏览器(如 Chrome、Edge),electron 应用

背景

使用 requests 进行数据采集时,对于需要登录的网站,通常需要分析数据包、JavaScript 源码,并构造复杂的请求。此外,还需处理验证码、JS 混淆和签名参数等反爬手段,这使得门槛较高,开发效率较低。尽管使用浏览器可以绕过许多这些问题,但浏览器的运行效率通常不高。

DrissionPage 的设计初衷就是将浏览器和 requests 的优势结合起来,实现“写得快”和“跑得快”。这个库允许用户在不同需求下切换相应模式,并提供人性化的使用方法,提高开发和运行效率。除了融合两者的优点,本库还封装了常用功能,以网页为单位提供简便的操作和语句,减少用户需要关注的细节,使其能够专注于功能实现。通过简单的方法实现强大的功能,让代码更加优雅。

以前的版本是基于对 selenium 的重新封装实现的。从 3.0 版本开始,作者重新开发了底层代码,摆脱了对 selenium 的依赖,增强了功能,并提升了运行效率。

理念

简洁!易用 !方便!

☀️ 特性

作者经过长期实践,踩过无数坑,总结出的经验全写到这个库里了。

强大的自研内核

本库采用全自研的内核,集成了大量实用功能,并对常用功能进行了整合和优化。与 selenium 相比,具有以下优点:

  • 没有 webdriver 特征。
  • 无需为不同版本的浏览器下载不同的驱动程序。
  • 运行速度更快。
  • 可以跨 iframe 查找元素,无需反复切换。
  • 将 iframe 视作普通元素,获取后可以直接在其中查找元素,逻辑更清晰。
  • 可以同时操作浏览器中的多个标签页,即使标签页为非激活状态,无需切换。
  • 可以直接读取浏览器缓存保存图片,无需 GUI 点击另存。
  • 能对整个网页截图,包括视口之外的部分(支持 90 版本以上的浏览器)。
  • 可以处理非 open 状态的 shadow-root。

亮点功能

除了上述优点外,本库还拥有众多贴心设计。

  • 极简的语法规则,集成大量常用功能,使代码更加优雅。
  • 元素定位更加简单,功能更加强大且稳定。
  • 无处不在的等待和自动重试功能,使网络不稳定性变得易于控制,程序更稳定,开发更加省心。
  • 强大的下载工具,即使在操作浏览器时也能享受快捷可靠的下载体验。
  • 允许反复使用已打开的浏览器,无需每次运行从头启动浏览器,极大方便调试。
  • 使用 ini 文件保存常用配置,自动调用,提供便捷设置,避免繁琐的配置项。
  • 内置 lxml 解析引擎,解析速度大幅提升。
  • 使用 POM 模式封装,可直接用于测试,便于扩展。
  • 高度集成的便利功能,从每个细节体现用户友好。

简单的示例举例

✅️️安装这两个库。

pip install DrissionPage DataRecorder

✅️️ DrissionPage 基本用法。

from DrissionPage import ChromiumPage

# 创建 ChromiumPage 对象,用于浏览器自动化
browser_page = ChromiumPage()

# 访问一个网页
browser_page.get('https://www.example')

# 查找并获取网页标题
title = browser_page.title
print(f"Page title: {title}")

# 查找并获取某个元素的文本
[element_text](https://zhida.zhihu.com/search?content_id=245741093&content_type=Article&match_order=1&q=element_text&zhida_source=entity) = browser_page('css selector or xpath').text
print(f"Element text: {element_text}")

# 点击一个按钮
browser_page('button selector').click()

# 关闭浏览器
browser_page.close()

✅️️ Recorder 基本用法。

from DataRecorder import Recorder

# 创建 Recorder 对象,指定文件名
data_recorder = Recorder('data.csv')

# 添加数据
data_recorder.add_data(('Column1', 'Column2', 'Column3'))
data_recorder.add_data(('Data1', 'Data2', 'Data3'))

# 保存数据到文件
data_recorder.record()

✅️️ 结合 DrissionPage 和 Recorder 进行数据采集。

from DrissionPage import ChromiumPage
from DataRecorder import Recorder

# 创建 ChromiumPage 对象,用于浏览器自动化
browser_page = ChromiumPage()

# 创建 Recorder 对象,用于记录数据
data_recorder = Recorder('movies.csv')

# 访问目标网页
browser_page.get('https://www.maoyan/board/4')

while True:
    # 遍历页面上所有 dd 元素,获取电影信息
    for movie in browser_page.eles('t:dd'):
        
        # 获取需要的信息
        rank_number = movie('t:i').text  # 排名
        movie_score = movie('.score').text  # 评分
        movie_title = movie('@data-act=boarditem-click').attr('title')  # 电影标题
        movie_star = movie('.star').text  # 主演
        release_time = movie('.releasetime').text  # 上映时间

        # 将获取的信息写入到记录器
        data_recorder.add_data((rank_number, movie_title, movie_star, release_time, movie_score))

    # 获取下一页按钮,如果存在则点击
    next_button = browser_page('下一页', timeout=2)
    if next_button:
        next_button.click()
        browser_page.wait.load_start()
    # 如果不存在下一页按钮,则退出循环
    else:
        break

# 保存记录的数据到文件
data_recorder.record()

应用实例 : 采集猫眼电影 TOP100 榜

这个示例演示用浏览器采集数据。

✅️️ 采集目标 目标网址:https://www.maoyan/board/4

采集目标:排名、电影名称、演员、上映时间、分数

✅️️ 编码思路 按F12,可以看到每个电影信息都包含在

  • 元素中,因此可批量获取
  • 元素,遍历它们并再从其中获取每个电影的信息。

✅️️ 示例代码 以下代码可直接运行。

须要注意的是,这里用到记录器对象,详见DataRecorder。

from DrissionPage import ChromiumPage
from DataRecorder import Recorder

# 创建 ChromiumPage 对象,用于浏览器自动化
browser_page = ChromiumPage()

# 创建 Recorder 对象,用于记录数据
data_recorder = Recorder('data.csv')

# 访问目标网页
browser_page.get('https://www.maoyan/board/4')

while True:
    # 遍历页面上所有 dd 元素,获取电影信息
    for movie in browser_page.eles('t:dd'):
        
        # 获取需要的信息
        rank_number = movie('t:i').text  # 排名
        movie_score = movie('.score').text  # 评分
        movie_title = movie('@data-act=boarditem-click').attr('title')  # 电影标题
        movie_star = movie('.star').text  # 主演
        release_time = movie('.releasetime').text  # 上映时间

        # 将获取的信息写入到记录器
        data_recorder.add_data((rank_number, movie_title, movie_star, release_time, movie_score))

    # 获取下一页按钮,如果存在则点击
    next_button = browser_page('下一页', timeout=2)
    if next_button:
        next_button.click()
        browser_page.wait.load_start()
    # 如果不存在下一页按钮,则退出循环
    else:
        break

# 保存记录的数据到文件
data_recorder.record()

✅️️ 结果 程序生成一个结果文件 data.csv,内容如下:

1,我不是药神,“主演:徐峥,周一围,王传君”,上映时间:2018-07-05,9.6
2,肖申克的救赎,“主演:蒂姆·罗宾斯,摩根·弗里曼,鲍勃·冈顿”,上映时间:1994-09-10(加拿大),9.5
3,海上钢琴师,“主演:蒂姆·罗斯,比尔·努恩 ,克兰伦斯·威廉姆斯三世”,上映时间:2019-11-15,9.3
4,绿皮书,“主演:维果·莫腾森,马赫沙拉·阿里,琳达·卡德里尼”,上映时间:2019-03-01,9.5
5,霸王别姬,“主演:张国荣,张丰毅,巩俐”,上映时间:1993-07-26,9.4
下面省略。。。

😀 **selenium的新一代替代品---DrissionPage 新一代自动化利器**

!https://pic2.zhimg/v2-326357efbfd6c494c732ae10ed2d3a83_1440w.jpg

官方文档地址:http://g1879.gitee.io/drissionpagedocs/

✨️ 概述

DrissionPage 是一个基于 Python

的强大网页自动化工具,融合了浏览器控制与数据包收发的功能。它不仅能提供浏览器自动化的便利性,还能实现 requests

的高效性,将两者完美结合。该工具功能丰富,内置众多人性化设计和便捷功能,语法简洁优雅,代码量少,非常适合新手使用。

最新版本:3.2.26

支持系统:Windows、Linux、Mac

python 版本:3.6 及以上

支持应用:Chromium 内核浏览器(如 Chrome、Edge),electron 应用

背景

使用 requests 进行数据采集时,对于需要登录的网站,通常需要分析数据包、JavaScript 源码,并构造复杂的请求。此外,还需处理验证码、JS 混淆和签名参数等反爬手段,这使得门槛较高,开发效率较低。尽管使用浏览器可以绕过许多这些问题,但浏览器的运行效率通常不高。

DrissionPage 的设计初衷就是将浏览器和 requests 的优势结合起来,实现“写得快”和“跑得快”。这个库允许用户在不同需求下切换相应模式,并提供人性化的使用方法,提高开发和运行效率。除了融合两者的优点,本库还封装了常用功能,以网页为单位提供简便的操作和语句,减少用户需要关注的细节,使其能够专注于功能实现。通过简单的方法实现强大的功能,让代码更加优雅。

以前的版本是基于对 selenium 的重新封装实现的。从 3.0 版本开始,作者重新开发了底层代码,摆脱了对 selenium 的依赖,增强了功能,并提升了运行效率。

理念

简洁!易用 !方便!

☀️ 特性

作者经过长期实践,踩过无数坑,总结出的经验全写到这个库里了。

强大的自研内核

本库采用全自研的内核,集成了大量实用功能,并对常用功能进行了整合和优化。与 selenium 相比,具有以下优点:

  • 没有 webdriver 特征。
  • 无需为不同版本的浏览器下载不同的驱动程序。
  • 运行速度更快。
  • 可以跨 iframe 查找元素,无需反复切换。
  • 将 iframe 视作普通元素,获取后可以直接在其中查找元素,逻辑更清晰。
  • 可以同时操作浏览器中的多个标签页,即使标签页为非激活状态,无需切换。
  • 可以直接读取浏览器缓存保存图片,无需 GUI 点击另存。
  • 能对整个网页截图,包括视口之外的部分(支持 90 版本以上的浏览器)。
  • 可以处理非 open 状态的 shadow-root。

亮点功能

除了上述优点外,本库还拥有众多贴心设计。

  • 极简的语法规则,集成大量常用功能,使代码更加优雅。
  • 元素定位更加简单,功能更加强大且稳定。
  • 无处不在的等待和自动重试功能,使网络不稳定性变得易于控制,程序更稳定,开发更加省心。
  • 强大的下载工具,即使在操作浏览器时也能享受快捷可靠的下载体验。
  • 允许反复使用已打开的浏览器,无需每次运行从头启动浏览器,极大方便调试。
  • 使用 ini 文件保存常用配置,自动调用,提供便捷设置,避免繁琐的配置项。
  • 内置 lxml 解析引擎,解析速度大幅提升。
  • 使用 POM 模式封装,可直接用于测试,便于扩展。
  • 高度集成的便利功能,从每个细节体现用户友好。

简单的示例举例

✅️️安装这两个库。

pip install DrissionPage DataRecorder

✅️️ DrissionPage 基本用法。

from DrissionPage import ChromiumPage

# 创建 ChromiumPage 对象,用于浏览器自动化
browser_page = ChromiumPage()

# 访问一个网页
browser_page.get('https://www.example')

# 查找并获取网页标题
title = browser_page.title
print(f"Page title: {title}")

# 查找并获取某个元素的文本
[element_text](https://zhida.zhihu.com/search?content_id=245741093&content_type=Article&match_order=1&q=element_text&zhida_source=entity) = browser_page('css selector or xpath').text
print(f"Element text: {element_text}")

# 点击一个按钮
browser_page('button selector').click()

# 关闭浏览器
browser_page.close()

✅️️ Recorder 基本用法。

from DataRecorder import Recorder

# 创建 Recorder 对象,指定文件名
data_recorder = Recorder('data.csv')

# 添加数据
data_recorder.add_data(('Column1', 'Column2', 'Column3'))
data_recorder.add_data(('Data1', 'Data2', 'Data3'))

# 保存数据到文件
data_recorder.record()

✅️️ 结合 DrissionPage 和 Recorder 进行数据采集。

from DrissionPage import ChromiumPage
from DataRecorder import Recorder

# 创建 ChromiumPage 对象,用于浏览器自动化
browser_page = ChromiumPage()

# 创建 Recorder 对象,用于记录数据
data_recorder = Recorder('movies.csv')

# 访问目标网页
browser_page.get('https://www.maoyan/board/4')

while True:
    # 遍历页面上所有 dd 元素,获取电影信息
    for movie in browser_page.eles('t:dd'):
        
        # 获取需要的信息
        rank_number = movie('t:i').text  # 排名
        movie_score = movie('.score').text  # 评分
        movie_title = movie('@data-act=boarditem-click').attr('title')  # 电影标题
        movie_star = movie('.star').text  # 主演
        release_time = movie('.releasetime').text  # 上映时间

        # 将获取的信息写入到记录器
        data_recorder.add_data((rank_number, movie_title, movie_star, release_time, movie_score))

    # 获取下一页按钮,如果存在则点击
    next_button = browser_page('下一页', timeout=2)
    if next_button:
        next_button.click()
        browser_page.wait.load_start()
    # 如果不存在下一页按钮,则退出循环
    else:
        break

# 保存记录的数据到文件
data_recorder.record()

应用实例 : 采集猫眼电影 TOP100 榜

这个示例演示用浏览器采集数据。

✅️️ 采集目标 目标网址:https://www.maoyan/board/4

采集目标:排名、电影名称、演员、上映时间、分数

✅️️ 编码思路 按F12,可以看到每个电影信息都包含在

  • 元素中,因此可批量获取
  • 元素,遍历它们并再从其中获取每个电影的信息。

✅️️ 示例代码 以下代码可直接运行。

须要注意的是,这里用到记录器对象,详见DataRecorder。

from DrissionPage import ChromiumPage
from DataRecorder import Recorder

# 创建 ChromiumPage 对象,用于浏览器自动化
browser_page = ChromiumPage()

# 创建 Recorder 对象,用于记录数据
data_recorder = Recorder('data.csv')

# 访问目标网页
browser_page.get('https://www.maoyan/board/4')

while True:
    # 遍历页面上所有 dd 元素,获取电影信息
    for movie in browser_page.eles('t:dd'):
        
        # 获取需要的信息
        rank_number = movie('t:i').text  # 排名
        movie_score = movie('.score').text  # 评分
        movie_title = movie('@data-act=boarditem-click').attr('title')  # 电影标题
        movie_star = movie('.star').text  # 主演
        release_time = movie('.releasetime').text  # 上映时间

        # 将获取的信息写入到记录器
        data_recorder.add_data((rank_number, movie_title, movie_star, release_time, movie_score))

    # 获取下一页按钮,如果存在则点击
    next_button = browser_page('下一页', timeout=2)
    if next_button:
        next_button.click()
        browser_page.wait.load_start()
    # 如果不存在下一页按钮,则退出循环
    else:
        break

# 保存记录的数据到文件
data_recorder.record()

✅️️ 结果 程序生成一个结果文件 data.csv,内容如下:

1,我不是药神,“主演:徐峥,周一围,王传君”,上映时间:2018-07-05,9.6
2,肖申克的救赎,“主演:蒂姆·罗宾斯,摩根·弗里曼,鲍勃·冈顿”,上映时间:1994-09-10(加拿大),9.5
3,海上钢琴师,“主演:蒂姆·罗斯,比尔·努恩 ,克兰伦斯·威廉姆斯三世”,上映时间:2019-11-15,9.3
4,绿皮书,“主演:维果·莫腾森,马赫沙拉·阿里,琳达·卡德里尼”,上映时间:2019-03-01,9.5
5,霸王别姬,“主演:张国荣,张丰毅,巩俐”,上映时间:1993-07-26,9.4
下面省略。。。

发布评论

评论列表 (0)

  1. 暂无评论