DrissionPage

embedded/2024/10/21 13:35:12/


声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请在CSDN 私信 联系作者立即删除!

关于DrissionPage:

官方文档地址:DrissionPage官网

github地址:GitHub - g1879/DrissionPage: 基于python的网页自动化工具。既能控制浏览器,也能收发数据包。可兼顾浏览器自动化的便利性和requests的高效率。功能强大,内置无数人性化设计和便捷功能。语法简洁而优雅,代码量少。

gitee地址:DrissionPage: 基于python的网页自动化工具。既能控制浏览器,也能收发数据包。可兼顾浏览器自动化的便利性和requests的高效率。功能强大,内置无数人性化设计和便捷功能。语法简洁而优雅,代码量少。 (gitee.com)

  • 使用DrissionPage可以减少对于一些特定网站的逆向。
  • 关于DrissionPage的特性:💥 4.0 功能介绍 | DrissionPage官网
  • 关于DrissionPage的使用文档:🛸 概述 | DrissionPage官网
  • 反爬技术层出不断,自动化也是一种反反爬手段,虽然还有反反反爬

一. 概述

  • DrissionPage 是一个基于 python 的网页自动化工具
  • 它既能控制浏览器,也能收发数据包,还能把两者合而为一。
  • 可兼顾浏览器自动化的便利性和 requests 的高效率。
  • 它功能强大,内置无数人性化设计和便捷功能。
  • 它的语法简洁而优雅,代码量少,对新手友好。

二. 安装 DrissionPage 

安装:pip install DrissionPage

如果你已经安装了DrissionPage可以升级为最新稳定版:pip install DrissionPage --upgrade

三.初体验

注:本次初体验不会太过具体的使用DrissionPage提供的api,本章需要了解的是DrissionPage 三种使用模式。

  • ChromiumPage模式:用于控制浏览器访问网页
  • SessionPage模式:用于以收发数据包的形式访问网页
  • WebPage模式:支持以上两种模式,控制浏览器和收发数据包

ChromiumPage模式打开浏览器访问百度:

python">from DrissionPage import ChromiumPage# 创建对象
page = ChromiumPage()
# 访问网页
page.get("https://www.baidu.com")


SessionPage模式:(可以理解为requests)

python">from DrissionPage import SessionPage# 创建页面对象
session = SessionPage()
# 访问网页
session.get("https://httpbin.org/get")
print(session.json)


WebPage模式:

  • WebPage中有两种模式:
    • d参数为ChromiumPage模式,默认
    • s参数为SessionPage模式
python">from DrissionPage import WebPage# 创建WebPage,默认为 ChromiumPage模式 
# page = WebPage()
# page.get("https://www.baidu.com")# 创建webpage,指定为SessionPage模式
session = WebPage("s")
session.get("https://httpbin.org/get")
print(session.json)

四. ChromePage的使用

关于ChromePage的使用建议直接是看官方文档:🚤 概述 | DrissionPage官网

下载滑块背景图

python">import re
import requests
from loguru import logger
from DrissionPage import ChromiumPageuserPhone = "手机号"page = ChromiumPage()
page.get('网站就不放了,看代码就行')
phone = page.ele('@name=phone')
if phone is None:raise Exception("找不到name属性为phone的参数")
phone.input(userPhone)click_sms = page.ele('@class=get-code')
if phone is None:raise Exception("找不到class属性为get-code的参数")
click_sms.click()# 等待网页进入加载状态
page.wait.load_start()try:# 获取iframe对象iframe = page.get_frame("#tcaptcha_iframe_dy")slideBg = iframe.ele("#slideBgWrap").ele('@class=tc-bg-img unselectable')slider_bg_url = re.search(r'url\("(.+)"', slideBg.html).group(1).replace("amp;", '')slider_bg_content = requests.get(slider_bg_url).contentwith open("bg.jpg", "wb") as f:f.write(slider_bg_content)logger.debug("下载完成咯")
except Exception as e:logger.error(f"未知错误: {e}")

拦截滑块数据包

