立聪堂德州十三局店 发表于 2024-11-14 08:06:37

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

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

1、DrissionPage初识

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

[*] 双模式支持:DrissionPage 提供了两种模式,分别是 requests 模式和 selenium 模式。requests 模式适合静态网页抓取,而 selenium 模式适合处理动态网页和必要用户操作的网页。
[*] 强大的自研内核:DrissionPage 接纳全自研的内核,提供了许多实勤奋能,而且在常勤奋能上做了整合和优化。与 Selenium 相比,DrissionPage 有以下长处:

[*]无 webdriver 特性,无需为不同版本的浏览器下载不同的驱动。
[*]运行速度更快。
[*]可以跨 iframe 查找元素,无需切入切出。
[*]把 iframe 看作平凡元素,获取后可直接在其中查找元素,逻辑更清晰。
[*]可以同时操作浏览器中的多个标签页,即使标签页为非激活状态,无需切换。
[*]可以直接读取浏览器缓存来保存图片,无需用 GUI 点击另存。
[*]可以对整个网页截图,包括视口外的部分(90以上版本浏览器支持)。
[*]可处理非 open 状态的 shadow-root。

[*] 亮点功能:DrissionPage 内置了无数人性化计划和便捷功能,包括:

[*]极简的语法规则,集成大量常勤奋能,代码更优雅。
[*]定位元素更加容易,功能更强大稳定。
[*]无处不在的等待和主动重试功能,使不稳定的网络变得易于控制,程序更稳定,编写更省心。
[*]提供强大的下载工具,操作浏览器时也能享受快捷可靠的下载功能。
[*]答应反复使用已经打开的浏览器,无需每次运行从头启动浏览器,调试超方便。
[*]使用 ini 文件保存常用配置,主动调用,提供便捷的设置,阔别繁杂的配置项。
[*]内置 lxml 作为剖析引擎,剖析速度成几个数量级提拔。
[*]使用 POM 模式封装,可直接用于测试,便于扩展。
[*]高度集成的便利功能,从每个细节中体现。

[*] 安装与升级:DrissionPage 可以通过 pip 举行安装和升级,命令如下:
# 安装
pip install DrissionPage
# 升级指定版本
pip install DrissionPage==4.0.0b17

[*] 导包与简单示例:DrissionPage 提供了不同的页面类,如 ChromiumPage、SessionPage 和 WebPage,以顺应不同的使用场景。以下是一个简单的使用示例:
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 可以用于多种目标,比如:

[*]内容嵌入:在主页面中嵌入第三方网站的内容,比如视频、地图、文档等。
[*]广告展示:在网页中嵌入广告,这些广告通常由第三方提供。
[*]多文档交互:在一个页面中表现多个文档,用户可以在这些文档之间交互。
[*]模块化布局:将页面分割成多个区域,每个区域可以独立加载和操作。
iframe 的基本语法如下:
<iframe src="url" title="description" width="width" height="height"></iframe>


[*]src 属性指定了要嵌入的页面的 URL。
[*]title 属性提供了对 iframe 内容的描述,这对于辅助技能(如屏幕阅读器)是有用的。
[*]width 和 height 属性界说了 iframe 的尺寸。
iframe 也有一些安全和隐私方面的考虑,比如跨域问题。假如 iframe 中的内容来自不同的域,那么出于安全考虑,浏览器会限定主页面与 iframe 内容之间的交互,这被称为同源计谋。此外,iframe 也大概被用于点击劫持攻击,因此当代网站通常会采取一些措施来防止这种攻击,比如设置 X-Frame-Options 相应头。
在网页计划中,iframe 是一个非常有用的工具,但也必要审慎使用,以确保网站的安全性和用户体验。
2、尝试DrissionPage操作浏览器

2.1、启动浏览器

from DrissionPage import Chromium

tab = Chromium().latest_tab
tab.get('https://DrissionPage.cn')
上述代码执行后会跳转到浏览器界面并打开到DrissionPage的网页,但初次使用大概会遇到浏览器异常,这里就必要设置默认启动的浏览器;
这里的浏览器路径不愿定是 Chrome,Edge 等 Chromium 内核的浏览器都可以。
打开浏览器,在地址栏输入chrome://version(Edge 输入edge://version),回车然后复制可执行文件路径即可。
https://i-blog.csdnimg.cn/direct/3556b56d0809430d9e463813427811e9.png
2.2、设置或保存浏览器地址

再次通过代码启动,这个地址可以根据自己的需求举行调解
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')
假如不想每次设置这个地址,可以将配置保存到指定文件中,如下代码所示:
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')
执行后会输出保存的地址
配置已保存到文件:D:\miniconda3\lib\site-packages\DrissionPage\_configs\configs.ini
以后程序可自动从文件加载配置。
3、登录账号操作

https://i-blog.csdnimg.cn/direct/ba709e19455d421dbccbb641353c8ae8.png#pic_center
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属性。
https://i-blog.csdnimg.cn/direct/1208216340324ece94229f1a9c1960af.png
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)
输出:
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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 第一章、探索DrissionPage:Python下的高效网页主动化与浏览器控制