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

打印 上一主题 下一主题

主题 1030|帖子 1030|积分 3090

第一章、探索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 举行安装和升级,命令如下:
    1. # 安装
    2. pip install DrissionPage
    3. # 升级指定版本
    4. pip install DrissionPage==4.0.0b17
    复制代码

  • 导包与简单示例:DrissionPage 提供了不同的页面类,如 ChromiumPage、SessionPage 和 WebPage,以顺应不同的使用场景。以下是一个简单的使用示例:
    1. from DrissionPage import ChromiumPage
    2. page = ChromiumPage()
    3. page.get('https://www.baidu.com')
    4. page('#kw').input('DrissionPage')
    5. page('#su').click()
    6. page.wait.load_start()
    7. links = page.eles('tag:h3')
    8. for link in links:
    9.     print(link.text)
    复制代码

DrissionPage 的计划理念是“简洁而强大”,它将 Driver(驱动)和 Session(会话)的概念联合起来,形成了 Drission,意为“拽神”,而 Page 体现以页面为单位操作。DrissionPage 支持 Windows、Linux、Mac 系统,以及 Python 3.6 及以上版本,适用于 Chromium 内核浏览器和 electron 应用。
6.扩展
iframe 是 HTML 中的一个元素,全称为“inline frame”,即内联框架。它答应在一个网页中嵌入另一个网页。iframe 可以用于多种目标,比如:

  • 内容嵌入:在主页面中嵌入第三方网站的内容,比如视频、地图、文档等。
  • 广告展示:在网页中嵌入广告,这些广告通常由第三方提供。
  • 多文档交互:在一个页面中表现多个文档,用户可以在这些文档之间交互。
  • 模块化布局:将页面分割成多个区域,每个区域可以独立加载和操作。
iframe 的基本语法如下:
  1. <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、启动浏览器

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

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

再次通过代码启动,这个地址可以根据自己的需求举行调解
  1. from DrissionPage import Chromium, ChromiumOptions
  2. path = r'C:\Program Files (x86)\Google\Chrome\Application\chrone.exe'  # 请改为你电脑内Chrome可执行文件路径
  3. co = ChromiumOptions().set_browser_path(path) # 设置默认启动浏览器
  4. tab = Chromium(co).latest_tab
  5. tab.get('https://DrissionPage.cn')
复制代码
假如不想每次设置这个地址,可以将配置保存到指定文件中,如下代码所示:
  1. from DrissionPage import Chromium, ChromiumOptions
  2. path = r'C:\Program Files (x86)\Google\Chrome\Application\chrone.exe'  # 请改为你电脑内Chrome可执行文件路径
  3. """
  4. 会保存这个配置后续默认使用这个:D:\miniconda3\lib\site-packages\DrissionPage\_configs\configs.ini
  5. """
  6. ChromiumOptions().set_browser_path(path).save()
  7. tab = Chromium().latest_tab
  8. tab.get('https://DrissionPage.cn')
复制代码
执行后会输出保存的地址
  1. 配置已保存到文件:D:\miniconda3\lib\site-packages\DrissionPage\_configs\configs.ini
  2. 以后程序可自动从文件加载配置。
复制代码
3、登录账号操作


  1. from DrissionPage import Chromium
  2. # 启动或接管浏览器,并创建标签页对象
  3. tab = Chromium().latest_tab
  4. # 跳转到登录页面
  5. tab.get('https://gitee.com/login')
  6. # 定位到账号文本框,获取文本框元素并输入密码
  7. tab.ele('#user_login').input('你自己的账号') # #是按照id属性查找元素
  8. # 定位到密码文本框并输入密码
  9. tab.ele('#user_password').input('账号密码')
  10. # 选中勾选框保存账号
  11. tab.ele('#user_remember_me').input('checked')
  12. # 点击登录按钮
  13. tab.ele('@value=登 录').click() # @是按照value属性作为查找条件
复制代码
4、网页分析

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

  1. from DrissionPage import SessionPage
  2. # 创建页面对象
  3. page = SessionPage()
  4. # 访问某一页的网页
  5. num = 2 # 页码
  6. page.get(f'https://gitee.com/explore/Artificial-Intelligence?page={num}')
  7. # 获取所有开源库<a>元素列表
  8. links = page.eles('@class=title project-namespace-path') # 列表
  9. # 遍历所有<a>元素
  10. for link in links:
  11.     # 打印链接信息,text是仓库名,link是仓库地址
  12.     print(link.text, link.link)
复制代码
输出:
  1. D:\miniconda3\python.exe F:\datasets\DrissionPage\2.网页分析.py
  2. 北京智云视图科技有限公司/HyperLPR https://gitee.com/zeusees/HyperLPR
  3. 明月心/PaddleOCRSharp https://gitee.com/raoyutian/PaddleOCRSharp
  4. MindSpore/graphengine https://gitee.com/mindspore/graphengine
  5. 之江天枢/Dubhe https://gitee.com/zhijiangtianshu/Dubhe
  6. MindSpore/mindinsight https://gitee.com/mindspore/mindinsight
  7. inspur-inna/inna1.0 https://gitee.com/inspur-inna/inna1.0
  8. 唉可悲/tianruoocr-cl https://gitee.com/wanglifree/tianruoocr-cl
  9. MindSpore/community https://gitee.com/mindspore/community
  10. endless/idCardCv https://gitee.com/endlesshh/idCardCv
  11. MindSpore/course https://gitee.com/mindspore/course
  12. 百度开源/Senta https://gitee.com/baidu/Senta
  13. wzpan/wukong-robot https://gitee.com/wzpan/wukong-robot
  14. Ascend/ModelLink https://gitee.com/ascend/ModelLink
  15. Ascend/samples https://gitee.com/ascend/samples
  16. MindSpore/mindformers https://gitee.com/mindspore/mindformers
  17. Process finished with exit code 0
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立聪堂德州十三局店

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表