第一章、探索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),回车然后复制可执行文件路径即可。
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、登录账号操作
- 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属性。
- 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企服之家,中国第一个企服评测及商务社交产业平台。 |