python爬虫10:selenium库
python爬虫10:selenium库
前言
python实现网络爬虫非常简单,只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点,方便以后复习。
申明
本系列所涉及的代码仅用于个人研究与讨论,并不会对网站产生不好影响。
目录结构
文章目录
- python爬虫10:selenium库
- 1. 概述与安装
- 1.1 概述
- 1.2 安装
- 2. 基本使用
- 2.1 声明浏览器对象
- 2.2 访问页面
- 2.3 关闭访问页面和浏览器:
- 2.4 查找节点方法:
- 2.5 节点交互:
- 2.6 动作链:
- 2.7 获取网页信息和节点信息:
- 2.8 执行js代码:
- 2.9 切换Frame:
- 2.10 延时等待:
- 2.11 切换窗口
- 3. 总结
1. 概述与安装
1.1 概述
selenium其实严格来说并不属于爬虫库,而是用于测试的库,不过这里我们就拿来当作爬虫库来用就行。
selenium相比于其他的爬虫库而言,更加综合,其既可以请求,也可以解析,并且过程是可视化的,即请求的时候,你可以看见程序打开浏览器,然后按照你设定的步骤进行。
1.2 安装
selenium的安装以前比较麻烦,需要自己去安装浏览器驱动,但是现在最新版本的selenium已经不需要我们自己装驱动了,当你运行代码的时候,会自动检测安装。
因此,只需要安装:
pip install selenium
可以用下面代码测试浏览器驱动是否安装(谷歌浏览器):
# 导包
from selenium import webdriver# 浏览器初始化
driver = webdriver.Chrome()
# 打开百度
driver.get('https://www.baidu.com')
# 打印源码
print(driver.page_source)
# 关闭
driver.quit()
其运行过程就是自动打开浏览器并打开百度搜索页面,然后返回源码。
2. 基本使用
2.1 声明浏览器对象
使用selenium,首先需要声明浏览器对象,除去我之前使用的chrome浏览器,还支持:Firefox、Edge等等,但是一般常用的是chrome浏览器,所以这里我只给出chrome浏览器的声明方法,其他的声明方法都类似,只需要修改浏览器名称即可。
# 导包
from selenium import webdriver# 声明浏览器对象
driver = webdriver.Chrome()
2.2 访问页面
这里不分什么get或者post,统一的只有get方法。语法如下:
driver.get(url)
# 示例:
driver.get('https://www.baidu.com')
2.3 关闭访问页面和浏览器:
# 关闭访问页面和浏览器
driver.close()
# 关闭驱动
driver.quit()
2.4 查找节点方法:
查找单个节点:
作用:只返回第一个匹配的节点。
方法如下:driver.find_element()
常用参数:
1. by需要导入from selenium.webdriver.common.by import By指定获取元素的方式,常见的如:By.NAME(标签name属性获取)、By.ID(标签id属性获取)、By.CLASS_NAME(标签class属性获取)、By.TAG_NAME(标签名字获取)、By.XPATH(通过xpath语法获取)、By.CSS_SELECTOR(通过css选择器获取)......2. value配合上面的by参数,填写相应的值即可
查找多个节点
方法名只是多了一个s
,变为了driver.find_elements()
,参数都是一样的。
2.5 节点交互:
常用的节点交互有两种:输入与点击,这也是我们在浏览器中最常用的两种了。方法分别如下:
# 输入内容
xxx.send_keys('内容')# xxx代表着一个节点
xxx.clear() #清除输入的内容
# 点击
xxx.click()
下面给大家一个案例: 打开百度,输入python并且点击搜索按钮进行搜索,之后再删除python,搜索java
# 导包
import time
from selenium import webdriver
from selenium.webdriver.common.by import By# 浏览器声明
driver = webdriver.Chrome()
# 打开百度
driver.get('https://www.baidu.com')
# 获取输入框节点
input_tag = driver.find_element(by=By.CLASS_NAME,value='s_ipt')
# 获取搜索按钮
search_tag = driver.find_element(by=By.XPATH,value='//input[@id="su"]')
# 输入python
input_tag.send_keys('python')
# 点击按钮
search_tag.click()
# 暂停2秒
time.sleep(2)
# 清楚python
input_tag.clear()
# 输入java
input_tag.send_keys('java')
# 搜索
search_tag.click()
# 暂停2秒
time.sleep(2)
# 退出
driver.close()
driver.quit()
运行结果如下动图所示:
2.6 动作链:
有些动作,如:拖拽、键盘按键等,没有具体的某个节点,这种方式就需要动作链来执行,你可以这样理解:你首先声明一个动作链对象,然后这个对象将一条一条的执行你写的代码。
这个方面需要大家自行查找官方文档,因为这个我日常用的不多,对于自己来说,也许只有破解验证码的时候才用得上,但是现在的验证码破解越来越难了,所以我基本上用不到这块。
2.7 获取网页信息和节点信息:
网页信息
网页源码:
方法: driver.page_source
作用:获取网页源码
网页标题:
方法:driver.title
作用:获取网页标题
节点信息:下面的xxx指的是的某个节点标签
获取属性:
方法: xxx.get_attribute('属性名字')
作用: 获取属性值
说明: xxx代表着节点
获取文本:
方法: xxx.text
作用: 获取文本值
获取其他信息:
获取id:
xxx.id
获取节点名称:
xxx.tag_name
获取节点在页面中的位置:
xxx.location (这个还是很有用的,对于滑动验证的验证码可以使用)
获取节点大小(宽和高):
xxx.size
2.8 执行js代码:
之前的功能,如:输入内容,点击按钮等,其他库可以使用其他方式实现,但是执行js代码确实selenium一个强大的功能。
比如:我们有时候爬取动态渲染的网页,如:百度图片,我们鼠标向下滑动,越来越多的图片加载出来,这就是动态渲染,或者我们有时候看见的“更多”(有些内容显示不全,点更多可以在当前页面查看全部内容)都是动态渲染,我们可以使用js代码模拟实现。
这个方面考察大家的js功底,如果不会的朋友也不用紧张,如果你需要啥功能可以在网上搜索,将网页的js代码拷贝下来即可。
语法如下:
driver.execute_script('js代码')
代码演示;(效果:直接滑动到网页底部)
from selenium import webdriver
from selenium.webdriver.common.by import By
import time# 浏览器声明
driver = webdriver.Chrome()
# 打开一个网页
driver.get('https://tieba.baidu.com/f?kw=%B6%B7%CD%BC&fr=ala0&tpl=5')
# 执行js代码
driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
time.sleep(5)
# 关闭
driver.close()
driver.quit()
结果演示:
2.9 切换Frame:
网页标签中有一个标签叫做frame标签,相当于一个子网页,而使用selenium打开网页默认在父级frame里面,因此想要获取子frame中的内容需要切换frame,方法如下:
driver.switch_to.frame(frame_reference=id或者name)
2.10 延时等待:
selenium打开网页,有时候需要注意网速是否良好,因为有时候你没有获取想要获取的信息就是因为网速不好。
除去使用time模块中的等待外,我们还可以使用selenium自带的延时等待。
隐式等待:
当查找的节点没有第一时间出现时,会等待指定时间后再来获取。
方法如下:
# 导包
from selenium import webdriver
from selenium.webdriver.common.by import By
# 浏览器声明
driver = webdriver.Chrome()
# 延时等待
driver.implicitly_wait(10) # 如果没有找到元素,等待10秒中
# 找元素
driver.find_element(by=By.TAG_NAME,value='div')
显示等待::
隐式等待效果并不好,因为如果在等待过程中加载出来了我们需要的标签,但是我们仍然得等待一定的时间。因此,我们需要更好的等待方式----显示等待。
作用:它指定最长等待时间,如果在这个时间内加载出来了节点,则直接获取节点,或则抛出超时异常。
方法如下:
# 导包
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# 浏览器声明
driver = webdriver.Chrome()
# 显示等待
# 创建等待对象
wait = WebDriverWait(driver,10) #第二个参数是最大等待时间
tag = wait.until(EC.presence_of_element_located((By.ID,'q'))) # 这个作用:直到获取到id为q的节点
EC除去presence_of_element_located外,还有很多条件,具体的可以见官方库,但是使用方法都是这样。
2.11 切换窗口
有时候,我们用selenium请求了第一个网页后,又再次请求一个新的网页(或者你在第一个网页点击了某个按钮跳转到新网页),此时selenium权柄还停留在第一个网页,而我们想要获取第二个网页的信息,就需要切换权柄。
方法如下:
driver.window_handles # 查看所有的窗口权柄,返回一个列表,按照先后顺序出值
driver.current_window_handle # 当前的窗口权柄,和上面的可以对应看
driver.switch_to.window(xxx) # 切换窗口权柄,里面的xxx可以这么写 driver.window_handles[x](其中x为索引),具体的代码演示可以看下一篇的案例
3. 总结
本篇讲解了selenium的基础操作,由于selenium并不单单可以用于爬虫,还可以用于测试
这个工作,因此其内容还有很多我们并没有涉及,这一点就需要靠大家根据自己的实际需求进行学习了。
下一篇进行实战讲解。
相关文章:
python爬虫10:selenium库
python爬虫10:selenium库 前言 python实现网络爬虫非常简单,只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点,方便以后复习。 申明 本系列所涉及的代码仅用于个人研究与讨论,并不会对网站产…...
c++ java rgb与nv21互转
目录 jni函数 c++ rgb转nv21,可以转,不报错,但是转完只有黑白图 java yuv420保存图片,先转nv21,再保存ok: c++ yuv420月bgr互转,测试ok jni函数 JNIEXPORT void JNICALL Java_com_tencent_blazefacencnn_BlazeFaceNcnn_encode(JNIEnv *env,jobject thiz, jobject in…...
多视图聚类(multi-view clustering)简介
多视图聚类 目前大概有以下几种: 多视图k-means聚类多视图谱聚类多视图图聚类多视图子空间聚类 (multi-view subspace clustering)深度学习多视图聚类 (deep multi-view clustering) 其中多视图子空间聚类具有不错的数据表征能力。 对于多视图子空间聚类而言&…...
wazhu配置以及漏洞复现
目录 1.wazhu配置 进入官网下载 部署wazhu 修改网络适配器 重启 本地开启apache wazhu案例复现 前端页面 执行 1.wazhu配置 进入官网下载 Virtual Machine (OVA) - Installation alternatives (wazuh.com) 部署wazhu 修改网络适配器 重启 service network restart 本地…...
javaweb项目部署linux服务器遇到的问题
其他有关本次部署内容请参考本站其他文章 javaweb项目要用war包 IntelliJ IDEA 可以打包out里的子目录 D:\D盘文件\浏览器\webshop\out\artifacts\webshop_war_exploded>jar cvf webshop.war * 方法来源视频 18、web项目的打包与发布_哔哩哔哩_bilibili myeclipse项目…...
【数据结构OJ题】环形链表
原题链接:https://leetcode.cn/problems/linked-list-cycle/description/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 整体思路:定义快慢指针fast,slow,如果链表确实有环,fast指针一定会…...
PySpark-核心编程
2. PySpark——RDD编程入门 文章目录 2. PySpark——RDD编程入门2.1 程序执行入口SparkContext对象2.2 RDD的创建2.2.1 并行化创建2.2.2 获取RDD分区数2.2.3 读取文件创建 2.3 RDD算子2.4 常用Transformation算子2.4.1 map算子2.4.2 flatMap算子2.4.3 reduceByKey算子2.4.4 Wor…...
vue 在IOS移动端中 windon.open 等跳转外部链接后,返回不触发vue生命周期、mounted等相关事件-解决方法
做了一个列表的h5页面,通过点击列表跳转到外部链接,然后返回是回到原来页面状态,类似缓存。发现在ios端返回后,vue 的mounted() 、create()、路由监听等方法都不会执行。在安卓和pc 端都能正常调用。 解决方案:监听pa…...
股票预测和使用LSTM(长期-短期-记忆)的预测
一、说明 准确预测股市走势长期以来一直是投资者和交易员难以实现的目标。虽然多年来出现了无数的策略和模型,但有一种方法最近因其能够捕获历史数据中的复杂模式和依赖关系而获得了显着的关注:长短期记忆(LSTM)。利用深度学习的力…...
Docker搭建个人网盘、私有仓库
1、使用mysql:5.6和 owncloud 镜像,构建一个个人网盘 [rootlocalhost ~]# docker pull mysql:5.6 [rootlocalhost ~]# docker pull owncloud [rootlocalhost ~]# docker run -itd --name mysql --env MYSQL_ROOT_PASSWORD123456 mysql:5.6 [rootlocalhost ~]# doc…...
3种获取OpenStreetMap数据的方法【OSM】
OpenStreetMap 是每个人都可以编辑的世界地图。 这意味着你可以纠正错误、添加新地点,甚至自己为地图做出贡献! 这是一个社区驱动的项目,拥有数百万注册用户。 这是一个社区驱动的项目,旨在在开放许可下向每个人提供所有地理数据。…...
数据处理与统计分析——MySQL与SQL
这里写目录标题 1、初识数据库1.1、什么是数据库1.2、数据库分类1.3、相关概念1.4、MySQL及其安装1.5、基本命令 2、基本命令2.1、操作数据库2.2、数据库的列类型2.3、数据库的字段属性2.4 创建和删除数据库表2.5、数据库存储引擎2.6、修改数据库 3、MySQL数据管理3.1、外键 My…...
OpenCV之特征点匹配
特征点选取 特征点探测方法有goodFeaturesToTrack(),cornerHarris()和SURF()。一般使用goodFeaturesToTrack()就能获得很好的特征点。goodFeaturesToTrack()定义: void goodFeaturesToTrack( InputArray image, OutputArray corners,int maxCorners, double qualit…...
浅谈开关柜绝缘状态检测与故障诊断
贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 摘要:电力开关柜作为电力系统的关键设备广泛应用于输电配电网络,其运行可靠性直接影响着电力系统供电质量及安全性能。开关柜绝缘状态检测与故障诊断是及时维修、更换和预防绝缘故障的重要技术手段。在阐述开关柜绝…...
Mybatis 动态 SQL
动态 SQL 1. if 标签2. trim 标签3. where 标签4. set 标签5. foreach 标签 1. if 标签 if 标签有很多应用场景, 例如: 在用户进行注册是有些是必填项有些是选填项, 这就会导致前端传入的参数不固定如果还是将参数写死就很难处理, 这时就可以使用 if 标签进行判断 <insert …...
Android studio之 build.gradle配置
在使用Android studio创建项目会出现两个build.gradle: 一. Project项目级别的build.gradle (1)、buildscript{}闭包里是gradle脚本执行所需依赖,分别是对应的maven库和插件。 闭包下包含: 1、repositories闭包 2、d…...
【ElasticSearch】一键安装IK分词器无需其他操作
要注意的时下面命令中的es是我容器的名称,要换成你对应的es容器名 docker exec -it es /bin/bash # 进入容器 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis- ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.1…...
在Ubuntu上启动一个简单的用户登录接口服务
一个简单的用户登录接口 我使用 Python 和 Flask 框架来创建这个接口 首先,确保你已经安装了 Python 和 Flask。如果没有安装,可以通过以下命令在 Ubuntu 上安装: sudo apt update sudo apt install python3 python3-pip pip3 install Fla…...
【PHP】函数-作用域可变函数匿名函数闭包常用系统函数
文章目录 函数定义&使用命名规则参数种类默认值引用传递函数返回值return关键字 作用域global关键字静态变量 可变函数匿名函数闭包常用系统函数输出函数时间函数数学函数与函数相关函数 函数 函数:function,是一种语法结构,将实现某一个…...
Python使用pymysql和sqlalchemy访问MySQL的区别
Python使用pymysql和sqlalchemy访问MySQL的区别 1. 两个数据库连接工具的对比 pymysql和sqlalchemy是两个Python中经常用于与MySQL数据库交互的库。都可以连接MySQL数据库,但它们有明显的区别。 (1)特点 pymysql是一个Python模块…...
ubuntu服务器的mysql,更改root密码,并允许远程连接
我只是一个搬运工 更改密码远程连接...
微信小程序【构建npm】使用记录
:: 问题 使用原生微信小程序开发时,通过官方 typescript 模板构建的小程序无法正确执行 构建npm 成功,从而导致我想通过 npm 安装并使用第三方库出现问题 :: 开发环境(可参照) 设备:macOS Ventura 13.0 微信开发者工…...
mybatis入门的环境搭建及快速完成CRUD(增删改查)
又是爱代码的一天 一、MyBatis的介绍 ( 1 ) 背景 MyBatis 的背景可以追溯到 2002 年,当时 Clinton Begin 开发了一个名为 iBATIS 的持久化框架。iBATIS 的目标是简化 JDBC 编程,提供一种更直观、易用的方式来处理数据库操作。 在传统的 JDBC 编程中&…...
《HeadFirst设计模式(第二版)》第九章代码——组合模式
上一章链接: 《HeadFirst设计模式(第二版)》第九章代码——迭代器模式_轩下小酌的博客-CSDN博客 前面说到,当一个菜单里面出现了子菜单的时候,前面的迭代器模式得换成组合模式。 组合模式: 允许将对象组合成树形结构来表现部分-整…...
iOS17 widget Content margin
iOS17小组件有4个新的地方可以放置分别是:Mac桌面、iPad锁屏界面、 iPhone Standby模式、watch的smart stack Transition to content margins iOS17中苹果为widget新增了Content margin, 使widget的内容能够距离边缘有一定的间隙,确保内容显示完整。这…...
计网第四章(网络层)(一)
前面学习了数据链路层,我们可以实现一个网络的内部通信,可是要把这些网络互连起来形成更大的互连网,就需要用网络层互联设备路由器。而有了路由器的参与,就有不同网络、跨网络的概念诞生。 这时候我想大家也能理解为什么叫网络层…...
【前端】vue3 接入antdv表单校验
1/🍕背景 1、表单校验是非常常见的需求,能够有效的拦截大部分的错误数据,提升效率。 2、快速的给使用者提示和反馈,用户体验感非常好。 3、成熟的表单校验框架,开发效率高,bug少。 最近使用的是vue3antdv的…...
CY3-COOH在蛋白质定位的特点1251915-29-3星戈瑞
欢迎来到星戈瑞荧光stargraydye!小编带您盘点: CY3-COOH是一种橙红色荧光标记试剂,可以用于蛋白质定位研究。**以下是CY3-COOH在蛋白质定位的特点和应用: 细胞定位:**将CY3-COOH标记到特定蛋白质上,可以…...
数据采集:selenium 获取某网站CDN 商家排名信息
写在前面 工作中遇到,简单整理理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大…...
5.从头跑一个pipeline
1.安装torch pip install torchvision torch PyTorch的torchvision.models模块中自带的很多预定义模型。torchvision 是PyTorch的一个官方库,专门用于处理计算机视觉任务。在这个库中,可以找到许多常用的卷积神经网络模型,包括ResNet、VGG、…...
leetcode原题: 堆箱子(动态规划实现)
题目: 给你一堆n个箱子,箱子宽 wi、深 di、高 hi。箱子不能翻转,将箱子堆起来时,下面箱子的宽度、高度和深度必须大于上面的箱子。实现一种方法,搭出最高的一堆箱子。箱堆的高度为每个箱子高度的总和。 输入使用数组…...
Java中数组和集合的对比,以及什么情况下使用数组更合适,什么情况下使用集合更合适。集合的基本介绍和集合体系图。
在Java中,数组和集合(Java集合框架)都用于存储多个元素。它们各自有不同的特点和适用场景。下面我会对数组和集合进行对比,并解释何时使用集合更好,以及何时使用数组更合适。 数组和集合的对比: 数组&…...
STM32之17.PWM脉冲宽度调制
一LED0脉冲宽度调制在TIM14_CHI,先将LED(PF9)代码配置为AF推挽输出模式,将PF9引脚连接到TIM14, #include <stm32f4xx.h>static GPIO_InitTypeDef GPIO_InitStruct;void Led_init(void) {//打开端口F的硬件时钟&a…...
VS2015打开Qt的pro项目文件 报错
QT报错:Project ERROR: msvc-version.conf loaded but QMAKE_MSC_VER isn‘t set 解决方法: 找到本机安装的QT路径,找到“msvc-version.conf”文件,用记事本打开, 在其中添加版本“QMAKE_MSC_VER 1900”保存即可。 …...
骨传导耳机会头疼吗?骨传导耳机会对身体不好吗
一般情况下,骨传导耳机不会引起头疼。由于骨传导耳机的工作原理是通过将声音传导到颞骨和耳部周围的骨骼来传达音频信号,而不是直接进入耳道,因此不会对耳朵造成压力或产生耳疼的感觉。 然而,每个人的感受和体验可能不同ÿ…...
【面试题系列】(一)
Redis有哪些数据结构?其底层是怎么实现的? Redis 系列(一):深入了解 Redis 数据类型和底层数据结构 字符串(String): 用于存储文本或二进制数据。可以执行字符串的基本操作…...
vscode C++17便捷配置教程(懒人版)
环境链接 以上是已经配置好的c17环境链接,直接下载解压即可(注意文件路径上不要带有中文) 下载解压之后按照msys64-mingw64-bin路径打开 然后单击该路径右方空白区域可直接复制路径 然后点击开始菜单搜索“环境变量“并打开(如…...
动态数组实现链地址法哈希表
通常情况下哈希函数的输入空间远大于输出空间,因此理论上哈希冲突是不可避免的。比如,输入空间为全体整数,输出空间为数组容量大小,则必然有多个整数映射至同一数组索引。 解决哈希冲突方法常见有:链地址法、开放寻址…...
Eclipse(STS):pom.xml 报错:Multiple markers at this line
pom.xml 报错:Multiple markers at this line STS中,项目能够正常运行,但是 pom.xml 报错:Multiple markers at this line 项目本身没有任何修改,之前不报错的,突然报错了。 Multiple markers at this li…...
CSerialPort教程4.3.x (3) - CSerialPort在MFC中的使用
CSerialPort教程4.3.x (3) - CSerialPort在MFC中的使用 环境: 系统:windows 10 64位 编译器:Visual Studio 2008前言 CSerialPort项目是一个基于C/C的轻量级开源跨平台串口类库,可以轻松实现跨平台多操作系统的串口读写&#x…...
2022版 的IDEA创建一个maven项目(超详细)
一.设置idea中指定的maven的位置以及本地存储仓库 开发中一般我们使用自己下载的maven,不使用IDEA工具自带的,这就需要将我们下载的maven配置到IDEA工具中,配置如下图所示: 或者直接 快捷键 CtrlAltS 直接进入设置 maven home pa…...
lvs实现DR模型搭建
目录 一,实现DR模型搭建 1, 负载调度器配置 1.1调整ARP参数 1.2 配置虚拟IP地址重启网卡 1.3 安装ipvsadm 1.4 加载ip_vs模块 1.5 启动ipvsadm服务 1.6 配置负载分配策略 1.7 保存策略 2, web节点配置 1.1 调整ARP参数 1.2 配置虚拟I…...
设计模式之迭代器模式(Iterator)的C++实现
1、迭代器模式的提出 在软件开发过程中,操作的集合对象内部结构常常变化,在访问这些对象元素的同时,也要保证对象内部的封装性。迭代器模式提供了一种利用面向对象的遍历方法来遍历对象元素。迭代器模式通过抽象一个迭代器类,不同…...
【0基础入门Python Web笔记】二、python 之逻辑运算和制流程语句
二、python 之逻辑运算和制流程语句 逻辑运算控制流程语句条件语句(if语句)循环结构(for循环、while循环)continue、break和pass关键字控制流程语句的嵌套以及elif 更多实战项目可进入下方官网 逻辑运算 Python提供基本的逻辑运算…...
容器——Docker
1.安装docker服务,配置镜像加速器 2.下载系统镜像(Ubuntu、 centos) 3.基于下载的镜像创建两个容器 (容器名一个为自己名字全拼,一个为首名字字母) 4.容器的启动、 停止及重启操作 5.怎么查看正在运行的容器…...
SQL注入之宽字节注入
文章目录 宽字节注入是什么?注入练习让转义符失效联合查询 代码审计 宽字节注入是什么? 宽字节注入准确来说不是注入手法,而是另外一种比较特殊的情况。宽字节注入的目的是绕过单双引号转义。 宽字节注入是一种绕过单双引号转义的手段&#x…...
MyBatis动态sql
文章目录 一、MyBatis动态sql1.1 概述1.2 if元素1.3 foreach元素 二、模糊查询2.1 使用#{字段名}2.2 使用${字段名}2.3 使用concat{%,#{字段名},%}2.4 mybatis中#与$的区别 三、MyBatis结果映射3.1 区别3.2 应用场景 一、MyBatis动态sql 1.1 概述 MyBatis是一个Java持久化框架…...
L1-032 Left-pad 测试点全过
题目 根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的模块,就是这个模块把javascript里面的React/Babel干瘫痪了。这是个什么样的…...
ssm+Vue.js在线购物系统源码和论文
ssmVue.js在线购物系统源码和论文049 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势…...
港联证券|指数或进入磨底阶段 短期关注环保、煤炭等板块
磨底历来都不是一天能达到的,比方2018年的政策底到商场底,半途也阅历两个多月时间。当下政策底出现之后至今也有近一个月时间,并且下跌量能不断缩短,心情面也降至冰点,种种迹象阐明离真正商场底的构成已经不远了。此时…...