目录
一、概念知识
(一)三大核心组件
(三)Selenium 支持的操作
总结
二、实操例子
使用前提--安装步骤
注意事项
(一)浏览器的操作
1.打开谷歌浏览器
2.浏览器窗口最大化
3.设置浏览器的宽高
4.打开新窗口(不会覆盖)
5.关闭浏览器和当前页面
6.打开url
7.获取页面标题
8.刷新页面
9.返回上一页、进入下一页
10.处理弹框
11.截图浏览器当前页面
12.页面滚动条控制
(二)seleium定位方式
1.通过ID定位
2.通过name属性定位
3.通过class name属性定位
4.通过 Tag Name 定位
5.通过 XPath 定位(超好用)
6.通过 Link Text 定位链接(精准的定位 )
7. 通过 Partial Link Text 定位链接(模糊定位)
8.通过 CSS 选择器定位
通过类名(.class的值)
通过id名(#id的值)
通过属性('[name=值]')
通过class的值('[class=值]')
任意标签内容('[任意标签=对应值]')---好用
上级定位('上级标签头>下级标签头')
三、其他事件
(一)鼠标事件
鼠标点击(click())
(二)键盘事件
1.框内输入内容
2.确定回车键
3.框内全选快捷键
4.框内剪切快捷键
5.复制粘贴
(三)文件上传
(四)下拉框处理
(五)按钮框选择
(六)确认框选择
四、练习文件获取
方式一:csdn下载上传的文件
方式二:文章底部下面扫那个猫
一、概念知识
Selenium 是一个广泛使用的开源自动化测试工具,它主要用于Web应用程序的自动化测试。通过 Selenium,开发人员和测试人员可以模拟用户在浏览器中的操作,以自动化执行浏览器操作和验证网页功能。其主要目标是提高测试的效率、准确性,并支持跨浏览器的测试。
(一)三大核心组件
1.Selenium WebDriver:
- WebDriver 是 Selenium 的核心组件之一,提供了与浏览器交互的接口。它能够模拟用户在浏览器中的各种操作,如点击按钮、输入文本、选择下拉框选项、验证页面内容等。
- WebDriver 直接与浏览器进行交互,比 Selenium 的早期版本(如 Selenium RC)更为强大和稳定。
2.Selenium IDE (Integrated Development Environment):
- Selenium IDE 是一个浏览器插件(如 Firefox 和 Chrome),可以录制和回放用户的浏览器操作,帮助快速生成自动化测试脚本。适合快速开发和原型测试,但它不如 WebDriver 灵活且功能强大。
3.Selenium Grid:
(二)Selenium 自动化测试的工作原理
Selenium 自动化测试通过模拟用户的行为进行网页操作和验证,主要通过以下步骤实现:
1.启动浏览器: 通过 WebDriver 启动一个浏览器实例(如 Chrome、Firefox、Edge 等)。
2.定位页面元素: 使用 WebDriver 提供的查找方法(如 find_element_by_id, find_element_by_xpath, find_element_by_css_selector 等)定位网页中的各种元素(按钮、文本框、下拉框、链接等)。
3.与页面元素交互: 模拟用户对这些页面元素的操作。例如,点击按钮(click())、输入文本(send_keys())、获取元素的文本内容(text())等。
4.验证测试结果: 比如验证页面是否成功加载、验证是否出现了预期的内容等,通常是通过断言(assertions)来进行验证。
(三)Selenium 支持的操作
打开网页
点击按钮
输入文本
获取文本
获取元素的属性值
模拟鼠标操作(如悬停、右键点击等)
使用 ActionChains 类来模拟复杂的鼠标操作。
等待元素加载:
使用显式等待 (WebDriverWait) 或隐式等待来等待元素的加载
(四)Selenium 自动化测试的优点
-
跨浏览器支持: Selenium 支持多种主流浏览器,包括 Chrome、Firefox、Safari、Edge 和 IE。通过不同的浏览器驱动,可以在不同浏览器上进行自动化测试。
-
语言支持: Selenium 支持多种编程语言,包括 Java、Python、C#、Ruby、JavaScript 等,开发者可以选择熟悉的语言进行自动化测试脚本的编写。
-
开放源码: Selenium 是一个开源项目,完全免费使用,且有广泛的社区支持。
-
支持并行执行: Selenium Grid 可以让测试在多台机器和多个浏览器实例上并行执行,大大提高了执行效率。
-
集成性强: Selenium 可以与多种测试框架集成,如 TestNG、JUnit、pytest 等。它还可以与 CI/CD 工具(如 Jenkins、GitLab CI 等)集成,实现自动化测试的持续集成。
-
灵活性: Selenium 可以与各种测试工具、报告工具、以及性能测试工具(如 JMeter、Allure 等)结合使用,增强自动化测试的功能和可视化效果。
(五)Selenium 自动化测试的缺点
-
不支持图形用户界面 (GUI) 测试: Selenium 主要用于 Web 页面测试,并不适用于桌面应用程序或 GUI 测试。
-
在处理动态网页时可能比较复杂: 对于高度动态的网页,Selenium 可能需要配合一些等待机制来确保页面元素的加载(如使用显式等待和隐式等待)。
-
浏览器兼容性: 尽管 Selenium 支持多浏览器,但不同浏览器的渲染和行为可能有所不同,这要求测试人员在测试时要特别注意。
(六)Selenium 自动化测试的应用场景
总结
- Selenium 是一款功能强大的自动化测试工具,广泛应用于 Web 应用的自动化测试。
- 通过模拟用户的浏览器操作,Selenium 提供了一种高效、可靠的方式来执行回归测试、功能测试和跨浏览器测试。
- 它支持多种编程语言,能够与不同的测试框架和工具集成,适用于各种开发和测试流程。
二、实操例子
使用前提--安装步骤
注意事项
一定要注意这个find_element和find_elements的使用,复数多的加s使用,单个不加s,要注意使用
浏览器执行速度太快可能看不起,可以用time.sleep(秒)来控制延长时间方便观察,使用这个要导入time包
配置好要使用的模块
(一)浏览器的操作
ps:单行代码无法使用,结合起来使用
1.打开谷歌浏览器
python">#导入模块
from selenium import webdriver
#打开谷歌浏览器
driver = webdriver.Chrome()# 启动 Firefox 浏览器
# driver = webdriver.Firefox()# 启动 Edge 浏览器
# driver = webdriver.Edge()
2.浏览器窗口最大化
python"># 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
3.设置浏览器的宽高
python">driver.set_window_size(1000,800)
4.打开新窗口(不会覆盖)
python"># #打开百度的页面
driver.get("https://www.baidu.com")
#打开京东页面。不会覆盖
win='window.open("https://www.jd.com")'
#调用新界面
driver.execute_script(win)
5.关闭浏览器和当前页面
python">driver.quit()#关闭整个浏览器
driver.close()#关闭当前页面
6.打开url
python">#打开百度的页面
driver.get("https://www.baidu.com")
7.获取页面标题
python">#获取页面title,赋值给title
title=driver.title
#打印title
print(title)
8.刷新页面
python">driver.refresh()
9.返回上一页、进入下一页
python">#返回上一页
driver.back()
#进入下一页
driver.forward()
10.处理弹框
python">alert = driver.switch_to.alert
alert.accept() # 点击"确定"
alert.dismiss() # 点击"取消"
11.截图浏览器当前页面
ps:默认放到执行文件的同级目录下
python">#整个浏览器截图,默认放到当前执行文件的同级目录
driver.save_screenshot('screenshot.png')
12.页面滚动条控制
页面滚动到底部
通过 window.scrollTo()
方法来滚动页面
python">driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
页面滚动到顶部
同样,window.scrollTo()
方法也可以将页面滚动到顶部
python">#页面滚动到顶部
driver.execute_script("window.scrollTo(0, 0);")
页面滚动到指定的位置
ps:用jd示例
python"># #打开京东的页面
driver.get("https://www.jd.com")
# 可以指定 y 坐标。比如,滚动到页面 1000 像素的位置
driver.execute_script("window.scrollTo(0, 1000);")
滚动一定的距离
每次滚动一定的距离,可以通过滚动 x
和 y
坐标来实现。比如,向下滚动 500 像素,向上就改变y轴的值为负数
python"># 向下滚动 500 像素
driver.execute_script("window.scrollBy(0, 500);")#向上滚动 500像素,就是把y轴的值改为负数就好
driver.execute_script("window.scrollBy(0, -500);")
(二)seleium定位方式
Selenium 提供了多种定位方式,你可以根据具体的需求选择最适合的方式。常见的有:
ps:一般来说ID和Name是最常用和最稳定的
ID
Name
Class Name
Tag Name
Link Text 和 Partial Link Text
XPath
CSS Selector
演示页面
1.通过ID定位
根据百度的输入框id定位到输入框,然后输入你好
关键代码
python">#通过id定位百度的输入框,点击输入自定义内容你好
driver.find_element_by_id("kw").send_keys("你好")
完整的实操代码
python"># 从Selenium库导入webdriver模块,用于创建浏览器驱动
from selenium import webdriver# 创建一个Chrome浏览器的实例,driver是一个浏览器对象,使用它可以操作浏览器
driver = webdriver.Chrome()# 使用driver.get()方法打开指定的URL,"https://baidu.com/"是你要打开的网页地址
driver.get("https://baidu.com/")# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()#通过id定位百度的输入框,点击输入自定义内容你好
driver.find_element_by_id("kw").send_keys("你好")
2.通过name属性定位
根据百度的输入框name属性定位到输入框,然后输入云边的快乐猫
关键代码
python">#通过name定位百度的输入框,点击输入自定义内容云边的快乐猫
driver.find_element_by_name("wd").send_keys("云边的快乐猫")
完整的实操代码
python"># 从Selenium库导入webdriver模块,用于创建浏览器驱动
from selenium import webdriver# 创建一个Chrome浏览器的实例,driver是一个浏览器对象,使用它可以操作浏览器
driver = webdriver.Chrome()# 使用driver.get()方法打开指定的URL,"https://baidu.com/"是你要打开的网页地址
driver.get("https://baidu.com/")# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()#通过name定位百度的输入框,点击输入自定义内容云边的快乐猫
driver.find_element_by_name("wd").send_keys("云边的快乐猫")
3.通过class name属性定位
根据百度的输入框class name属性定位到输入框,然后输入云边的快乐猫
ps:class 属性用于指定元素的样式类,但可能有多个元素使用相同的类名。通过 class_name 定位时,Selenium 会返回匹配的第一个元素。
关键代码
python">#通过class name定位百度的输入框,点击输入自定义内容云边的快乐猫
driver.find_element_by_class_name("s_ipt").send_keys("云边的快乐猫")
完整代码
python"># 从Selenium库导入webdriver模块,用于创建浏览器驱动
from selenium import webdriver# 创建一个Chrome浏览器的实例,driver是一个浏览器对象,使用它可以操作浏览器
driver = webdriver.Chrome()# 使用driver.get()方法打开指定的URL,"https://baidu.com/"是你要打开的网页地址
driver.get("https://baidu.com/")# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()#通过class name定位百度的输入框,点击输入自定义内容云边的快乐猫
driver.find_element_by_class_name("s_ipt").send_keys("云边的快乐猫")
4.通过 Tag Name 定位
通过 HTML 元素的标签名称来定位,比如
input
、button
、div
等ps:主要用来根据input标签寻找其他标签
关键代码
注意:这个elements是有s的复数,不是element
python">#通过class name定位百度的输入框,点击输入自定义内容云边的快乐猫
#注意:这个find_elements_by_tag_name的elements是带s的
s=driver.find_elements_by_tag_name('input')
#遍历input标签里面自己想要的属性,这里再通过id定位
for i in s:if i.get_attribute('id')=='kw':i.send_keys('云边的快乐猫')
完整的代码
python"># 从Selenium库导入webdriver模块,用于创建浏览器驱动
from selenium import webdriver# 创建一个Chrome浏览器的实例,driver是一个浏览器对象,使用它可以操作浏览器
driver = webdriver.Chrome()# 使用driver.get()方法打开指定的URL,"https://baidu.com/"是你要打开的网页地址
driver.get("https://baidu.com/")# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()#通过input定位百度的输入框,点击输入自定义内容云边的快乐猫
#注意:这个find_elements_by_tag_name的elements是带s的
s=driver.find_elements_by_tag_name('input')
#遍历input标签里面自己想要的属性,这里再通过id定位
for i in s:if i.get_attribute('id')=='kw':i.send_keys('云边的快乐猫')
5.通过 XPath 定位(超好用)
ps:超好用,几乎什么都可以定位到
选择方式:选中--右键--copy--点击倒二的xpath
python">#这里定位百度网页的hao123链接,然后进行点击
#注意,括号里面用单引号
driver.find_element_by_xpath('//*[@id="s-top-left"]/a[2]').click()
python"># 从Selenium库导入webdriver模块,用于创建浏览器驱动
from selenium import webdriver# 创建一个Chrome浏览器的实例,driver是一个浏览器对象,使用它可以操作浏览器
driver = webdriver.Chrome()# 使用driver.get()方法打开指定的URL,"https://baidu.com/"是你要打开的网页地址
driver.get("https://baidu.com/")# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()#这里定位百度网页的hao123链接,然后进行点击
#注意,括号里面用单引号
driver.find_element_by_xpath('//*[@id="s-top-left"]/a[2]').click()
6.通过 Link Text 定位链接(精准的定位 )
ps:当元素是一个链接(
<a>
标签)时,你可以通过链接的文本内容来定位。
python">#通过q标签内的链接定位改链接,然后点击打开hao123的网页
driver.find_element_by_link_text("hao123").click()
完整的代码
python"># 从Selenium库导入webdriver模块,用于创建浏览器驱动
from selenium import webdriver# 创建一个Chrome浏览器的实例,driver是一个浏览器对象,使用它可以操作浏览器
driver = webdriver.Chrome()# 使用driver.get()方法打开指定的URL,"https://baidu.com/"是你要打开的网页地址
driver.get("https://baidu.com/")# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()#通过a标签内的链接定位改链接,然后点击打开hao123的网页
driver.find_element_by_link_text("hao123").click()
7. 通过 Partial Link Text 定位链接(模糊定位)
与
LINK_TEXT
类似,但是partial link text
只需要链接文本的部分内容就可以匹配,适用于链接文本较长的情况。
python">#通过a标签内的链接定位改链接,然后点击打开hao123的网页
driver.find_element_by_partial_link_text("123").click()
完整的代码
python"># 从Selenium库导入webdriver模块,用于创建浏览器驱动
from selenium import webdriver# 创建一个Chrome浏览器的实例,driver是一个浏览器对象,使用它可以操作浏览器
driver = webdriver.Chrome()# 使用driver.get()方法打开指定的URL,"https://baidu.com/"是你要打开的网页地址
driver.get("https://baidu.com/")# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()#通过a标签内的链接定位改链接,然后点击打开hao123的网页
driver.find_element_by_partial_link_text("123").click()
8.通过 CSS 选择器定位
CSS 选择器基于 CSS 样式规则来定位元素,通常比 XPath 更简洁。CSS 选择器可以通过标签、类、ID、属性等组合来定位。
关键代码
通过类名(.class的值)
ps:注意:这里用的单引号,还有括号里面记得先加上一个.代表这是来自类的
python">#这里通过class的值定位找到百度搜索框,再输入云边的快乐猫
#注意:这里用的单引号,还有括号里面记得先加上一个.代表这是来自类的
driver.find_element_by_css_selector('.s_ipt').send_keys("云边的快乐猫")
通过id名(#id的值)
python">#2.注意:这里用的单引号,还有括号里面记得先加上一个#代表这是来自id的
driver.find_element_by_css_selector('#kw').send_keys("云边的快乐猫")
通过属性('[name=值]')
python">#单引号,中括号'[name=]'
driver.find_element_by_css_selector('[name=wd').send_keys("云边的快乐猫")
通过class的值('[class=值]')
python">#单引号,中括号'[class=]'
driver.find_element_by_css_selector('[class=s_ipt]').send_keys("云边的快乐猫")
任意标签内容('[任意标签=对应值]')---好用
python">#单引号,中括号'[任意标签=对应的值]'。这里是打开了百度的一个其中页面
driver.find_element_by_css_selector('[target=_blank]').click()
上级定位('上级标签头>下级标签头')
ps:这个还能上上级,再上级前面套一个上上级就好
python">#单引号,通过上级定位到下级标签,并输入内容
driver.find_element_by_css_selector('span>input').send_keys("云边的快乐猫")
部分代码
python"># 从Selenium库导入webdriver模块,用于创建浏览器驱动
from selenium import webdriver# 创建一个Chrome浏览器的实例,driver是一个浏览器对象,使用它可以操作浏览器
driver = webdriver.Chrome()# 使用driver.get()方法打开指定的URL,"https://baidu.com/"是你要打开的网页地址
driver.get("https://baidu.com/")# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()#这里通过class的值定位找到百度搜索框,再输入云边的快乐猫
#注意:这里用的单引号,还有括号里面记得先加上一个.代表这是来自类的
driver.find_element_by_css_selector('.s_ipt').send_keys("云边的快乐猫")
三、其他事件
(一)鼠标事件
要额外导入包使用
from selenium.webdriver.common.action_chains import ActionChains
鼠标点击(click())
python">#点击的地图按钮,进入地图页面
driver.find_element_by_link_text('地图').click()
完整代码
python">#导入模块
from selenium import webdriver
#打开谷歌浏览器
driver = webdriver.Chrome()
# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
# #打开百度的页面
driver.get("https://www.baidu.com/")
#点击的地图按钮,进入地图页面
driver.find_element_by_link_text('地图').click()
(二)键盘事件
ps:这个要使用的时候类里面导入这个包
python">#导入键盘包
from selenium.webdriver.common.keys import Keys
1.框内输入内容
python">#1.定位百度的输入框,并输入云边的快乐猫这个自定义搜索值
driver.find_element_by_id("kw").send_keys("云边的快乐猫")
2.确定回车键
python">#相当于按下回车键
driver.find_element_by_id("kw").send_keys(Keys.ENTER)
3.框内全选快捷键
python">#相当于CTRL+A
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
4.框内剪切快捷键
python">#相当于CTRL+x
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
5.复制粘贴
同理,和剪切全选那些一样,改后面的字符就好了,复制是c,粘贴是v
完整代码
python">#导入模块
from selenium import webdriver
#导入键盘包
from selenium.webdriver.common.keys import Keys
import time
#打开谷歌浏览器
driver = webdriver.Chrome()
# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
# #打开百度的页面
driver.get("https://www.baidu.com/")
#1.定位百度的输入框,并输入云边的快乐猫这个自定义搜索值
driver.find_element_by_id("kw").send_keys("云边的快乐猫")
#休眠一会方便观察
time.sleep(1)
#相当于按下回车键
driver.find_element_by_id("kw").send_keys(Keys.ENTER)
#相当于CTRL+A
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')#相当于CTRL+x
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
#清除框内的内容
# driver.find_element_by_id("kw").send_keys(Keys.TAB)
#休眠等待一会
time.sleep(3)
driver.quit()#关闭整个浏览器
(三)文件上传
上传成功,旁边会显示上传的文件名
关键代码
driver.定位具体按钮.send_keys(要上传的文件)
python">#定位到按钮位置,并赋值,后面的senk_keys里面的是要上传的文件,加r是为了防止转义
driver.find_element_by_xpath('//*[@id="file"]').send_keys(r"D:\Users\kkk\Downloads\data.xlsx")
全部代码
python">#导入模块
from selenium import webdriver
#导入时间的模块。方便后续使用sleep方法
import time
#打开谷歌浏览器
driver = webdriver.Chrome()
# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
# #打开百度的页面
#前面加个r代表读的意思,防止\这个符号被编译进去
driver.get(r"D:\Users\kkk\Downloads\upload_file.html")
#定位到按钮位置,并赋值,后面的senk_keys里面的是要上传的文件,加r是为了防止转义
driver.find_element_by_xpath('//*[@id="file"]').send_keys(r"D:\Users\kkk\Downloads\data.xlsx")
#等待几秒确保文件上传成功
time.sleep(5)
driver.quit()#关闭整个浏览器
(四)下拉框处理
点击选择学校这个下拉框,然后这里选择北京大学做为例子
关键代码
python">#定位到下拉框按钮的位置并赋值
d=driver.find_element_by_xpath('/html/body/form/table/tbody/tr[7]/td[2]/select')
#使用赋值,然后定位到要选择的选项,然后点击
d.find_element_by_xpath('/html/body/form/table/tbody/tr[7]/td[2]/select/option[3]').click()
全部代码
python">#导入模块
from selenium import webdriver
#导入时间的模块。方便后续使用sleep方法
import time
#打开谷歌浏览器
driver = webdriver.Chrome()
# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
# #打开百度的页面
#前面加个r代表读的意思,防止\这个符号被编译进去
driver.get(r"D:/Users/kkk/Downloads/table.html")
#定位到下拉框按钮的位置并赋值
d=driver.find_element_by_xpath('/html/body/form/table/tbody/tr[7]/td[2]/select')
#使用赋值,然后定位到要选择的选项,然后点击
d.find_element_by_xpath('/html/body/form/table/tbody/tr[7]/td[2]/select/option[3]').click()
#等待几秒便于观察
time.sleep(5)
driver.quit()#关闭整个浏览器
(五)按钮框选择
这个更简单,选择定位到按钮的位置,然后点击就可以了
关键代码
python">#定位选择框的位置,然后点击按钮
driver.find_element_by_xpath('/html/body/form/table/tbody/tr[6]/td[2]/input[2]').click()
全部代码
python">#导入模块
from selenium import webdriver
#导入时间的模块。方便后续使用sleep方法
import time
#打开谷歌浏览器
driver = webdriver.Chrome()
# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
# #打开百度的页面
#前面加个r代表读的意思,防止\这个符号被编译进去
driver.get(r"D:/Users/kkk/Downloads/table.html")
#定位选择框的位置,然后点击按钮
driver.find_element_by_xpath('/html/body/form/table/tbody/tr[6]/td[2]/input[2]').click()
#等待几秒便于观察
time.sleep(5)
driver.quit()#关闭整个浏览器
(六)确认框选择
点击显示确认框,弹框出来了再点击确认按钮,如果觉得太快了,可以设置个sleep睡眠等待便于观察一下
关键代码
python">#定位弹出框的点击按钮,点击弹出
driver.find_element_by_xpath('/html/body/div/input').click()
#弹出框点击确认按钮
driver.find_element_by_xpath('/html/body').click()
全部代码
python">#导入模块
from selenium import webdriver
#导入时间的模块。方便后续使用sleep方法
import time
#打开谷歌浏览器
driver = webdriver.Chrome()
# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
# #打开百度的页面
#前面加个r代表读的意思,防止\这个符号被编译进去
driver.get(r"D:/Users/kkk/Downloads/enter.html")
#定位弹出框的点击按钮,点击弹出
driver.find_element_by_xpath('/html/body/div/input').click()
#弹出框点击确认按钮
driver.find_element_by_xpath('/html/body').click()
#等待几秒确保文件上传成功
time.sleep(5)
driver.quit()#关闭整个浏览器
四、练习文件获取
方式一:csdn下载上传的文件
https://download.csdn.net/download/m0_52861000/90146557
方式二:文章底部下面扫那个猫
有什么问题都可以评论区留言,看见都会回复的
如果你觉得本篇文章对你有所帮助的,把“文章有帮助的”打在评论区
多多支持吧!!!
点赞收藏评论,当然也可以点击文章底部的红包或者👇订阅付费文章创作支持一下了。抱拳了!
vip文章:http://t.csdn.cn/Uq5j1
bug大全订阅文章:http://t.csdn.cn/j6UyR