python">from DrissionPage import ChromiumPagepage = ChromiumPage()
page.set.load_mode.none()  # 设置加载模式为none
# 监听接口为cap_union_prehandle数据包
page.listen.start('dHVyaW5nLmNhcHRjaGEucWNsb3VkLmNvbS9jYXBfdW5pb25fcHJlaGFuZGxl')
page.get("aHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9wcm9kdWN0L2NhcHRjaGE=")# 点击 "立即体验" 触发滑块,加载界面从而得到 cap_union_prehandle 接口的数据包
captcha_click = page.ele('#captcha_click')
if captcha_click is None:raise Exception("没找到id属性值为captcha_click")
captcha_click.click()# 等待数据包
packet = page.listen.wait()
# 打印数据包内容
print(packet.response.body)# 拿到数据包后强制当前页面加载
page.stop_loading()

过5s盾

python">from DrissionPage import ChromiumPagepage = ChromiumPage()
page.get('https://www.emload.com/v2/')

五. SessionPage的使用

DrissionPage中的SessionPage可以理解为requests和beautifulsoup的组合,用起来也可以方便,这里就不做文章。可以直接看官方文档

  •  关于SessionPage的使用建议直接是看官方文档:🚄 概述 | DrissionPage官网

六.WebPage的使用

WebPage就是SessionPage和ChromePage的合体,可以边看文档边使用。

  • WebPage官方文档:🛸 概述 | DrissionPage官网


http://www.ppmy.cn/embedded/37579.html

相关文章

简单聊下 Vue 3.0 和 React 18 框架有什么区别

Vue3 vs React 18:前端框架比较 随着Vue3和React 18的相继发布,前端开发领域再次迎来了技术革新的热潮。这两款框架各自迭代升级,不仅优化了原有特性,还引入了许多新概念,使得开发者在构建现代Web应用时拥有更多选择。…

泰迪智能科技中职大数据实验室建设(职业院校大数据实验室建设指南)

职校大数据实验室是职校校园文化建设的重要部分,大数据实训室的建设方案应涵盖多个方面,包括硬件设施的配备、软件环境的搭建、课程资源的开发、师资力量的培养以及实践教学体系的完善等。 打造特色,对接生产 社会经济与产业的…

gitee 简易使用 上传文件

Wiki - Gitee.com 官方教程 1.gitee 注册帐号 2.下载git 安装 http://git-scm.com/downloads 3. 桌面 鼠标右键 或是开始菜单 open git bash here 输入(复制 ,粘贴) 运行完成后 刷新网页 下方加号即可以添加文件 上传文件 下载 教程…

Linux系统时间同步服务 ntpd 和 chrony

时间同步协议(NTP),用于同步网络中计算机时钟的协议。它使用客户端-服务器或对等(peer-to-peer)体系结构,并使用层次化的、分层的多级系统,这些等级称为"stratum"。Stratum 0是精度最…

MySQL增删查改(进阶)

目录 数据库约束 表的设计 查询操作的进阶 查询搭配插入使用 聚合查询 1>count(*) 2>sum(*) 3>avg(*) 4>max(*) 5>min(*) group by分组分别进行聚合查询 联合查询 / 多表查询[重点] 外连接 自连接 子查询 合并查询 小结: 数据库约束 有时候…

低价监测如何保证准确率

品牌做低价监测的目的,是为了管控渠道中的低价链接,最终是使这些低价不再影响渠道,使他们下架或者改价链接,所以监测结果的准确性,是会影响最终的治理范围和治理结果的,这就需要做到百分百的准确监测&#…

流畅的python-学习笔记_设计模式+装饰器+闭包

策略模式 类继承abc.ABC即实现抽象类,方法可用abc.abstractmethod装饰,表明为抽象方法 装饰器基础 装饰器实际是语法糖,被装饰的函数实际是装饰器内部返回函数的引用 缺点:装饰器函数覆盖了被装饰函数的__name__和__doc__属性…

Linux系统 -- 创建systemd服务单元 Python 程序在系统启动时自动启动,并持续运行。

1. 创建一个名为 model_ai.service 的文件,并将其放置在 /etc/systemd/system/ 目录中。 2. 命令创建和编辑文件 sudo vim /etc/systemd/system/model_ai.service 3. 在打开的编辑器中,添加以下内容: [Unit] DescriptionModel AI Python S…