第一章、探索DrissionPage:Python下的高效网页自动化与浏览器控制

第一章、探索DrissionPage:Python下的高效网页自动化与浏览器控制

1、DrissionPage初识

DrissionPage 是一个基于 Python 的网页自动化工具,它结合了浏览器控制和数据包收发的能力,旨在提供一种既便利又高效的网页自动化解决方案。以下是 DrissionPage 的一些详细介绍和特性:

  1. 双模式支持 :DrissionPage 提供了两种模式,分别是 requests 模式和 selenium 模式。requests 模式适合静态网页抓取,而 selenium 模式适合处理动态网页和需要用户操作的网页。

  2. 强大的自研内核:DrissionPage 采用全自研的内核,提供了许多实用功能,并且在常用功能上做了整合和优化。与 Selenium 相比,DrissionPage 有以下优点:

    • 无 webdriver 特征,无需为不同版本的浏览器下载不同的驱动。
    • 运行速度更快。
    • 可以跨 iframe 查找元素,无需切入切出。
    • 把 iframe 看作普通元素,获取后可直接在其中查找元素,逻辑更清晰。
    • 可以同时操作浏览器中的多个标签页,即使标签页为非激活状态,无需切换。
    • 可以直接读取浏览器缓存来保存图片,无需用 GUI 点击另存。
    • 可以对整个网页截图,包括视口外的部分(90以上版本浏览器支持)。
    • 可处理非 open 状态的 shadow-root。
  3. 亮点功能:DrissionPage 内置了无数人性化设计和便捷功能,包括:

    • 极简的语法规则,集成大量常用功能,代码更优雅。
    • 定位元素更加容易,功能更强大稳定。
    • 无处不在的等待和自动重试功能,使不稳定的网络变得易于控制,程序更稳定,编写更省心。
    • 提供强大的下载工具,操作浏览器时也能享受快捷可靠的下载功能。
    • 允许反复使用已经打开的浏览器,无需每次运行从头启动浏览器,调试超方便。
    • 使用 ini 文件保存常用配置,自动调用,提供便捷的设置,远离繁杂的配置项。
    • 内置 lxml 作为解析引擎,解析速度成几个数量级提升。
    • 使用 POM 模式封装,可直接用于测试,便于扩展。
    • 高度集成的便利功能,从每个细节中体现。
  4. 安装与升级:DrissionPage 可以通过 pip 进行安装和升级,命令如下:

    # 安装
    pip install DrissionPage
    # 升级指定版本
    pip install DrissionPage==4.0.0b17
    

  5. 导包与简单示例 :DrissionPage 提供了不同的页面类,如 ChromiumPageSessionPageWebPage,以适应不同的使用场景。以下是一个简单的使用示例:

    python 复制代码
    from DrissionPage import ChromiumPage
    page = ChromiumPage()
    page.get('https://www.baidu.com')
    page('#kw').input('DrissionPage')
    page('#su').click()
    page.wait.load_start()
    links = page.eles('tag:h3')
    for link in links:
        print(link.text)

DrissionPage 的设计理念是"简洁而强大",它将 Driver(驱动)和 Session(会话)的概念结合起来,形成了 Drission,意为"拽神",而 Page 表示以页面为单位操作。DrissionPage 支持 Windows、Linux、Mac 系统,以及 Python 3.6 及以上版本,适用于 Chromium 内核浏览器和 electron 应用。

6.扩展
iframe 是 HTML 中的一个元素,全称为"inline frame",即内联框架。它允许在一个网页中嵌入另一个网页。iframe 可以用于多种目的,比如:

  1. 内容嵌入:在主页面中嵌入第三方网站的内容,比如视频、地图、文档等。
  2. 广告展示:在网页中嵌入广告,这些广告通常由第三方提供。
  3. 多文档交互:在一个页面中显示多个文档,用户可以在这些文档之间交互。
  4. 模块化布局:将页面分割成多个区域,每个区域可以独立加载和操作。

iframe 的基本语法如下:

html 复制代码
<iframe src="url" title="description" width="width" height="height"></iframe>
  • src 属性指定了要嵌入的页面的 URL。
  • title 属性提供了对 iframe 内容的描述,这对于辅助技术(如屏幕阅读器)是有用的。
  • widthheight 属性定义了 iframe 的尺寸。

iframe 也有一些安全和隐私方面的考虑,比如跨域问题。如果 iframe 中的内容来自不同的域,那么出于安全考虑,浏览器会限制主页面与 iframe 内容之间的交互,这被称为同源策略。此外,iframe 也可能被用于点击劫持攻击,因此现代网站通常会采取一些措施来防止这种攻击,比如设置 X-Frame-Options 响应头。

在网页设计中,iframe 是一个非常有用的工具,但也需要谨慎使用,以确保网站的安全性和用户体验。

2、尝试DrissionPage操作浏览器

2.1、启动浏览器

python 复制代码
from DrissionPage import Chromium

tab = Chromium().latest_tab
tab.get('https://DrissionPage.cn')

上述代码执行后会跳转到浏览器界面并打开到DrissionPage的网页,但初次使用可能会遇到浏览器异常,这里就需要设置默认启动的浏览器;

