17爬虫:关于DrissionPage相关内容的学习01
概述
前面我们已经大致了解了selenium的用法,DerssionPage同selenium一样,也是一个基于Python的网页自动化工具。
DrissionPage既可以实现网页的自动化操作,也能够实现收发数据包,也可以把两者的功能合二为一。
DressionPage的有点在于既可以兼顾selenium自动操作网页的便捷性,还不需要像selenium那样配置chromedriver,也不需要过一段时间更新chrome浏览器和chromedriver。同时DrissionPage可以同requests一样高效,不需要担心js逆向等问题。
简单的来说,DressionPage能够高效的实现所见即所爬,语法简洁优雅,代码量少,对新手友好。DrissionPage最大的优势在于它是最新新出的网页自动化测试工具,现阶段针对他的反爬虫措施几乎没有。
安装DrissionPage
和安装requests模块一样,在pycharm终端中输入如下的pip命令,在网络正常的情况下就可以正常使用该模块的相关功能。
pip install DrissionPage
如果想要升级到最新的版本,执行如下的命令:
pip install DrissionPage --upgrade
如果想要安装指定的版本,执行如下的命令:
pip install DrissionPage==4.0.0b17
我这里安装的是当前最行的版本,如下图所示:
入门指南
DrissionPage提供的功能放在如下的路径中:
from DrissionPage import * # 浏览器类、配置类、页面类
from DrissionPage.errors import * # 错误类
from DrissionPage.common import * # 辅助工具类
from DrissionPage.items import * # 衍生对象,用于类型判断
看到这里,相信大家也是很懵圈。不要着急,接下来慢慢分析,我也是第一次使用DrissionPage模块。
浏览器类
from DrissionPage import Chromium
Chromium是浏览器类,浏览器类主要用于连接浏览器,管理标签页及其他浏览器有关的操作。Chromium相当于总管,可以作为浏览器入口,使用它产生的Tab对象去操作每一个标签页。
页面类
from DrissionPage import ChromiumPage
(1)ChromiumPage是将浏览器对象和第一个标签页对象封装在一起,用于控制浏览器。ChromiumPage简化了操作,使用效果与直接使用Chromium对象基本一致。不同之处在于,ChromiumPage生成的标签页对象是ChromiumTab,不能切换模式。
from DrissionPage import WebPage
(2)WebPage与ChromiumPage类似,不同之处在于WebPage产生的Tab对象是可以切换模式的,即既可以控制浏览器,也可以收发数据包。
from DrissionPage import SessionPage
(3)SessionPage用于收发数据包,是对requests和lxml进行封装实现的。SessionPage将网络连接和结果解析封装成页面,操作逻辑和其他页面保持一致。
配置工具
from DrissionPage import ChromiumOptions
(1)ChromiumOptions类用于设置浏览器的启动参数,这些参数只有在启动浏览器有用,接管已经存在的浏览器是不起作用的。
from DrissionPage import SessionOptions
(2)SessionOptions类用于设置Session对象启动参数,用于配置Session Page或webPage的s模式的连接参数。
from DrissionPage.common import Settings
(3)Settings用全局的配置,如找不到元素是否抛出异常。
辅助工具
from DrissionPage.common import Keys
(1)Keys:按键类,用于键入 ctrl、alt 等按键。
from DrissionPage.common import By
(2)By:同selenium一样。
其他工具
wait_until
:可等待传入的方法结果为真make_session_ele
:从 html 文本生成ChromiumElement
对象configs_to_here
:把配置文件复制到当前路径get_blob
:获取指定的 blob 资源tree
:用于打印页面对象或元素对象结构from_selenium
:用于对接 selenium 代码from_playwright
:用于对接 playwright 代码
异常
from DrissionPage.errors import ElementNotFoundError
异常放在DrissionPage.errors
路径。
衍生对象
from DrissionPage.items import SessionElement
from DrissionPage.items import ChromiumElement
from DrissionPage.items import ShadowRoot
from DrissionPage.items import NoneElement
from DrissionPage.items import ChromiumTab
from DrissionPage.items import MixTab
from DrissionPage.items import ChromiumFrame
Tab、Element 等被其它对象生成的对象,开发过程中需要类型判断时需要导入这些类型。
设置语言
DrissionPage的报错信息及提示支持中文和英文,设置中文提示的方法如下:
from DrissionPage.common import SettingsSettings.set_language('zh_cn') # 设置为中文时,填入'zh_cn'Settings.set_language('en') # 默认是英文提示
准备工作
测试是否能够通过DrissionPage启动浏览器,我们这里采用的Chrome。对应的代码如下:
from DrissionPage import Chromiumtab = Chromium().latest_tab
tab.get('https://DrissionPage.cn')
在pycharm中运行上述代码,发现Chrome能够自动打开并且能够访问官网,说明我们的配置没有问题。
如果在程序运行的过程中报错,说明我们的Chrome路径设置有问题,
查找路径
(1)查找自身电脑中Chrome的路径,方法如下:
打开自己饿Chrome浏览器,在地址栏中输入chrome://version,回车。在加载中的页面中看“执行性文件”一栏,其后面就是我们需要的Chrome路径。
设置路径
设置路径的方法一:
设置路径的方法二:
设置的方法大家可以参考官网的教程,非常的方便,这里不再赘述
🌏 准备工作 | DrissionPage官网
操作浏览器
from DrissionPage import Chromium# 启动或接管浏览器,并创建标签页对象
tab = Chromium().latest_tab # 创建一个Chromium对象,用于连接浏览器,并用latest_tab获取一个标签页对象
# 跳转到登录页面
tab.get('https://gitee.com/login') # get()方法用于访问参数中的网址。它会等待页面完全加载,再继续执行后面的代码。默认是等待10秒
# 定位到账号文本框,获取文本框元素
ele = tab.ele('#user_login') # 通过html代码中的id的名字
# 输入对文本框输入账号
ele.input('1234567')
# 定位到密码文本框并输入密码
tab.ele('#user_password').input('1234567') # 通过链式操作直接输入对应的文本
# 点击登录按钮
tab.ele('@value=登 录').click() # 通过value值确定元素 @表示按属性名查找
基本概念
网页自动化的两种形式:
(1)直接服务器发送数据包,获取需要的数据;
(2)控制浏览器和网页进行交互。
基本使用逻辑如下:无论是控制浏览器还是收发数据,操作逻辑基本一致。
- 创建页面对象
- 从页面对象中获取元素对象
- 对元素对象读取或操作,实现数据获取和页面控制
最主要的对象有两种:页面对象和其生成的元素对象
主要对象
浏览器和标签页对象:
- Chromium:浏览器对象,用于连接浏览器,管理标签页以及其他浏览器有关的操作
- MixTab:浏览器标签页对象,由Chromium对象产生,一个对象控制一个实际的标签页
- ChromiumTab:也是标签页对象,由ChromiumPage对象产生,不可切换收发数据包模式
元素对象:
ChromiumElement
:浏览器元素对象SessionElement
:静态元素对象ChromiumFrame
:<iframe>
元素对象,兼有标签页对象和元素特性ShadowRoot
:shadow-root 元素对象
Page对象:
ChromiumPage
:能管理浏览器本身的标签页对象,可用作程序入口WebPage
:类似于ChromiumPage
,整合浏览器控制和收发数据包于一体的页面对象SessionPage
:单纯用于收发数据包的页面对象,可单独使用(不会启动新浏览器窗口)
称呼:
MixTab
、ChromiumTab
统称为 Tab 对象ChromiumPage
、WebPage
和SessionPage
统称为 Page 对象- Page 对象、Tab 对象和
ChromiumFrame
统称为页面对象
工作模式
MixTab和WebPage既可以控制浏览器对象,也可以用数据包的方式访问网络。通俗的讲前者就是如同selenium的工作模式,后者就是requests的工作模式,也就是前面所说的网页自动化的两种形式。
在DrissionPage中,者两种工作模式分为d模式和s模式,页面对象可以在这两种工作模式之间切换,但任一时间只能是一种工作模式。
d模式用于控制浏览器对象,不仅可以读取浏览器获取到的信息,还能对页面进行操作,如点击、填写、开关标签页、改变元素属性、执行 js 脚本等等。d 模式功能强大,但运行速度受浏览器制约非常缓慢,而且需要占用大量内存。
s模式基于数据包进行读取或发送,不能对页面进行操作,不能运行 js。爬取数据时,如网站数据包较为简单,应首选 s 模式。
模式切换
MixTab
和WebPage
对象可以在 d 模式和 s 模式之间切换,这通常用于以下情况:
- 当登录验证很严格,难以解构,如有验证码的时候,用浏览器处理登录,然后转换成 s 模式爬取数据。既避免了处理烧脑的 js,又能享受 s 模式的速度。
- 页面数据由 js 产生,且页面结构极其复杂,可以用 d 模式读取页面元素,然后把元素转成 s 模式的元素进行分析。可以极大地提高 d 模式的处理速度。
以上模式转换的思想非常重要。比如说一个网站需要requests携带cookie信息才可以请求到数据,倒是该网站的cookie获取非常困难(数据加密,或者验证码登录等),这时我们应该能够想到利用selenium完成网站的登录,获取cookie信息,然后再使用requests携带cookie信息完成数据请求。
相关文章:
17爬虫:关于DrissionPage相关内容的学习01
概述 前面我们已经大致了解了selenium的用法,DerssionPage同selenium一样,也是一个基于Python的网页自动化工具。 DrissionPage既可以实现网页的自动化操作,也能够实现收发数据包,也可以把两者的功能合二为一。 DressionPage的…...
Ubuntu如何安装jdk并切换到不同的jdk版本
参考:https://www.cnblogs.com/Jakson/articles/4615768.html 摘要 :因为ubuntu 会自带open-jdk预装在系统内,当我们需要在 ubuntu下 安装jdk 的时候 ,发现 即使配置好环境变量后 输入 java -version 版本还是依然没有发生变化,我们需要以下2个步骤切换/usr/local/…...
Python基础语法(上)
目录 一、print函数及常量表达式 1.print函数 2.常量表达式 二、变量 1.定义变量的规则 2.python的动态类型特性 3.字符串 三、注释 四、input函数 1.input函数 2.变量类型转换 五、运算符 1.算数运算符 2.关系运算符 (1)整形的比较 &am…...
k8s系列--docker拉取镜像导入k8s的containerd中
# 确认一下当前集群中正在运行的 Pod 和命名空间 kubectl get pods -A# 示例一:拉取并导入 CoreDNS 镜像 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.11.1 docker save registry.cn-hangzhou.aliyuncs.com/google_containers/cor…...
深入理解 Android 中的 ComponentInfo
深入理解 Android 中的 ComponentInfo 在 Android 开发中,ComponentInfo 是一个非常重要的类,它用于描述应用程序中的组件信息,包括 Activity、Service、BroadcastReceiver 和 ContentProvider。理解 ComponentInfo 的结构和使用方式&#x…...
阿里云 ECS 服务器绑定多个公网IP
阿里云 ECS 服务器绑定多个公网IP 一、弹性公网IP绑定ECS服务器 单台ECS一般只能直接绑定一个弹性公网IP,但是可以绑定多张弹性网卡,如果把弹性公网IP绑定到弹性网卡上,那么单台ECS就能间接绑定多个弹性公网IP。但有的服务器系统镜像可能不…...
模块化通讯管理机在物联网系统中的应用
安科瑞刘鸿鹏 摘要 随着能源结构转型和智能化电网的推进,电力物联网逐渐成为智能电网的重要组成部分。本文以安科瑞ANet系列智能通信管理机为例,探讨其在电力物联网中的应用,包括数据采集、规约转换、边缘计算、远程控制等技术实践&#…...
Kafka Offset explorer使用
Kafka集群配置好以后以后运维这边先用工具测试一下,便于rd展开后续的工作,本地调试时一般使用Offset explorer工具进行连接 使用SASL(Simple Authentication and Security Layer)验证方式 使用SCRAM-SHA-256(Salted Challenge Response Authentication…...
小程序学习07—— uniapp组件通信props和$emit和插槽语法
目录 一 父组件向子组件传递消息 1.1 props (a)传递静态或动态的 Prop (b)单向数据流 二 子组件通知父组件 2.1 $emit (a)定义自定义事件 (b)绑定自定义事件 三 插槽语法…...
行为模式1.模板方法模式
行为型模式 模板方法模式(Template Method Pattern)命令模式(Command Pattern)迭代器模式(Iterator Pattern)观察者模式(Observer Pattern)中介者模式(Mediator Pattern…...
【模型】Qwen2-VL 服务端UI
1. 前言 最近在测试VLM模型,发现官方的网页demo,代码中视频与图片分辨率可能由于高并发设置的很小,导致达不到预期效果,于是自己研究了一下,搞了一个简单的前端部署,自己在服务器部署了下UI界面࿰…...
ImageNet 2.0?自动驾驶数据集迎来自动标注新时代
引言: 3DGS因其渲染速度快和高质量的新视角合成而备受关注。一些研究人员尝试将3DGS应用于驾驶场景的重建。然而,这些方法通常依赖于多种数据类型,如深度图、3D框和移动物体的轨迹。此外,合成图像缺乏标注也限制了其在下游任务中的…...
京东一面:MySQL 主备延迟有哪些坑?主备切换策略
作为一名开发同学,大家对 MySQL 一定不陌生,像常见的 事务特性、隔离级别 、索引等也都是老生常谈。 今天,我们就来聊个深度话题,关于 MySQL 的 高可用 一、什么是高可用? 维基百科定义: 高可用性&#x…...
Linux(Ubuntu24.04)安装Eigen3库
本次安装Eigen3是在WSL2的Ubuntu24.04环境下进行。 Eigen3是一个C模板库,用于线性代数、矩阵运算和数值计算。它提供了一组高性能的矩阵和向量操作,以及常用的线性代数算法,如矩阵分解、特征值求解和最小二乘解等。 1、安装Eigen3 有两种安…...
ABP框架8——仓储的作用及其基础Demo
一、使用仓储的好处 1.提高CRUD接口复用性2.解耦业务逻辑(BLL)和增删改查(CRUD),换ORM特别方便,不需要改应用层,直接改仓储层3.做复杂查询4.事务支持 二、Demo public class BookRepository …...
【Multisim用74ls92和90做六十进制】2022-6-12
缘由Multisim如何用74ls92和90做六十进制-其他-CSDN问答 74LS92、74LS90参考...
利用KPaaS平台提升企业审批流程的透明度
企业的审批流程不仅影响决策效率,还直接关联到组织的透明度和运营效果。传统的审批流程通常由多个环节和系统构成,每一个环节都可能存在信息不对称的现象。例如,某一审批节点的负责人可能并不清楚当前的审批状态,而在其他环节&…...
Python 数据可视化的完整指南
目录 一、为什么选择 Python 进行数据可视化? 二、常用 Python 可视化库及其特点 三、常用图表类型及其代码示例 折线图:用于展示数据随时间或其他连续变量的变化趋势。 柱状图:用于比较不同类别的数据大小。 散点图:用于展示两个变量之间的关系,并发现数据中的模式…...
ZYNQ初识7(zynq_7010)RAM_IP核
学习汇总正点原子bi站教学视频。但由于目前的学习板PL端缺乏时钟晶振,所以需要从PS端调用时钟供给PL端使用,也就造成顶层文件的设置出现一些问题,在IP核创建调用和例化过程中一些功能会受到限制,所以以下仅作汇总参考。 zynq_7000…...
.e01, ..., .e0n的分卷压缩包怎么解压
用BandiZip,这些分卷压缩中还有一个.exe的文件,这个不是可执行文件,是一个解压缩的开头。 安装好bandiZip后,右键这个.exe文件 点击打开就是开始解压了: 最后解压后是这些。然后一个个再次解压....
linux网络管理
网络配置文件 网卡信息文件 :::color3 /etc/sysconfig/network-scripts ::: 配置描述DEVICE网卡设备名-必填BOOTPROTO必填:none,static(静态 IP),dhcp(动态 IP)HWADDRMAC 地址NM_CONTROLLED是否启用Network Manager图形管理工具,建议 noONBOOT是否默认…...
宽带、光猫、路由器、WiFi、光纤之间的关系
1、宽带(Broadband) 1.1 宽带的定义宽带指的是一种高速互联网接入技术,通常包括ADSL、光纤、4G/5G等不同类型的接入方式。宽带的关键特点是能够提供较高的数据传输速率,使得用户可以享受到稳定的上网体验。 1.2 宽带的作用宽带是…...
Momentum Contrast for Unsupervised Visual Representation Learning论文笔记
文章目录 论文地址动量队列对比学习的infoNCE loss为什么需要动量编码器对比学习moco方法中的动量Encoder为什么不能与梯度Encoder完全相同为什么动量编码器和梯度编码器不能完全相同?总结: 我理解,正负样本应该经过同一个encoder,…...
linux-26 文件管理(四)install
说一个命令,叫install,man install,install是什么意思?安装,install表示安装的意思,那你猜install是用来干什么的?猜一猜干什么的?安装软件,安装第三方软件,错…...
day-104 组合总和 Ⅳ
思路 动态规划 解题过程 假设dfs(target)表示组成target的组合数,可得转换方程dfs(target)dfs(target-nums[0])dfs(target-nums[1])…以此类推 注意:nums[i]需要小于等于当前的target Code class Solution {public int combinationSum4(int[] nums, i…...
Gitlab-runner 修改默认的builds_dir并使用custom_build_dir配置
gitlab-runner 修改默认的builds_dir并使用custom_build_dir配置 1. 说明2. 实操(以docker执行器为例)2.1 修改默认的builds_dir2.1.1 调整gitlab-runner的配置文件2.1.2 CI文件 2.2 启用custom_build_dir2.2.1 调整gitlab-runner的配置文件2.2.2 CI文件…...
代码随想录算法训练营day21
代码随想录算法训练营 —day21 文章目录 代码随想录算法训练营前言一、669. 修剪二叉搜索树递归法迭代法 二、108.将有序数组转换为二叉搜索树递归法迭代法 三、538.把二叉搜索树转换为累加树递归法 总结 前言 今天是算法营的第21天,希望自己能够坚持下来…...
苹果系统MacOS下ObjectC建立的App程序访问opencv加载图片程序
前言 苹果系统下使用opencv感觉还是有些不太方便,总是感觉有点受到限制。本博客描述的是在MacOS下建立App程序然后调用opencv显示图片时出现的一些问题并最后解决的一个过程。 一、程序的建立 选择程序的类型: 选择界面模式和编程语言: 其余…...
滴滴工作流引擎Turbo与logicFlow研究
目录 logicFlow turbo 工作流引擎很多,也都提供了前端UI库,但是太过于冗杂了,元数据表都几十个,logincFlow和Turbo的组合提供了轻量化方式,turbo后端代码只有5个元数据表,logicFlow也提供了bpm的相关扩展功能,但缺点是turbo社区不活跃,logicFlow个人认为跟echarts这种…...
快速将索尼手机联系人导出为 HTML 文件
我想将 Sony Xperia 手机上的联系人导出到计算机上进行备份,并在需要时进行编辑。这可以做到吗?如何做到?作为助手我需要下载什么工具吗? 当您的 Android 手机上存储了如此多的重要联系人,而您又不想丢失它们时&#…...
长时间序列预测算法---Informer
目录 一、传统的 Transformer 模型二、Informer原理2.1 Attention计算2.2 “积极”的Q筛选2.2.1 KL散度2.2.2 “懒惰”的q处理 2.3 Encoder结构2.4 Decoder结构2.4.1 Transformer的Decoder操作2.4.2 Informer的Decoder操作 2.5 Informer模型的改进 三、模型应用 时间序列相关参…...
深入理解连接池:从数据库到HTTP的优化之道
在现代应用开发中,高效的资源管理是关键,其中连接池(Connection Pool)技术起到了至关重要的作用。本文将带你深入了解连接池的概念及其在数据库和HTTP通信中的应用,结合 JDBC 与 Druid 的关系,以及 HttpURL…...
LLM(十二)| DeepSeek-V3 技术报告深度解读——开源模型的巅峰之作
近年来,大型语言模型(LLMs)的发展突飞猛进,逐步缩小了与通用人工智能(AGI)的差距。DeepSeek-AI 团队最新发布的 DeepSeek-V3,作为一款强大的混合专家模型(Mixture-of-Experts, MoE&a…...
IIS设置IP+端口号外网无法访问的解决方案
在IIS将站点设置为IP端口访问,假设端口为8080,设好后,服务器上可以访问,外网无法访问。 通常是端口8080没有加入【入站规则】的缘故,将8080端口加入【入站规则】即可,操作如下: 一、ctrlr 输入 …...
Leetcode 最大正方形
java 实现 class Solution {public int maximalSquare(char[][] matrix) {//处理特殊情况if(matrix null || matrix.length 0 || matrix[0].length 0) return 0;int rows matrix.length;int cols matrix[0].length;int[][] dp new int[rows][cols]; //dp[i][j]的含义是以…...
数据结构与算法之动态规划: LeetCode 3105. 最长的严格递增或递减子数组 (Ts版)
最长的严格递增或递减子数组 https://leetcode.cn/problems/longest-strictly-increasing-or-strictly-decreasing-subarray/description/ 描述 给你一个整数数组 nums返回数组 nums 中 严格递增 或 严格递减的最长非空子数组的长度 示例 1 输入:nums [1,4,3,…...
【书籍连载】《软件测试架构实践与精准测试》| 有关软件测试模型的调查结果
各位软件领域的精英们,今天小编邀请你继续深入学习《软件测试架构实践与精准测试》。 《软件测试架构实践与精准测试》是作者李龙(安畅检测首席技术专家)基于软件测试“川模型”的著作。本书结合作者首次提出的软件测试新的模型“川模型”测试…...
我的博客年度之旅:感恩、成长与展望
目录 感恩有你 技能满点 新年新征程 嘿,各位技术大佬、数码潮咖还有屏幕前超爱学习的小伙伴们!当新年的钟声即将敲响,我们站在时光的交汇点上,回首过往,满心感慨;展望未来,豪情满怀。过去的这…...
【RTD MCAL 篇3】 K312 MCU时钟系统配置
【RTD MCAL 篇3】 K312 MCU时钟系统配置 一,文档简介二, 时钟系统理论与配置2.1 K312 时钟系统2.1.1 PLL2.1.2 MUX_0系统2.1.3 MUX_6 时钟输出2.1.4 option B推荐方案 2.2 EB 配置2.2.1 General 配置2.2.2 McuClockSettingConfig配置2.2.2.1 McuFIRC配置…...
力扣28找出字符串中第一个匹配项的下标
class Solution:def strStr(self, haystack: str, needle: str) -> int:# 特殊情况处理if not needle:return 0# 获取 haystack 和 needle 的长度a len(needle)b len(haystack)# 遍历 haystack,检查每个子字符串是否与 needle 匹配for i in range(b - a 1):if…...
[C#]C# random.Next(0,1)包含0和1吗
在C#中,Random.Next(minValue, maxValue) 方法生成的随机数是一个在 minValue(包含)和 maxValue(不包含)之间的整数。因此,当你调用 Random.Next(0, 1) 时,它只会生成一个整数,这个整…...
【设计模式】 基本原则、设计模式分类
设计模式 设计模式是软件工程中的一种通用术语,指的是针对特定问题的经过实践验证的解决方案。设计模式并不是最终的代码实现,而是描述了如何解决某一类问题的思路和方法。 如果熟悉了设计模式,当遇到类似的场景,我们可以快速地…...
Swift White Hawkstrider
Swift White Hawkstrider 迅捷白色陆行鸟 Swift White Hawkstrider - Item - 魔兽世界怀旧服TBC数据库_WOW2.43数据库_70级《燃烧的远征》数据库 Kaelthas Sunstrider (1) <Lord of the Blood Elves> 凯尔萨斯逐日者. 掉落 [80圣骑士][Alonsus-加丁][诺森德冒险补给品…...
node.js下载、安装、设置国内镜像源(永久)(Windows11)
目录 node-v20.18.0-x64 工具下载安装设置国内镜像源(永久) node-v20.18.0-x64 工具 系统:Windows 11 下载 官网https://nodejs.org/zh-cn/download/package-manager 版本我是跟着老师选的node-v20.18.0-x64如图选择 Windows、x64、v2…...
「Mac畅玩鸿蒙与硬件48」UI互动应用篇25 - 简易购物车功能实现
本篇教程将带你实现一个简易购物车功能。通过使用接口定义商品结构,我们将创建一个动态购物车,支持商品的添加、移除以及实时总价计算。 关键词 UI互动应用接口定义购物车功能动态计算商品管理列表操作 一、功能说明 简易购物车功能包含以下交互&#…...
df.groupby(pd.Grouper(level=1)).sum()
df.groupby(pd.Grouper(level1)).sum() 在 Python 中的作用是根据 DataFrame 的某一索引级别进行分组,并计算每个分组的总和。具体来说: df.groupby(...):这是 pandas 的分组操作,按照指定的规则将 DataFrame 分组。 pd.Grouper(…...
【网络安全 | 漏洞挖掘】绕过电子邮件确认实现预账户接管
未经许可,不得转载。 文章目录 正文漏洞步骤赏金正文 我测试的应用程序有多个子域名: 1、account.example.com:处理用户账户管理。 2、project.example.com:管理用户拥有或被邀请的项目。 3、org.example.com:一个新的子域,用于管理多个项目的组织。 4、collaborator.ex…...
【SpringBoot教程】SpringBoot整合Mybatis - 前后端分离项目 - vue3
🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 今天毛毛张将通过一个完整的前后端分离的任务来介绍SpringBoot整合Mybatis过程! 文章目录 1.前言1.1 任务描述1.2 SpringBoot整合Mybatis概述1.3 完整项目…...
node.js之---事件驱动编程
详解事件驱动 事件驱动是基于什么实现的 事件驱动和I/O操作的关系 I/O操作和事件循环的关系 详解事件驱动 事件驱动编程(Event-driven Programming)是一种编程范式,其中程序的控制流是由“事件”驱动的。事件通常指的是用户操作、网络请…...
RK3588+FPGA全国产异步LED显示屏控制卡/屏幕拼接解决方案
RK3588FPGA核心板采用Rockchip RK3588新一代旗舰 级八核64位处理器,支持8K视频编解码,多屏4K输出,可实现12屏联屏拼接、同显、异显,适配多种操作系统,广泛适用于展览展示、广告内容投放、新零售、商超等领域实现各种媒…...