尚硅谷爬虫note008
一、handler处理器
定制更高级的请求头
# _*_ coding : utf-8 _*_
# @Time : 2025/2/17 08:55
# @Author : 20250206-里奥
# @File : demo01_urllib_handler处理器的基本使用
# @Project : PythonPro17-21# 导入
import urllib.request
from cgitb import handler# 需求:使用handler访问百度,获取网页源码# url
url ="http://www.baidu.com"# headers
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0'
}#请求对象定制
request = urllib.request.Request(url=url,headers=headers)# handler build opener open
# 1)获取handler对象
handler = urllib.request.HTTPHandler()
# 2)获取opener对象
opener = urllib.request.build_opener(handler)
# 3)调用open方法
response = opener.open(request)#content
content = response.read().decode('utf-8')
#
print(content)#
二、代理服务器
常用功能:
突破自身访问限制,访问国外站点
访问内网
提高访问速度
隐藏真实IP
# _*_ coding : utf-8 _*_
# @Time : 2025/2/17 09:13
# @Author : 20250206-里奥
# @File : demo02_urllib_代理的基本使用
# @Project : PythonPro17-21import urllib.requestfrom demo01_urllib_handler处理器的基本使用 import request, response, handler, opener# https://www.baidu.com/s?word=ipurl = 'http://www.baidu.com/s?word=ip'headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0'
}#请求对象定制
# request = urllib.request.Request(url=url,headers=headers)#代理IP:以字典形式存在
# 快代理
# 'http':'ip:端口号’
proxies = {'http':'117.42.94.226:19198'
}
# handler buile opener open
# handler
handler = urllib.request.ProxyHandler(proxies = proxies)
#
opener = urllib.request.build_opener(handler)
#
response = opener.open(request)
#模拟浏览器访问服务器
response = urllib.request.urlopen(request)#获取响应内容
content = response.read().decode('utf-8')with open('代理.html','w',encoding='utf-8') as fp:fp.write(content)
三、代理池
# _*_ coding : utf-8 _*_
# @Time : 2025/2/17 09:48
# @Author : 20250206-里奥
# @File : demo03_urllib_代理池
# @Project : PythonPro17-21
from demo02_urllib_代理的基本使用 import proxies# 代理池:使用列表实现# 代理池,随机的特性
proxies_pool = [{'http':'117.42.94.226:19198111'},{'http':'117.42.94.226:19198222'},
]# 使用
# 导入random
import random
proxies = random.choice(proxies_pool)print(proxies)
# _*_ coding : utf-8 _*_
# @Time : 2025/2/17 09:48
# @Author : 20250206-里奥
# @File : demo03_urllib_代理池
# @Project : PythonPro17-21
from demo01_urllib_handler处理器的基本使用 import request, response
from demo02_urllib_代理的基本使用 import proxies, handlerimport urllib.request
# 代理池:使用列表实现# 代理池,随机的特性
proxies_pool = [{'http':'117.42.94.226:19198111'},{'http':'117.42.94.226:19198222'},
]# 使用
# 导入random
import random
# 随机代理
proxies = random.choice(proxies_pool)# print(proxies)url ="http://www.baidu.com"headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0'
}request = urllib.request.Request(url = url,headers=headers)# 要用代理,必须使用handler
handler = urllib.request.ProxyHandler(proxies = proxies)# opener
opener = urllib.request.build_opener(handler)
#
response = opener.open(request)
#获取响应内容
content = response.read().decode('utf-8')# 保存文件到本地
with open('代理池.html','w',encoding='utf-8') as fp:fp.write(content)
四、解析
1. xpath
1)安装插件
文件: xpath.crx
chrome浏览器——更多工具——扩展程序——将xpath.crx文件拖入
安装成功:chrome浏览器,键入:CTRL + shift + X
显示如下小黑框表示安装成功
报错:程序包无效
解决:将.crx文件后缀修改为.zip
2)使用
a. 安装 lxml库
安装路径:与python解释器路径相同
python解释器路径:文件——设置——项目——python解释器
安装方式:
在cmd中安装 lxml库
eg:python解释器路径如下【lxml库 也需安装在该路径下】
安装:安装的库都在script中
cmd——D:——dir——cd SRC——dir ——cd 。。。。。。——直到到达Scipts文件夹下——pip install lxml
查看 lxml库是否安装成功:steps如下
1)新建python文件
2)导入lxml.etree【不报错,则 lxml库 安装成功】
3)解析xpath
有2种文件
1. 解析本地文件
使用etree.parse()
tree = etree.parse('html文件路径')
1)新建html文件
2)新建python文件
# _*_ coding : utf-8 _*_
# @Time : 2025/2/17 12:46
# @Author : 20250206-里奥
# @File : demo05_解析本地文件
# @Project : PythonPro17-21# 导入
from lxml import etree# 解析
tree = etree.parse('本地文件解析测试.html')print(tree)
报错:
原因:开始标签和结束标签不是成对出现
解决:在单标签后加入结束标签
报错解决:
2. 解析服务器响应数据
response.read().decode('utf-8')
使用etree.HTNL()
# _*_ coding : utf-8 _*_
# @Time : 2025/2/17 15:26
# @Author : 20250206-里奥
# @File : demo06_解析_百度一下
# @Project : PythonPro17-21import urllib.request# 1. 获取网页原阿门
# 2. 解析。etree.HTML()
# 3. 打印url = "https://www.baidu.com/"headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0'
}request = urllib.request.Request(url = url,headers=headers)response = urllib.request.urlopen(request)content = response.read().decode('utf-8')# print(content)# 解析网页源码,获取想要的数据
from lxml import etree#解析服务器响应的文件
tree = etree.HTML(content)# 获取想要的数据
# xpath返回值是列表类型的数据
# [0]通过下标访问。只有一个元素
result = tree.xpath('//input[@id = "su"]/@value')[0]print(result)
2. xpath语法
# _*_ coding : utf-8 _*_
# @Time : 2025/2/17 12:46
# @Author : 20250206-里奥
# @File : demo05_解析本地文件
# @Project : PythonPro17-21# 导入
from lxml import etree# 解析
tree = etree.parse('本地文件解析测试.html')# print(tree)# tree.xpath('xpath路径')
# 查找ul下的li
# li_list = tree.xpath('//ul/li')
#
# #判断列表长度
# print(li_list)
# print(len(li_list))# 查找id属性的li标签
# text()获取标签中的内容
# li_list = tree.xpath('//ul/li[@id]/text()')# 查找id为1的li标签,字符串1需要“”包裹
# li_list = tree.xpath('//ul/li[@id = "1"]/text()')# 查询id为1的标签的class属性值
# li_list = tree.xpath('//ul/li[@id = "1"]/@class')# 查询id中包含l的li标签 li标签中哪些id包含1
# li_list = tree.xpath('//ul/li[contains(@id,"1")]/text()')# 查询id值是以1开头的li标签
# li_list = tree.xpath('//ul/li[starts-with(@id,"1")]/text()')# 查询id为111,class为c3的标签
# li_list = tree.xpath('//ul/li[@id = "111" and @class = "c3"]/text()')# 查询id是111,或者class是c1的li标签
li_list = tree.xpath('//ul/li[@id = "111"]/text() | //ul/li[@class = "c1"]/text()')
print(li_list)
print(len(li_list))
1)路径查询
// ——查找所有子孙节点
/ ——查找所有子节点
# tree.xpath('xpath路径')
# 查找ul下的li
# li_list = tree.xpath('//ul/li')
2)谓词查询
[@id]:查找有id属性的标签
# 查找id属性的li标签
# text()获取标签中的内容
# li_list = tree.xpath('//ul/li[@id]/text()')
3)属性查询
# 查找id为1的li标签,字符串1需要“”包裹
# li_list = tree.xpath('//ul/li[@id = "1"]/text()')
# 查询id为1的标签的class属性值
# li_list = tree.xpath('//ul/li[@id = "1"]/@class')
# 查询id中包含l的li标签 li标签中哪些id包含1
# li_list = tree.xpath('//ul/li[contains(@id,"1")]/text()')
4)模糊查询
# 查询id值是以1开头的li标签
# li_list = tree.xpath('//ul/li[starts-with(@id,"1")]/text()')
5)内容查询
text():获取标签中的内容
6)逻辑查询
# 查询id为111,class为c3的标签
# li_list = tree.xpath('//ul/li[@id = "111" and @class = "c3"]/text()')
# 查询id是111,或者class是c1的li标签
li_list = tree.xpath('//ul/li[@id = "111"]/text() | //ul/li[@class = "c1"]/text()')
相关文章:
尚硅谷爬虫note008
一、handler处理器 定制更高级的请求头 # _*_ coding : utf-8 _*_ # Time : 2025/2/17 08:55 # Author : 20250206-里奥 # File : demo01_urllib_handler处理器的基本使用 # Project : PythonPro17-21# 导入 import urllib.request from cgitb import handler# 需求ÿ…...
MongoDB数据导出工具mongoexport
个人博客地址:MongoDB数据导出工具mongoexport | 一张假钞的真实世界 导出示例: $ mongoexport --host 192.168.72.60 --db realtime_statistic_backup --collection all_play_stats_summary --fields "_id.timestamp,total_uv" --type csv …...
机器学习数学基础:29.t检验
t检验学习笔记 一、t检验的定义和用途 t检验是统计学中常用的假设检验方法,主要用于判断样本均值与总体均值间,或两个样本均值间是否存在显著差异。 在实际中应用广泛,例如在医学领域可用于比较两种药物的疗效;在教育领域&…...
Lineageos 22.1(Android 15) 编译隐藏API的 android.jar
一、前言 有时候会我们开发系统应用需要一些系统的方法或者属性之类的,但是被隐藏导致无法正常显示,因为SDK提供的android.jar被隐藏了,所以只能看到sourcecode,实际上编译是会报错的,比如: 一般这种无法是两种,直接添加一个类,同包名同类名,或者依赖framework.jar,可以骗过…...
floodfill算法系列一>扫雷游戏
目录 题目思路:代码设计:代码呈现: 题目思路: 代码设计: 代码呈现: class Solution {int m,n;int[] dx {0,0,-1,1,-1,-1,1,1};int[] dy {-1,1,0,0,-1,1,-1,1};public char[][] updateBoard(char[][] boa…...
2011年下半年软件设计师考试上午题真题的详细知识点分类整理(附真题及答案解析)
以下是针对2011年下半年软件设计师考试上午题真题的详细知识点分类整理,涵盖所有题目涉及的核心知识点,供考生背诵记忆: 1. 数据结构与算法 树与图: 树的性质:树的节点数、深度、叶子节点数之间的关系。二叉树遍历&am…...
算法基础 -- Fenwick树的实现原理
线段树与Fenwick树详解及C语言实现 线段树简介 线段树(Segment Tree)是一种二叉树结构,主要用于在数组修改的同时,快速进行区间查询。常见应用包括区间求和、区间最小值、区间最大值等。 线段树的特点 时间复杂度:…...
萌新学 Python 之集合 set
集合 set:使用一对大括号,元素写在大括号之间,使用逗号分隔 集合中的元素只能是不可变的数据类型,不能是列表、字典和集合 set1 {1, 2, 3} set2 {1, a, (1, 2, 3)} print(type(set1), type(set2)) # <class set> <c…...
(4)ENVI-guide的设置
1 General Settings 打开ENVI-guide,设置你的模拟时间,模拟名称以及输出文件所在位置 注意,选择多核心和单核运行的方式是 1)如果只有一个模拟,并且需要尽快输出,并且运行文件的电脑可以暂时不需要进行其他…...
Golang学习笔记_32——适配器模式
Golang学习笔记_29——抽象工厂模式 Golang学习笔记_30——建造者模式 Golang学习笔记_31——原型模式 文章目录 一、核心概念二、模式结构三、模式特点四、实现方式对比五、适用场景六、与其他模式的对比1. 与装饰器模式2. 与外观模式3. 与创建型模式(工厂/原型&am…...
python知识和项目经验
一些功能的实现 从.py文件中获取函数对象和参数 的字典 在给定的Python脚本中,通过模块导入和反射机制,如何动态获取包含模型函数的模块中的函数及其默认参数,并构建一个字典以便后续使用? 解决方案 test.py # test.py impor…...
【自学笔记】版本控制与持续集成基础知识点总览-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 版本控制与持续集成基础知识点总览版本控制(Version Control)1. 版本控制简介2. 常用版本控制系统3. Git基础4. Git进阶 持续集成࿰…...
云平台结合DeepSeek的AI模型优化实践:技术突破与应用革新
目录 前言 一、技术架构:算力与算法的协同基石 1. 蓝耘平台的核心优势 2. DeepSeek的模型创新 二、应用场景:垂直领域的智能化落地 1. 商业领域:智能推荐与客服 2. 工业领域:质检与流程优化 3. 智慧城市与医…...
DockerFile优化镜像体积
title: DockerFile优化镜像体积 date: 2025-02-15 15:22:40 tags: DockerFile优化镜像体积DockerFile优化镜像体积 DockerFile优化镜像体积前文回顾:一、细数优化镜像体积的思路与方式二、优化Dockfile文件编辑 Dockerfile2文件三、构建镜像四、运行镜像五、查看运行效果原文 …...
WeMos D1+PIR+Android 的小场景制作
最近在做一个有趣的小场景功能,其实已经有成熟产品,但是考虑到没法实现场景扩展,所以自己开始动手做。 场景描述:玄关人体感应,有人进门,致欢迎词,有人离开,致欢送词。 硬件设备&a…...
实现pytorch注意力机制-one demo
主要组成部分: 1. 定义注意力层: 定义一个Attention_Layer类,接受两个参数:hidden_dim(隐藏层维度)和is_bi_rnn(是否是双向RNN)。 2. 定义前向传播: 定义了注意力层的…...
使用循环队列来接收串口信息--以stm32f103为例
一、引言 在stm32中,一般采用的是通过数组来接收串口信息,但是由于受到数组大小的限制,易出现数据覆盖或者数据溢出问题。针对上述问题,采用循环队列的方式来接收串口信息,循环队列可以动态管理缓冲区并且当队列满时&a…...
代码随想录D50-51 图论 Python
理论基础 理论基础部分依然沿用代码随想录教程中的介绍: 图的种类 度 连通性 连通性用于表示图中节点的连通情况。 如果有节点不能到达其他节点,则为非连通图,想象将多个水分子表示为图,不考虑非键作用,这张图就不是…...
大幂计算和大阶乘计算【C语言】
大幂计算: #include<stdio.h> long long int c[1000000]{0}; int main() {long long a,b,x1;c[0]1;printf("请输入底数:");scanf("%lld",&a);printf("请输入指数:");scanf("%lld",&b…...
段错误 (核心已转储)
struct Addressbooks {struct Person personArray[MAX];int m_Size; // 当前已用大小 };void addPerson(Addressbooks *abs) {// 开始添加操作string name;cout << "输入姓名:";cin >> name;// 下面这句话执行后就报:段错误 (核心…...
Leetcode 227-基本计算器 II
题解 本题不包含括号,比较简单 双栈法(运算符栈数字栈) 对于「任何表达式」而言,可以都使用两个栈 nums 和 ops(本题只用到了nums): nums : 存放所有的数字 ops :存放…...
springcloudalibaba组件gateway
Spring Cloud Alibaba 组件中的 Gateway 是一个基于 Spring Cloud Gateway 实现的 API 网关,它专为微服务架构提供简单且有效的 API 路由管理方式。以下是对 Spring Cloud Alibaba Gateway 的详细介绍: 一、基本概念 API 网关:作为系统的统…...
MongoDB副本集
副本集架构 对于mongodb来说,数据库高可用是通过副本集架构实现的,一个副本集由一个主节点和若干个从节点所组成。 客户端通过数据库主节点写入数据后,由从节点进行复制同步,这样所有从节点都会拥有这些业务数据的副本࿰…...
LeetCode-680. 验证回文串 II
1、题目描述: 给你一个字符串 s,最多 可以从中删除一个字符。 请你判断 s 是否能成为回文字符串:如果能,返回 true ;否则,返回 false 。 示例 1: 输入:s "aba" 输出&a…...
国产编辑器EverEdit - “切换文件类型”的使用场景
1 “切换文件类型”的使用场景 1.1 应用背景 一般的编辑器都是通过扩展名映射到对应的语法高亮规则的,比如:文件test.xml中的扩展名“xml"对应XML的语法高亮,在编辑器中打开test.xml就会给不同标识符显示不同的颜色。 但有时一些应用程…...
AIP-146 泛化域
编号146原文链接AIP-146: Generic fields状态批准创建日期2019-05-28更新日期2019-05-28 API中的大多数域,无论是在请求、资源还是自定义应答中,都有具体的类型或模式。这个模式是约定的一部分,开发者依此约定进行编码。 然而,偶…...
C++11 thread
文章目录 C11 线程库线程对象的构造方式无参的构造函数调用带参的构造函数调用移动构造函数thread常用成员函数 this_thread命名空间join && detachmutex C11 线程库 线程对象的构造方式 无参的构造函数 1、调用无参的构造函数,调用无参的构造函数创建出来的线程对象…...
重生之我在异世界学编程之C语言:深入预处理篇(上)
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一、预处理的作用与流程…...
Java并发编程5--Java内存模型的基础
1.并发编程模型的两个关键问题 在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。 通信是指线程之间以何种机制来交换信息。 在命令式编程中,线程之间的通…...
国密算法SM1、SM2、SM3和SM4 具体的使用和区别
国密算法是中国自主研发的密码算法,包括SM1、SM2、SM3和SM4,分别用于不同场景。以下是它们的具体使用和区别: SM1 对称加密算法 类型: 对称加密 密钥长度: 128位 使用场景: 用于数据加密和解密,适用于金融、政务等领域。 特点: …...
package.json的全面详解
在 Node.js 的世界里,package.json 文件占据着举足轻重的地位。它就像项目的“大脑”,掌控着项目的各种信息和依赖管理。下面,我们就深入剖析 package.json 文件,让你全面了解它的奥秘。 一、创建 package.json 在正式开始使用 …...
Linux、Docker与Redis核心知识点与常用命令速查手册
Linux、Docker与Redis核心知识点与常用命令速查手册 一、Linux基础核心 1. 核心概念 文件系统:采用树形结构,根目录为/权限机制:rwx(读/写/执行)权限,用户分为owner/group/others软件包管理: …...
通过TDE工业通讯网关解决设备通讯问题
设备通讯现状 在现代工业环境中,设备的通讯已成为提高生产效率和实现智能化管理的关键。随着工业4.0时代的到来,越来越多的智能设备被投入到生产运营中,这些设备通过集成特定的通信模块,形成了各自独立的自组网子系统。然而&…...
CI/CD(二)docker-compose安装Jenkins
1、docker-compose.yml version: 3.8services:jenkins:image: jenkins/jenkins:lts # 使用官方的 Jenkins LTS 镜像container_name: jenkinsuser: root # 如果需要以 root 用户运行ports:- "8080:8080" # Jenkins Web 界面端口- "50000:50000" # 用于 Jen…...
Linux操作系统3-文件与IO操作5(动态库与静态库的建立与加载)
上篇文章:Linux操作系统3-文件与IO操作4(软硬链接的建立与使用, 文件的三种时间)-CSDN博客 本篇代码Gitee仓库:myLerningCode/l21 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 本篇重点:动态库与静态库 目录 一. 静…...
同步异步日志系统-日志器的实现
该模块是针对于前几个模块的整合,也是直接面向客户所使用的,对于该模块的实现,我们基于:继承建造者设计模式来实现; 因此我们需要抽象出一个日志器抽象基类; 该基类提供的接口如下: 1、 debug();//站在用户的角度来说就是我只需要…...
webpack 项目优化(一)
一、构建速度优化 缩小文件处理范围 module: {rules: [{test: /\.js$/,exclude: /node_modules/, // 排除第三方库include: path.resolve(__dirname, src), // 限定处理范围use: babel-loader}] }利用缓存 Webpack 5 内置持久化缓存(直接配置)࿱…...
【撰写技巧】基金项目撰写跟踪交流会
基金申请书撰写完成后,提交前的审查是一个非常关键的步骤,这决定了你提交的材料是否符合要求,是否具备足够的说服力,以及是否能够通过专家评审。审查主要可以分为自我审查和团队审查两个层面。以下是基金申请书审查的主要内容和注…...
vue学习笔记
结合目录,点击阅读 文章目录 案例1:第一行vue代码App.vue引入Person.vue案例:改变变量的值案例:改变对象属性值案例:toRefs进行解包案例:给名字首字母大写案例:监视变量值的变化案例࿱…...
前端构建工具——Webpack和Vite的主要区别
目录 1. 设计理念2. 性能表现3. 使用场景4. 配置复杂度5. 生态系统6. 性能对比总结7. 选择建议 1. 设计理念 Webpack 设计理念:Webpack是一个通用的模块打包工具,它将项目中的各种资源(如JavaScript、CSS、图片等)视为模块&…...
Letsencrypt+certbot为域名免费配置ssl
1、基础概念 Let’s Encrypt 是一个提供免费 SSL/TLS 证书的认证机构,它的目标是让互联网上的通信更加安全,特别是普及 HTTPS。通过 Let’s Encrypt 提供的证书,网站可以使用加密连接,保护用户的数据传输。 Certbot 是一个由电子…...
达梦数据库针对慢SQL,收集统计信息清除执行计划缓存
前言:若遇到以下场景,大概率是SQL走错了执行计划: 1、一条SQL在页面上查询特别慢,但拿到数据库终端执行特别快 2、一条SQL在某种检索条件下查询特别慢,但拿到数据库终端执行特别快 此时,可以尝试按照下述步…...
IDEA通过Contince接入Deepseek
Deepseek 的出色表现,上期【Deepseek得两种访问方式与本地部署】 安装Continue插件 第一步、下载插件 在编辑栏【File】->设置【Settiings】或快捷键【CtrlAltS】,弹窗的左侧导航树,选择【plugins】,在marketplace 搜索【Continue】,点…...
Windows 10 ARM工控主板CAN总线实时性能测试
在常规的Windows系统中支持CAN总线应用,需要外接CAN总线适配器,通常为USB转CAN模块或PCI接口CAN卡。实时性本身是CAN总线的显著特性之一,但由于Windows并非实时操作系统,应用程序容易受到系统CPU负载影响,导致调度周期…...
深入理解无锁队列与C++原子操作
文章目录 深入理解无锁队列与C原子操作引言原子操作基础什么是原子操作?内存顺序(Memory Order) 无锁队列实现环形缓冲区队列(单生产者/单消费者)链表式无锁队列(多生产者/多消费者) 关键问题与…...
OpenGL: QOpenGLShaderProgram
一、QOpenGLShaderProgram 编译过程的封装 1、bool addShaderFromSourceCode(QGLShader::ShaderType type, const char * source); 2、bool addShaderFromSourceFile(QGLShader::ShaderType type, const QString & fileName); 3、virtual bool link(); 4、bool bind(); 5、…...
【网络编程】之数据链路层
【网络编程】之数据链路层 数据链路层基本介绍基本功能常见协议 以太网什么是以太网以太网协议帧格式数据链路层的以太网帧报文如何封装/解封装以及分用以太网通信原理传统的以太网与集线器现代以太网与交换机碰撞域的概念 Mac地址基本概念为什么要使用Mac地址而不是使用IP地址…...
HTTP 和 TCP/IP-傻傻分不清
HTTP 和 TCP/IP 是计算机网络中不同层次的协议,它们的核心区别在于功能和所属的网络层次。以下是详细对比: 1. 所属网络层次 TCP/IP 定位:TCP/IP 是一个协议族(包含多个协议),涵盖网络通信的传输层和网络层…...
【SQL】SQL约束
🎄约束 📢作用:是用于限制存储再表中的数据。可以再创建表/修改表时添加约束。 📢目的:保证数据库中数据的正确、有效性和完整性。 📢对于一个字段可以同时添加多个约束。 🎄常用约束: 约束分类 约束 描述关键字非…...
【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑧】
ISO 14229-1:2023 UDS诊断【ECU复位0x11服务】_TestCase08 作者:车端域控测试工程师 更新日期:2025年02月17日 关键词:UDS诊断协议、ECU复位服务、0x11服务、ISO 14229-1:2023 TC11-008测试用例 用例ID测试场景验证要点参考条款预期结果TC…...