这里的浏览器路径不一定是 Chrome,Edge 等 Chromium 内核的浏览器都可以。

打开浏览器,在地址栏输入chrome://version (Edge 输入edge://version ),回车然后复制可执行文件路径即可。

2.2、设置或保存浏览器地址

再次通过代码启动,这个地址可以根据自己的需求进行调整

python 复制代码
from DrissionPage import Chromium, ChromiumOptions

path = r'C:\Program Files (x86)\Google\Chrome\Application\chrone.exe'  # 请改为你电脑内Chrome可执行文件路径
co = ChromiumOptions().set_browser_path(path) # 设置默认启动浏览器
tab = Chromium(co).latest_tab
tab.get('https://DrissionPage.cn')

如果不想每次设置这个地址,可以将配置保存到指定文件中,如下代码所示:

python 复制代码
from DrissionPage import Chromium, ChromiumOptions
path = r'C:\Program Files (x86)\Google\Chrome\Application\chrone.exe'  # 请改为你电脑内Chrome可执行文件路径
"""
会保存这个配置后续默认使用这个:D:\miniconda3\lib\site-packages\DrissionPage\_configs\configs.ini
"""
ChromiumOptions().set_browser_path(path).save()
tab = Chromium().latest_tab
tab.get('https://DrissionPage.cn')

执行后会输出保存的地址

python 复制代码
配置已保存到文件:D:\miniconda3\lib\site-packages\DrissionPage\_configs\configs.ini
以后程序可自动从文件加载配置。

3、登录账号操作

python 复制代码
from DrissionPage import Chromium

# 启动或接管浏览器,并创建标签页对象
tab = Chromium().latest_tab
# 跳转到登录页面
tab.get('https://gitee.com/login')

# 定位到账号文本框,获取文本框元素并输入密码
tab.ele('#user_login').input('你自己的账号') # #是按照id属性查找元素
# 定位到密码文本框并输入密码
tab.ele('#user_password').input('账号密码')
# 选中勾选框保存账号
tab.ele('#user_remember_me').input('checked')
# 点击登录按钮
tab.ele('@value=登 录').click() # @是按照value属性作为查找条件

4、网页分析

使用用于收发数据包的页面类SessionPage
其中.text获取元素的文本,.link获取元素的href或src属性。

python 复制代码
from DrissionPage import SessionPage

# 创建页面对象
page = SessionPage()

# 访问某一页的网页
num = 2 # 页码
page.get(f'https://gitee.com/explore/Artificial-Intelligence?page={num}')
# 获取所有开源库<a>元素列表
links = page.eles('@class=title project-namespace-path') # 列表
# 遍历所有<a>元素
for link in links:
    # 打印链接信息,text是仓库名,link是仓库地址
    print(link.text, link.link)

输出:

python 复制代码
D:\miniconda3\python.exe F:\datasets\DrissionPage\2.网页分析.py 
北京智云视图科技有限公司/HyperLPR https://gitee.com/zeusees/HyperLPR
明月心/PaddleOCRSharp https://gitee.com/raoyutian/PaddleOCRSharp
MindSpore/graphengine https://gitee.com/mindspore/graphengine
之江天枢/Dubhe https://gitee.com/zhijiangtianshu/Dubhe
MindSpore/mindinsight https://gitee.com/mindspore/mindinsight
inspur-inna/inna1.0 https://gitee.com/inspur-inna/inna1.0
唉可悲/tianruoocr-cl https://gitee.com/wanglifree/tianruoocr-cl
MindSpore/community https://gitee.com/mindspore/community
endless/idCardCv https://gitee.com/endlesshh/idCardCv
MindSpore/course https://gitee.com/mindspore/course
百度开源/Senta https://gitee.com/baidu/Senta
wzpan/wukong-robot https://gitee.com/wzpan/wukong-robot
Ascend/ModelLink https://gitee.com/ascend/ModelLink
Ascend/samples https://gitee.com/ascend/samples
MindSpore/mindformers https://gitee.com/mindspore/mindformers

Process finished with exit code 0
相关推荐
进击的六角龙几秒前
深入浅出:使用Python调用API实现智能天气预报
开发语言·python
檀越剑指大厂1 分钟前
【Python系列】浅析 Python 中的字典更新与应用场景
开发语言·python
湫ccc8 分钟前
Python简介以及解释器安装(保姆级教学)
开发语言·python
孤独且没人爱的纸鹤12 分钟前
【深度学习】:从人工神经网络的基础原理到循环神经网络的先进技术,跨越智能算法的关键发展阶段及其未来趋势,探索技术进步与应用挑战
人工智能·python·深度学习·机器学习·ai
程序伍六七12 分钟前
day16
开发语言·c++
羊小猪~~15 分钟前
tensorflow案例7--数据增强与测试集, 训练集, 验证集的构建
人工智能·python·深度学习·机器学习·cnn·tensorflow·neo4j
wkj00117 分钟前
php操作redis
开发语言·redis·php
lzhlizihang17 分钟前
python如何使用spark操作hive
hive·python·spark
q0_0p18 分钟前
牛客小白月赛105 (Python题解) A~E
python·牛客
极客代码22 分钟前
【Python TensorFlow】进阶指南(续篇三)
开发语言·人工智能·python·深度学习·tensorflow