版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章验证码识别《Python网络爬虫基础教程》学习目标/Target掌握字符验证码的识别方法,能够使用pytesseract识别字符验证码熟悉滑动拼图验证码的识别方法,能够使用Selenium识别滑动拼图验证码熟悉点选验证码的识别方法,能够使用Selenium结合超级鹰平台识别点选验证码章节概述/Summary随着网络爬虫技术的普及,越来越多的网站为保护数据安全、防止被恶意爬取,纷纷加入各类防爬虫措施,验证码便是其中应用极为广泛的一种。验证码的形式多样,既包括数字与字母组合的字符型验证码,也包括滑动拼图验证码、点选验证码等。网络爬虫必须突破这些验证码的限制才能继续执行任务,这无疑为自动化程序的顺畅运行带来了显著挑战。本章将对验证码识别的相关知识进行介绍。目录/Contents8.18.2字符验证码的识别滑动拼图验证码的识别8.3点选验证码的识别8.4实践项目:登录黑马头条后台管理系统字符验证码的识别8.1掌握字符验证码的识别方法,能够使用pytesseract实现识别字符验证码学习目标8.1字符验证码的识别字符验证码是一种基础的人机验证技术,通过生成包含随机数字、字母及其组合的图片来实现身份验证。为提高安全性,这些图片通常会添加多种干扰元素,包括扭曲变形的字符、随机干扰线条、散列噪点以及复杂背景等。用户需要正确识别并输入图片中的字符才能完成验证,从而获得登录或提交信息等网站功能的访问权限。字符验证码如图所示。8.1字符验证码的识别与基于用户行为的验证码相比,字符验证码的识别难度相对较低,核心是通过字符识别技术提取图片中的字符信息,其中最常用的技术便是OCR(OpticalCharacterRecognition,光学字符识别)。OCR通过电子设备扫描纸质或图像中的字符,检测其明暗像素模式以确定字符形状,再通过识别算法将形状转换为计算机可识别的文字。8.1字符验证码的识别Python中实现基于OCR的字符验证码识别,主要有两种方式:开源的Tesseract-OCR引擎(由谷歌开发并维护)和第三方平台提供的OCR接口(如腾讯OCR、百度OCR等)。下面分别为大家介绍Tesseract-OCR和百度OCR。8.1字符验证码的识别Tesseract-OCR是一个光学字符识别引擎,支持多种操作系统,具有精准度高、灵活性高等特点。它通过训练不仅可以识别出任何字体(只要字体的风格保持不变即可),而且可以识别出任何Unicode字符。下面分别对Tesseract-OCR的安装与配置、Tesseract-OCR的使用进行介绍。8.1字符验证码的识别1.Tesseract-OCRTesseract-OCR的安装与配置下面以Windows10操作系统为例,演示安装与配置Tesseract-OCR的过程。8.1字符验证码的识别1.Tesseract-OCR步骤1步骤2步骤3步骤4进入安装页面双击本书配套的安装包tesseract-ocr-w64-setup-0241111.exe,选择语言为英文,进入WelcometoTesseract-OCRSetup界面,如图所示。8.1字符验证码的识别步骤2步骤1步骤3步骤4进入LicenseAgreement界面单击“Next”按钮,进入LicenseAgreement界面,如图所示。8.1字符验证码的识别步骤3步骤1步骤2步骤4进入ChooseUsers界面在LicenseAgreement界面单击IAgree按钮,进入ChooseUsers界面。8.1字符验证码的识别步骤4步骤1步骤2步骤3进入ChooseComponents界面在ChooseUser界面保持默认配置,单击Next按钮,进入ChooseComponents界面。8.1字符验证码的识别步骤5步骤6步骤7步骤8进入ChooseInstallLocation界面在ChooseUsers界面保持默认配置,单击Next按钮,进入ChooseInstallLocation界面。8.1字符验证码的识别步骤6步骤5步骤7步骤8进入ChooseStartMenuFolder界面单击ChooseInstallLocation界面的Next按钮,进入ChooseStartMenuFolder界面。8.1字符验证码的识别步骤7步骤5步骤6步骤8进入InstallationComplete界面单击ChooseStartMenuFolder界面”Install”按钮,进入InstallationComplete界面。8.1字符验证码的识别步骤8步骤5步骤6步骤7进入CompletingTesseract-OCRSetup界面单击InstallationComplete界面Next按钮,进入CompletingTesseract-OCRSetup界面。8.1字符验证码的识别步骤9步骤10添加到环境变量Tesseract-OCR安装完成之后,还需要将Tesseract-OCR的安装目录和语言包配置到环境变量中。8.1字符验证码的识别步骤9步骤10查看当前Tesseract-OCR的版本号通过在命令行窗口中输入tesseract-v命令,可以查看当前Tesseract-OCR的版本号,以验证环境变量是否配置成功。8.1字符验证码的识别Tesseract-OCR的使用为了能够调用Tesseract-OCR引擎识别字符验证码,Python中提供了pytesseract和Pillow两个库,其中pytesseract是对Tesseract-OCR的一层封装,可以单独作为Tesseract-OCR引擎的调用脚本;Pillow是基于PIL库的一个派生分支,已经发展成为比PIL本身更具活力的图像处理库。8.1字符验证码的识别pytesseract和Pillow都是第三方库,需要通过pip工具安装到当前环境中,具体安装命令如下。pipinstallpytesseract==0.3.13pipinstallPillow==11.2.1若要使用Tesseract-OCR识别字符验证码,一般分为以下两个步骤。①使用Pillow.Image模块调用open()函数加载图像文件,生成图像对象。②使用pytesseract库调用image_to_string()函数对图像对象进行Tesseract-OCR识别,并将识别后的结果以字符串形式返回。8.1字符验证码的识别为了帮助大家更好地理解,接下来,通过一个示例演示如何使用pytesseract和Pillow库识别字符验证码。字符验证码的图片如图所示。8.1字符验证码的识别首先导入pytesseract库和Pillow.Image模块,然后通过open()函数加载图像文件,最后使用image_to_string()函数将识别结果转换为字符串并输出,具体代码如下。fromPILimportImage#导入Pillow库中的Image类frompytesseractimportpytesseract#加载验证码的图像文件image=Image.open('W549.png')#对图像文件进行识别,并将识别结果以字符串形式返回text=pytesseract.image_to_string(image)print(text)8.1字符验证码的识别通常情况下,网页上的字符验证码中存在许多干扰线和噪点,因此在未训练的情况下使用Tesseract-OCR的识别效果并不理想。这时可以使用百度OCR识别带有一些干扰元素的字符验证码。在使用百度OCR之前,我们需要先在百度AI开放平台注册应用。下面分别为大家介绍注册应用和使用百度OCR。2.百度OCR8.1字符验证码的识别(1)注册应用。首先,使用百度账号登录百度AI开放平台首页,在该页面顶部的菜单栏中选择“开放能力”→“文字识别”→“通用文字识别”。8.1字符验证码的识别选择后会跳转到通用文字识别页面,在该页面中单击“立即使用”按钮,登录百度账号,进入“百度智能云控制台”页面,如图所示。8.1字符验证码的识别单击百度智能云控制台页面中的“去创建”,弹出创建新应用的面板,在该面板中根据要求填写新应用的必选项,包括应用名称、应用描述、选择服务接口等。填写完成后,单击面板底部的“立即创建”按钮,可以看到创建成功的提示信息。此时,单击面板底部的“查看应用详情”按钮进入应用详情页面,如图所示。8.1字符验证码的识别(2)使用百度OCR。在使用百度OCR开发程序之前,我们需要查看平台提供的API文档。单击“应用详情页”中右上方的“查看文档”打开“文字识别-百度智能云”页面,在该页面左侧菜单中选择“API文档”→“通用场景文字识别”→“通用文字识别(高精度版)”,跳转至通用文字识别(高精度版)的API文档页面。在该页面中滑动至请求代码示例部分,选择查看Python示例,具体如图所示。8.1字符验证码的识别接下来,以一个字符验证码图片为例,按照Python示例编写代码,识别图片中的字符。字符验证码的图片如图所示。8.1字符验证码的识别复制Python示例代码,对代码中的APIKey、SecretKey、图片地址或Base64信息进行替换,改后的代码如下。importrequestsimportbase64request_url="/rest/2.0/ocr/v1/accurate_basic"#二进制方式打开图片文件f=open('dfn5.jpg','rb')img=base64.b64encode(f.read())params={"image":img}access_token='此处填写根据APIKey和SecretKey生成的token'request_url=request_url+"?access_token="+access_tokenheaders={'content-type':'application/x-www-form-urlencoded'}response=requests.post(request_url,data=params,headers=headers)ifresponse:print(response.json())8.1字符验证码的识别滑动拼图验证码的识别8.2熟悉滑动拼图验证码的识别方法,能够使用Selenium识别滑动拼图验证码学习目标8.2滑动拼图验证码的识别滑动拼图验证码是一种常见的交互式验证码,主要用于区分人类用户和自动化程序。它通常提供一张带有缺口的背景图片和一个与缺口形状匹配的拼图滑块,要求用户通过鼠标将滑块拖动到背景图片的缺口位置,完成拼图对齐才能通过验证。滑动拼图验证码如图所示。8.2滑动拼图验证码的识别滑动拼图验证码主要由5部分组成,分别是抠图、滑动、缺口、背景图片、滑轨,其中抠图和缺口的的形状是随机的,缺口的位置是随机的,这意味着用户滑动滑动的距离也是随机的。对于网络爬虫开发者而言,滑动拼图验证码的识别是一个包含多重技术挑战的复杂过程。这类验证码不仅要求准确识别缺口位置并计算滑块偏移量,更需要精细模拟人类操作行为,包括自然的速度变化、合理的停顿点等行为特征,以规避网站的防爬虫措施。Python中实现滑动拼图验证码识别的基本流程可以分为5步。8.2滑动拼图验证码的识别(1)获取包含缺口和不包含缺口的背景图片为了能准确定位背景图中缺口的位置,需要获取完整的背景图作为参照物进行差异比对,具体获取步骤:首先使用自动化工具加载验证码页面,触发背景图的完整加载;然后分别提取两张关键图像,分别是有缺口的当前验证码背景图和没有缺口的完整背景图。获取关键图像后,有时需进行预处理以提升比对精度,例如,将图像转换为灰度图以减少颜色干扰,通过边缘检测增强缺口轮廓特征等,为后续的偏移量计算做好准备。8.2滑动拼图验证码的识别(2)计算滑块的偏移量通过图片比对分析两张背景图的差异,定位缺口在背景图中的具体位置,具体步骤:首先对两张背景图进行像素级差分处理,通过计算绝对差异初步确定可能存在缺口的区域范围;然后使用特征点匹配等方法,在差异区域内精确定位缺口的边缘轮廓和几何中心位置;最后根据缺口坐标计算滑块需要移动的水平距离。8.2滑动拼图验证码的识别(3)生成滑动轨迹根据计算得出的偏移量,需模拟人类拖动滑块的自然操作轨迹。若采用简单的匀速直线移动,极易被网站判定为机器行为,因此必须复刻人类操作的特征。轨迹应包含符合生理习惯的加速度变化,初始阶段缓慢加速,中间过程保持近似匀速,接近目标位置时逐渐减速,总滑动时间需控制在1~3秒的合理区间。通过这种贴近真实用户行为的轨迹设计,能够有效绕过网站的机器行为检测机制,提升验证成功率。8.2滑动拼图验证码的识别(4)模拟滑块滑动使用自动化工具定位到滑块,按照生成的轨迹控制鼠标逐步拖动滑块,在移动过程中需要实时同步轨迹的坐标变化,确保滑块严格按照预设轨迹完成从起点到目标位置的滑动。(5)验证抠图与缺口位置是否重合滑块到达目标位置后,等待系统进行验证并返回验证结果。若系统判定抠图与缺口位置完全重合,即验证成功,则继续后续操作;若验证失败,比如轨迹被识别为机器行为、位置偏差过大,则需重新获取滑动拼图验证码,重复上述步骤再次尝试,直至验证通过。8.2滑动拼图验证码的识别点选验证码的识别8.3熟悉点选验证码的识别方法,能够使用Selenium结合超级鹰平台识别点选验证码学习目标8.3点选验证码的识别点选验证码是根据验证码弹窗中的文字描述,按顺序单击图片中与文字描述相符的文字完成验证。8.3点选验证码的识别点选验证码的识别多通过机器学习、深度学习以及第三方平台来实现。前两者需要我们分别掌握机器学习和深度学习相关知识,而第三方平台可以在我们不了解机器学习和深度学习相关知识的情况下,快速实现点选验证码的识别。因此,我们在这里借助于第三方平台超级鹰识别点选验证码。8.3点选验证码的识别需要注意的是,识别点选验证码的第三方平台有很多,在这里我们选择的超级鹰仅用于本案例的演示,请大家谨慎购买或使用。点选验证码的识别流程大致可以分为如下4步。注册账号截取验证码使用超级鹰识别单击验证码文字注册超级鹰账号使用超级鹰识别点选验证码的文字截取点选验证码图片使用Selenium单击验证码中的文字8.3点选验证码的识别以极验验证码官网的点选验证码为例,演示如何使用第三方平台超级鹰和Selenium识别点选验证码。8.3点选验证码的识别1.注册超级鹰账号(1)在浏览器中访问超级鹰官网,具体如图所示。8.1.3点选验证码的识别(2)单击“用户注册”按钮进行注册,完成账号注册之后,可在用户中心查看账号信息,关注官方公众号即可领取1000题分,获取题分后便能解锁验证码识别功能。用户中心页面如图所示。8.1.3点选验证码的识别(3)在用户中心页面的功能列表中选择“软件ID”打开软件ID页面,单击该页面上的“生成一个软件ID”链接,会看到对接超级鹰平台API需要使用的软件KEY。生成的软件KEY如图所示。8.1.3点选验证码的识别(4)超级鹰平台提供了多种开发语言的API文档。在这里,我们选择Python语言的SDK示例。在”生成的软件KEY”的页面中,单击顶部的“开发文档”菜单进入超级鹰开发文档的页面,在该页面的名语言SDK参考源代码部分选择Python语言进入Python语言Demo下载页面,如图所示。8.1.3点选验证码的识别单击“Demo下载页面”中的“点击这里下载”链接,即可将保护SDK示例的压缩包Chaojiying_Python.rar下载至本地。将Chaojiying_Python.rar压缩包解压缩后,可以看到chaojiying_Python文件夹包含了chaojiying.py文件,该文件封装了识别验证码的功能。8.1.3点选验证码的识别在PyCharm中打开解压缩后的chaojiying.py文件,可以发现对接Python语言的SDK是Python2。在这里,我们需要对main语句进行注释,避免chaojiying.py文件执行后报错。8.1.3点选验证码的识别在chaojiying.py文件中定义了一个Chaojiying类,该类中包含了3个方法,分别是__init__()、PostPic()和ReportError(),关于它们的介绍如下。__init__()方法用于初始化Chaojiying_Client类。使用该方法需要接收3个参数username、password和soft_id,分别表示超级鹰平台的用户名、密码以及软件ID。PostPic()方法用于将图片对象和相关信息发送给超级鹰后台进行识别,再将识别的结果以JSON格式返回。该方法需要接收两个参数im,codetype,分别表示图片对象和验证码类型代号。ReportError()方法用于处理当发生错误的时候进行回调。如果验证码识别错误,调用此方法会返回相应题分。8.1.3点选验证码的识别[单击查看源码]2.截取点选验证码图片由于Chaojiying类的PostPic()方法需要接收一个图片对象,所以我们需要将极验验证码官网的点选验证码下载到本地。在这里,我们可以使用Selenium访问极验验证码官网,找到点选验证码后进行截图,这样就可以获取点选验证码图片。在编写代码之前,我们需要了解使用Selenium操作浏览器弹出点选验证码弹出框的过程,具体如图所示。8.1.3点选验证码的识别在使用Selenium截取点选验证码时,我们需要截取点选验证码的完整图片。在点选验证码弹框上右击,在弹出的快捷菜单中选择“检查”,即可打开开发者工具的元素面板,进而在面板中定位到点选验证码对应的代码。注意,弹框内元素众多,右键检查后可能无法直接定位到正确代码,此时我们可以在元素面板移动鼠标验证:当鼠标悬停在某行代码上时,若网页中点选验证码弹框被整体高亮选中,说明这行代码就是弹框的代码。8.1.3点选验证码的识别运行程序后发现,程序所在的目录下生成了captcha.png,打开该文件后的效果如图所示。8.1.3点选验证码的识别3.使用超级鹰识别点选验证码的文字获取点选验证码图片后,需要将该图片发送到超级鹰后台进行识别。超级鹰平台会将识别后的文字、坐标等信息以JSON格式返回。下面是超级鹰平台识别点选验证码上4个文字后返回的结果。{'err_no':0,'err_str':'OK','pic_id':'1151511476469800104','pic_str':'67,108|153,105|253,36','md5':'d9a30a1a11ec6f4e214d2448d7f36c10'}8.1.3点选验证码的识别在上述结果中,pic_str对应的值67,108|153,105|253,36是3个文字的坐标信息,坐标信息的格式是x,y|x,y|x,y,每个字的坐标使用竖线分隔。为了便于后期获取每个字的x值和y值,需要对坐标信息进行调整,使坐标信息转换为形如[[x,y],[x,y],[x,y]]的二维数组,转换后的结果如下。[[67,108],[153,105],[253,36]]定义一个dock_chaojiying()方法,在该方法中根据自己的账号、密码和软件ID对接超级鹰平台,保存超级鹰平台返回的JSON格式的数据,之后将这些数据转换为形如[[x,y],[x,y],[x,y],[x,y]]的二维数组,具体代码如下。defdock_chaojiying(self):chaojiying=Chaojiying_Client('超级鹰账号','超级鹰密码','软件ID')#对接超级鹰,填写账号、密码、软件idim=open('yzm.png','rb').read()
result=chaojiying.PostPic(im,9004)#保存超级鹰平台返回的JSON格式的数据
coordinates=result.get('pic_str').split('|')#提取文字坐标信息locations=[[int(number)fornumberincoordinate.split(',')]#将坐标形式转换成[[x,y],[x,y]]forcoordinateincoordinates]returnlocations8.1.3点选验证码的识别4.使用Seleniu单击验证码中的文字有了验证码图片上每个文字的坐标信息之后,可以使用Selenium模拟用户根据坐标信息依次点击文字的行为。defsimulated_click(self):self.get_image()#获取点选验证码弹出框的截图#显式等待点选验证码弹出框加载
img=WebDriverWait(self.driver,20).until(EC.visibility_of_element_located((By.XPATH,'//div[@id="captcha"]/div[2]/div/div[4]/div[1]')))locations=self.dock_chaojiying()#获取点选验证码弹出框中所有文字的坐标#移动鼠标到每个文字的位置后逐个单击
forlocationinlocations:ActionChains(self.driver).move_to_element_with_offset(img,location[0],location[1]).click().perform()#定位到“确定”按钮并单击
self.driver.find_element(By.XPATH,"//div[contains(@class,'geetest_submit_tips')]").click()time.sleep(3)#等待3秒确认是否单击成功self.driver.quit()8.1.3点选验证码的识别在main语句中,创建ClickVerificationCode类的对象click_verification,并调用simulated_click()方法识别点选验证码。if__name__=='__main__':click_verification=ClickVerificationCode()click_verification.simulated_click()8.1.3点选验证码的识别[单击查看源码]实践项目:登录黑马头条后台管理系统8.4黑马头条后台管理系统是传智教育项目库的动手实践项目,该项目包含用户登录、首页、用户管理等多个模块。其中,用户登录模块主要负责处理用户登录与验证的逻辑,并通过一个滑动拼图验证码辨别用户行为。在本节中,我们将运用前面所学的知识开发一个完整的网络爬虫项目,用于识别黑马头条后台管理系统登录页面的滑动拼图验证码,并在识别成功后登录黑马头条后台管理系统的首页。8.2实践项目:登录黑马头条后台管理系统项目需求黑马头条后台管理系统的登录流程如右图所示。8.2实践项目:登录黑马头条后台管理系统项目目标第1张图是黑马头条后台管理系统的用户登录窗口,该窗口的文本框中默认填写了用户名和密码,且登录按钮呈不可用状态;单击用户登录窗口的“输入用户名点击获取验证码”按钮,该按钮下方又出现一个“点击按钮进行验证”按钮;单击“点击按钮进行验证”按钮打开滑动拼图验证码弹框,在该弹框中向右滑动滑块,直到抠图与缺口重合后松开滑块,这时滑动拼图验证码弹框自动关闭,并跳转回用户登录窗口;在用户登录窗口中,“点击按钮进行验证”按钮变为“验证成功”的提示信息,此时登录按钮呈可用状态;单击用户登录窗口中的“登录”按钮进入黑马头条后台管理系统首页。黑马头条后台管理系统的登录步骤如下所示。8.2实践项目:登录黑马头条后台管理系统项目目标8.2实践项目:登录黑马头条后台管理系统项目分析根据项目目标可知,本项目的主要功能是识别滑动拼图验证码。识别滑动拼图验证码一般分为5步,它们分别是获取包含缺口和不包含缺口的背景图片、计算滑块的偏移量、生成滑动轨迹、使用Selenium模拟滑块滑动和验证抠图与缺口位置是否重合。关于每个步骤的分析具体如下。8.2实践项目:登录黑马头条后台管理系统项目分析1.获取包含缺口和不包含缺口的背景图片当用户滑动滑块时抠图会跟随滑块一起移动,一旦抠图与缺口的位置重合,便可以停止滑动滑块。由此可知,滑块的偏移量是跟缺口位置有关的。每张滑动拼图验证码图片中缺口所在的位置是随机的。为了能确定缺口的位置,我们可以获取一张包含缺口的背景图片和一张不包含缺口的背景图片,如图所示。左图中心位置显示了一个深灰色、透明的缺口,而右图中心位置没有缺口。8.2实践项目:登录黑马头条后台管理系统项目分析2.计算滑块的偏移量对比包含缺口和不包含缺口的背景图片可知,缺口所在区域的颜色值存在一定的差距。因此,我们可以设定一个颜色值误差范围,一旦背景图片中某个像素点的颜色值超过误差范围,就将该像素点的x值作为滑块的偏移量。计算滑块偏移量的示意图如图所示。8.2实践项目:登录黑马头条后台管理系统项目分析3.生成滑动轨迹由于滑动拼图验证码会对滑块的滑动轨迹进行验证,以辨别当前用户是否为非人类用户,所以我们需要模拟用户滑动滑块的轨迹。通常情况下,用户滑动滑块的速度是先快后慢的。当抠图距离缺口的位置较远时,用户会快速滑动滑块一段距离;当抠图距离缺口的位置较近时,用户会慢速滑动滑块,直至抠图与缺口完全重合。为帮助开发者生成模拟用户滑动滑块的轨迹,我们可以借用jquery.easing.js插件。jquery.easing.js是一款jQuery动画效果插件,使用该插件可以实现丰富的动画效果,如匀速直线运动、变加速运动、缓冲等。8.2实践项目:登录黑马头条后台管理系统项目分析4.使用Selenium模拟滑块滑动我们在前面已经得出滑块偏移量和滑动轨迹。现在,我们可以使用Selenium定位到滑块所在的位置,按照生成的滑动轨迹滑动滑块,并滑动至偏移量指定的距离。5.验证抠图与缺口位置是否重合用户未通过验证前,登录窗口中的“登录”按钮为不可用状态;用户通过验证后,“登录”按钮变为可用状态,因此我们可以将“登录”按钮的状态作为判断验证是否通过的标志。“登录”按钮可用,说明用户通过验证,这时我们单击“登录”按钮可以进入黑马头条后台管理系统的首页页面。1.获取包含缺口和不包含缺口的背景图片(1)导入程序中需要用到的所有模块,定义一个网络爬虫类HeiMaTouTiao,在该类的构造函数中定义两个分别表示URL地址、浏览器驱动器的属性url和driver,以及调用maximize_window()方法设置浏览器窗口最大化。(2)在HeiMaTouTiao类中定义login()方法,在该方法中分别定位到“输入用户名点击获取验证码”和“点击按钮进行验证”按钮对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北方工业大学《遇见朗读者》2025-2026学年第一学期期末试卷(A卷)
- 北方工业大学《英美文学》2025-2026学年第一学期期末试卷(A卷)
- 矿业废弃物再循环技术
- 北方工业大学《青草药识别》2025-2026学年第一学期期末试卷(A卷)
- 2026届山东省枣庄市高三3月份第一次模拟考试化学试卷(含答案解析)
- 2026年湖北省十堰市高三压轴卷化学试卷(含答案解析)
- 园林绿化工岗前安全检查考核试卷含答案
- 玻璃配料工岗前基础能力考核试卷含答案
- 电器附件零部件制造工岗前工作质量考核试卷含答案
- 综采集控工7S执行考核试卷含答案
- 医疗器械检验与检测指南
- 【新教材】北师大版(2024)八年级下册生物期末复习全册知识点考点提纲
- 2025国家电投集团广东电力有限公司财务管理干部岗位招聘3人笔试历年典型考点题库附带答案详解
- 肥料、农药采购服务投标方案技术标
- 第二类精神药品临床应用管理规范
- 破产管理人培训
- 2025社保知识大全
- 第四单元第13课羊字头(课件)书法北师大版四年级上册
- 分数加减法-基于教学评一体化的大单元整体教学设计
- 污水排放承诺书
- 2026年生态环境保护法专业知识测试题
评论
0/150
提交评论