• 自动化测试:selenium(完结篇)


    一、元素操作方法

    1. 方法:
    2. 1、.send_keys() # 输入方法
    3. 2、.click() # 点击方法
    4. 3、.clear() # 清空方法

    注意:在输入方法之前一定要清空操作!!

    1. # 导包
    2. from time import sleep
    3. from selenium import webdriver
    4. # 实例化浏览器
    5. driver = webdriver.Chrome()
    6. # 打开网址
    7. driver.get('https://www.baidu.com/')
    8. # 需求
    9. ele = driver.find_element_by_css_selector('#kw')
    10. ele.send_keys('易烊千玺')
    11. sleep(2)
    12. # 清空
    13. ele.clear()
    14. ele.send_keys('王嘉尔')
    15. # 时间轴看效果
    16. sleep(3)
    17. # 关闭页面
    18. driver.quit()

    同时,我也为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接点击文末小卡片免费领取资料文档

    软件测试视频教程观看处:

    字节大佬教你逼自己如何在15天内掌握自动化测试(接口自动化/APP自动化/Web自动化/性能测试),内含项目实战

     

    二、浏览器操作方法

    常用的浏览器操作系统API# 方法

    1. # 方法
    2. """
    3. 1、driver.maximize_window() # 最大化浏览器
    4. 2、driver.set_window_size(w,h) # 设置浏览器大小 单位像素 【了解】
    5. 3、driver.set_window_position(x,y) # 设置浏览器位置 【了解】
    6. 4、driver.back() # 后退操作
    7. 5、driver.forward() # 前进操作
    8. 6、driver.refrensh() # 刷新操作
    9. 7、driver.close() # 关闭当前主窗口(主窗口:默认启动那个界面,就是主窗口)
    10. 8、driver.quit() # 关闭driver对象启动的全部页面
    11. 9、driver.title # 获取当前页面title信息
    12. 10、driver.current_url # 获取当前页面url信息
    13. """
    1. """
    2. 应用:driver.maximize_windows() # 窗口最大化
    3. driver.set_window_size(w,h) # 设置浏览器大小 【了解】
    4. driver.set_window_position(x,y) # 设置浏览器窗口位置 【了解】
    5. """
    6. from time import sleep
    7. from selenium import webdriver
    8. driver = webdriver.Chrome()
    9. driver.get('https://www.baidu.com/')
    10. # 窗口最大化
    11. driver.maximize_window()
    12. sleep(1)
    13. # 设置浏览器宽,高 【了解】
    14. driver.set_window_size(1000, 1000)
    15. sleep(1)
    16. # 设置窗口浏览器位置 【了解】
    17. driver.set_window_position(200, 200)
    18. sleep(3)
    19. driver.quit()

    1. """
    2. driver.back()
    3. driver.forward()
    4. driver.refresh()
    5. """
    6. from time import sleep
    7. from selenium import webdriver
    8. driver = webdriver.Chrome()
    9. driver.get('https://www.sogou.com/')
    10. driver.find_element_by_css_selector('#query').send_keys('易烊千玺')
    11. driver.find_element_by_id('stb').click()
    12. sleep(2)
    13. # 后退
    14. driver.back()
    15. sleep(2)
    16. # 前进
    17. driver.forward()
    18. sleep(2)
    19. # 刷新
    20. driver.refresh()
    21. sleep(3)
    22. driver.quit()

    1. """
    2. driver.close() # 关闭当前主窗口,默认启动的界面就是主窗口
    3. driver.quit() # 关闭全部页面
    4. driver.title # 获取页面标题
    5. driver.current_url # 获取页面地址
    6. """
    7. from time import sleep
    8. from selenium import webdriver
    9. driver = webdriver.Chrome()
    10. driver.get('https://www.sogou.com/')
    11. driver.find_element_by_link_text('图片').click()
    12. # 这两个属性可以用来做断言使用
    13. print("当前页面标题:", driver.title)
    14. print("当前页面的url:", driver.current_url)
    15. # 这里关闭的是原始页面,而不是新的页面,只有完成页面切换才可以关闭新的页面
    16. # 场景:关闭单个页面使用
    17. driver.close()
    18. sleep(3)
    19. # 关闭浏览器驱动对象的所有页面
    20. driver.quit()

    注意:driver.close() ,当前关闭的是主窗口,只有完成页面切换才可以关闭当前新的页面

    提示:

    1、driver.title 和 drivet.current_url是属性没有括号。应用场景:一般判断上不操作是否执行成功。

    2、driver.maximize_window() 一般为前置代码放到获取driver地址后,进行浏览器窗口的最大化

    3、driver.refresh() 向浏览器重新发出请求,刷新页面,在cookie 会用到

    4、driver.close() 和 driver.quit() 的区别:

       close():关闭当前主窗口
       quit():关闭由driver对象启动的所有页面
       如果只有一个窗口那么quit()和 close()没有区别。

    三、获取元素信息操作

    常用元素信息操作API

    1. """
    2. 方法:
    3. 1、text 获取元素的文本; 如:driver.text
    4. 2、size 获取元素的大小: 如:driver.size
    5. 3、get_attribute 获取元素属性值;如:driver.get_attribute("id") ,传递的参数是元素的属性名
    6. 4、is_displayed 判断元素是否可见 如:element.is_displayed()
    7. 5、is_enabled 判断元素是否可用 如:element.is_enabled()
    8. 6、is_selected 判断元素是否被选中 如:element.is_selected()
    9. """
    1. """
    2. text 获取元素文本 ,没有()
    3. size 获取元素大小 ,没有()
    4. get_attribute("属性名") 获取的是属性值
    5. """
    6. from time import sleep
    7. from selenium import webdriver
    8. driver = webdriver.Chrome()
    9. driver.get('https://www.sogou.com/')
    10. ele = driver.find_element_by_id('query')
    11. print("目标元素尺寸:", ele.size)
    12. new_ele = driver.find_element_by_id('hanyu')
    13. print("目标元素文本:", new_ele.text)
    14. link = driver.find_element_by_link_text("图片")
    15. print("目标元素属性值:", link.get_attribute('id'))
    16. sleep(3)
    17. # 关闭浏览器驱动对象的所有页面
    18. driver.quit()
    1. """
    2. is_displayed() 判断元素是否可见,如:element.is_displayed
    3. is_enabled() 判断元素是否可用, 如:element.is_enabled
    4. is_selected() 判断元素是否被选中,如:element.is_selected
    5. """
    6. from time import sleep
    7. from selenium import webdriver
    8. driver = webdriver.Chrome()
    9. driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8CA.html')
    10. # 判断元素是否可见,不可见并不代表不能定位
    11. span = driver.find_element_by_name('sp1')
    12. print("元素是否可见:", span.is_displayed())
    13. btn = driver.find_element_by_id('cancelA')
    14. print("元素是否可用:", btn.is_enabled())
    15. check = driver.find_element_by_id('lia')
    16. print("元素是否被选中:", check.is_selected())
    17. sleep(3)
    18. # 关闭浏览器驱动对象的所有页面
    19. driver.quit()

    注意:里面的返回的结果都是True 和 False。

    四、鼠标操作 (需要实例化鼠标对象)

    1、我们有了鼠标为什么还要使用鼠标操作?

    ​ 为了满足丰富的html鼠标效果,必须使用对应的方法。

    2、鼠标时间对应的方法在那个类中?

    ​ ActionChains类,实例化 鼠标对象

    导包:

    from selenium.webdriver.common.action_chains import ActionChains
    

    3、鼠标事件常用的操作 ☆

    1. """
    2. 1context_click(element) # 右击
    3. 2double_click(element) #双击
    4. 3double_and_drop(source, target) # 拖拽
    5. 4move_to_element(element) # 悬停 【重点】
    6. 5perform() # 执行以上事件的方法 【重点】
    7. """

    4.1 鼠标右键及双击

    1. """
    2. 鼠标操作:
    3. context_click() 右键
    4. double_click() 鼠标双击
    5. """
    6. from time import sleep
    7. from selenium import webdriver
    8. from selenium.webdriver import ActionChains
    9. driver = webdriver.Chrome()
    10. driver.get('https://www.baidu.com/')
    11. # 定位目标
    12. ele = driver.find_element_by_id('kw')
    13. # 实例化 鼠标对象
    14. action = ActionChains(driver)、
    15. # 鼠标右键
    16. action.context_click(ele)
    17. # 鼠标双击
    18. action.double_click(ele)
    19. # 鼠标执行操作!!!不执行没效果
    20. action.perform()
    21. sleep(3)
    22. driver.quit()

    4.2 鼠标拖拽

    1. """
    2. 鼠标操作:
    3. # 鼠标拖拽
    4. action.drag_and_drop(source, target)
    5. """
    6. from time import sleep
    7. from selenium import webdriver
    8. from selenium.webdriver import ActionChains
    9. driver = webdriver.Chrome()
    10. driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/drag.html')
    11. red = driver.find_element_by_xpath('//*[@id="div1"]')
    12. blue = driver.find_element_by_xpath('//*[@id="div2"]')
    13. # 实例化鼠标
    14. action = ActionChains(driver)
    15. # 鼠标拖拽
    16. action.drag_and_drop(red, blue)
    17. # 鼠标执行
    18. action.perform()
    19. sleep(3)
    20. driver.quit()

    4.3 鼠标悬停 【重点】

    1. """
    2. 鼠标操作:
    3. # 鼠标悬停 【重点】
    4. action.move_to_element(element)
    5. """
    6. from time import sleep
    7. from selenium import webdriver
    8. from selenium.webdriver import ActionChains
    9. driver = webdriver.Chrome()
    10. driver.get('https://www.baidu.com/')
    11. driver.maximize_window()
    12. ele = driver.find_element_by_id('s-usersetting-top')
    13. # 实例化鼠标
    14. action = ActionChains(driver)
    15. # 鼠标悬停
    16. action.move_to_element(ele)
    17. # 鼠标执行
    18. action.perform()
    19. sleep(3)
    20. driver.quit()

    注意: selenium 框架虽然提供了 鼠标右键方法,但是没有提供选择右键菜单方法,可以通过键盘快捷键操作实现

    五、键盘操作(不需要实例化对象)☆

    1、说明:键盘对应的方法在Keys类中

    1. # 包
    2. from selenium.webdriver.common.keys import Keys

    2、快捷键(这里只讲windows操作系统的快捷键)

    ​ CONTROL: Ctrl键

    ​ BACK_SPACE : 等价于 BACKSPACE (删除)

    ​ 其他:可以藏奥Keys底层的定义

    3、应用

    1. # 单键
    2. element.send_keys(Keys.XXX)
    3. # 组合键
    4. element.send_keys(Keys.XXX, 'a') # 注意这里的组合键都是小写
    1. """
    2. 键盘操作
    3. """
    4. from time import sleep
    5. from selenium import webdriver
    6. from selenium.webdriver.common.keys import Keys
    7. driver = webdriver.Chrome()
    8. driver.get('https://www.baidu.com/')
    9. ele = driver.find_element_by_id('kw')
    10. ele.send_keys('易烊千玺')
    11. sleep(1)
    12. ele.send_keys(Keys.BACK_SPACE)
    13. sleep(1)
    14. # 组合键 Ctrl + a 全选 ,注意这里的组合键都是小写
    15. ele.send_keys(Keys.CONTROL, 'a')
    16. sleep(1)
    17. ele.send_keys(Keys.CONTROL, 'x')
    18. sleep(1)
    19. ele.send_keys(Keys.CONTROL, 'v')
    20. sleep(3)
    21. driver.quit()

    六、元素等待

    1、为什么要设置元素等待

    ​ 由于电脑配置或网络原因,在查找元素时,元素代码未在第一时间内被加载出来,而抛出未找到元素异常。

    2、什么是元素等待

    ​ 元素在第一次未找到时,元素等待设置的时长被激活,如果在设置的有效时长内找到元素,继续执行代码,如果超出设置的时长未找打元素,抛出未找到元素异常。

    3、元素等待分类

    ​ 隐式等待:针对全局元素生效;(讲这个)

    ​ 显示等待:稍微麻烦,有兴趣的可以下去了解,他是针对单个元素生效。

    隐式等待方法:

    driver.implicitly_wait(30) # 一般情况下设置30

    ​ 特色:

    1. 1. 针对所有元素生效。
    2. 2. 一般情况下为前置必写代码(1.获取浏览器驱动对象;2. 最大化浏览器;3. 设置隐式等待)
    1. """
    2. 隐式等待
    3. """
    4. from time import sleep
    5. from selenium import webdriver
    6. from selenium.webdriver.common.keys import Keys
    7. driver = webdriver.Chrome()
    8. # 1、获取浏览器驱动对象
    9. driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8CA%E7%AD%89%E5%BE%85.html')
    10. # 2、窗口最大化
    11. driver.maximize_window()
    12. # 3、设置隐式等待
    13. driver.implicitly_wait(30)
    14. ele = driver.find_element_by_id('userA')
    15. ele.send_keys('admin')
    16. sleep(3)
    17. driver.quit()

    七、下拉框(需要实例化下拉框)

    1、为什么单独使用下拉框?

    ​ 1)如果option选项没有value值的化,css定位或其他定位就不太方便。

    2、使用Select类

    ​ 1)导包:from selenium.webdriver.support.select improt Select

    ​ 2)实例化下拉框:s = Select(element)

    ​ 3)调用方法:s.select_by_index()索引从0开始

    3、Select类提供的方法

    ​ 1)select_by_index() # 通过索引定位

    ​ 2)select _by_value() # 通过value值

    ​ 3)select_by_visible_text() # 显示文本

    1. """
    2. Select类方法:
    3. 需要实例化下拉框元素定位
    4. """
    5. from time import sleep
    6. from selenium import webdriver
    7. from selenium.webdriver.support.select import Select
    8. driver = webdriver.Chrome()
    9. driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8CA.html')
    10. ele = driver.find_element_by_id('selectA')
    11. # 实例化下拉框
    12. s = Select(ele)
    13. # index 索引方法
    14. s.select_by_index(1)
    15. sleep(1)
    16. # value 属性值选择目标元素
    17. s.select_by_value('sz')
    18. sleep(1)
    19. # text 采用文本的方式选择目标信息
    20. s.select_by_visible_text('A北京')
    21. sleep(3)
    22. driver.quit()

    八、弹出框

    1、为什么要处理弹出框?

    ​ 一旦出现弹出框,如果不进行处理,则后续操作不可实现

    2、弹窗分类

    ​ 系统弹窗:JS实现

    ​ 自定义弹窗:前端代码封装

    3、对话框的分类

    ​ alert:警告框

    ​ confirm:确认框

    ​ prompt:提示框

    4、如何处理

    1. 步骤:
    2. 1、需要切换到对话框
    3. driver.switch_to.alert
    4. 2、处理对话框
    5. alert.text # 获取文本
    6. alert.accept() # 接受
    7. alert.dismiss() # 拒接
    1. """
    2. 系统弹窗:
    3. 切换对话框:driver.switch_to.alert
    4. 同意:alert.accept()
    5. 拒绝:alert.dismiss()
    6. """
    7. from time import sleep
    8. from selenium import webdriver
    9. from selenium.webdriver.support.select import Select
    10. driver = webdriver.Chrome()
    11. driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8CA.html')
    12. driver.find_element_by_id('confirma').click()
    13. # 切换对话框
    14. alert = driver.switch_to.alert
    15. print("文本内容是:", alert.text)
    16. sleep(2)
    17. # 拒绝
    18. alert.dismiss()
    19. # 同意
    20. # alert.accept()
    21. sleep(3)
    22. driver.quit()

    自定义弹窗,由于可以鼠标右击检查选项获取元素信息,所以出现自行已弹窗的时候,直接定义目标元素,并进行移除操作即可。

    九、滚动条

    1、为什么要是用滚动条?

    ​ 在一些特殊场景中,一些按钮是在页面最下角,需要使用滚动条拉到最底层。

    2、操作步骤

    Selenium框架中没有专门处理滚动条的方法,需要通过调用 Js 代码实现操作;

    ​ 1)第一步:设置操作滚动条操作语句:js_down="window.scollTo(0,1000)"

    ​ > 0:为左边距-----》水平滚动条

    ​ > 1000: 为垂直滚动条

    ​ 2)第二步:调用执行js方法,将设置js语句传入方法中

    ​ > 方法:driver.execute_script(js_down)

    1. """
    2. 滚动条:selenium中没有滚动条方法,需要js代码实现
    3. 1、准备js代码:"window.scrollTo(0, 1000)"
    4. 2、执行js代码:driver.execute_script(js的变量)
    5. """
    6. from time import sleep
    7. from selenium import webdriver
    8. driver = webdriver.Chrome()
    9. driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8CA.html')
    10. sleep(2)
    11. # 1、准备js代码
    12. js_down = "window.scrollTo(0, 1000)"
    13. # 2、执行js代码
    14. driver.execute_script(js_down)
    15. sleep(3)
    16. driver.quit()

    十、切换frame表单 ☆

    1、应用场景

    处于frame 中的元素,虽然可以获取元素信息,但是代码执行时无法定位元素,因此需要先切换到frame,再进行元素定位操作。

    2、如何切换frame

    方法:driver.switch_to.frame("id/name/element") 传入的是代表frame唯一的特征值

    1. """
    2. frame的切换
    3. """
    4. from time import sleep
    5. from selenium import webdriver
    6. driver = webdriver.Chrome()
    7. driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')
    8. # 切换到frame
    9. driver.switch_to.frame('idframe1')
    10. # 在frame表单中填写信息
    11. driver.find_element_by_id('userA').send_keys('admin')
    12. sleep(3)
    13. driver.quit()

    3、连续切换frame

    说明:如果要连续切换frame必须要先回到默认页面,才能够实现下一个frame的切换

    回到主页面的方法:driver.switch_to.default_content()

    1. """
    2. 需要默认切换到frame
    3. 方法:driver.switch_to.default_content()
    4. """
    5. from time import sleep
    6. from selenium import webdriver
    7. driver = webdriver.Chrome()
    8. driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')
    9. driver.switch_to.frame('idframe1')
    10. driver.find_element_by_id('userA').send_keys('admin')
    11. driver.switch_to.default_content()
    12. driver.switch_to.frame('myframe2')
    13. driver.find_element_by_id('userB').send_keys('admin4')
    14. sleep(3)
    15. driver.quit()

    十一、多窗口的切换 ☆

    1、为什么要切换多窗口

    ​ 页面是存在多窗口的,但是selenium默认焦点只会在主窗口上的所有元素,不切换窗口,就不能操作除主窗口以外的窗口内元素。

    2、如何切换

    每个窗口都有唯一的一个句柄值,那么我们就可以通过句柄值来完成窗口的切换操作

    ​ 方法:

    ​ 1)driver.current_window_handle (获取当前的句柄值)

    ​ 2)driver.window_handles ( 获取当前由driver启动所有窗口句柄)

    ​ 3)driver.switch_to.window(handle) —> 切换窗口

    1. """
    2. 多窗口切换
    3. driver.current_window_handle 获取当前的句柄值
    4. driver.window_handles 获取driver启动的所有窗口句柄
    5. driver.switch_to.window(handles[-1]) 切换窗口操作
    6. """
    7. from time import sleep
    8. from selenium import webdriver
    9. driver = webdriver.Chrome()
    10. driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')
    11. driver.find_element_by_id('ZCB').click()
    12. # 1、获取当前的句柄值
    13. # print("当前的句柄值是:", driver.current_window_handle)
    14. # 2
    15. # 1).切换窗口操作,driver.window_handles 获取driver启动的所有窗口句柄
    16. handles = driver.window_handles
    17. # 2).切换窗口工作
    18. driver.switch_to.window(handles[-1])
    19. driver.find_element_by_id('userB').send_keys('admin9')
    20. sleep(3)
    21. driver.quit()

    注意:这里的窗口切换也对应到了 close() 方法的作用,现在使用close()就是关闭当前页面,如果还想重新操作原始页面,务必完成窗口切换。

    十二、截图操作

    使用的方法:

    driver.get_screenshot_as_file(imgepath)

    参数:

    imagepath:为图片要保存的目录地址及文件名称

    1. """
    2. 截图:driver.get_screenshot_as_file(imgepath)
    3. """
    4. from time import sleep
    5. from selenium import webdriver
    6. driver = webdriver.Chrome()
    7. driver.get('https://www.baidu.com/')
    8. driver.find_element_by_xpath('//*[@id="kw"]').send_keys('易烊千玺')
    9. # 截图方法,建议使用png格式 , ./为当前路径, ../为上一级路径
    10. driver.get_screenshot_as_file('./info.png')
    11. sleep(3)
    12. driver.quit()

    注意:指定图片存放的路径,需要自己手动创建文件夹

    十三、验证码

    1、什么是验证码?

    ​ 一种随机生成的信息(文字,数字,图片)

    2、验证码的作用?

    ​ 防止恶意请求

    3、验证码的处理

    ​ 这边讲的是cookie解决

    4、使用cookie 登录

    ​ 客户端登录账号后,将登录状态的想关 cookie 信息发给服务器保存,再发送去请求,携带cookie信息如果跟服务器保留的一致,则服务器认为客户端是登录状态。

    5、这里实现自动登录的功能

    ​ 1、准备工作,在客户端登录的状态下,获取cookie字段

    2、方法步骤:

    1. 1、整理cookie信息为字典数据,对应的是name和value,保存的一个变量中
    2. 2、调用方法添加cookie
    3. driver.add_cookie(cookie变量)
    4. # 3、刷新页面 -->发送cookie给服务器验证
    5. driver.refresh()

    cookie 的value就不给你们了,怕你们登录我的账号

    1. """
    2. 验证码:
    3. {'name':'BDUSS',
    4. 'value':'............................'}
    5. """
    6. from time import sleep
    7. from selenium import webdriver
    8. driver = webdriver.Chrome()
    9. driver.get('https://www.baidu.com/')
    10. driver.maximize_window()
    11. # 1、整理cookie信息为字典数据,对应的是name和value,保存的一个变量中
    12. cookie_value = {'name':'BDUSS',
    13. 'value':'........................'}
    14. # 2、调用方法添加cookie
    15. driver.add_cookie(cookie_value)
    16. # 3、刷新页面 -->发送cookie给服务器验证
    17. driver.refresh()
    18. sleep(3)
    19. driver.quit()

    演示:


    ​终于把Selenium 给完结了,完结撒花❀❀❀❀❀❀❀❀❀❀ ,这里面的方法都要掌握,然后可以找需求文档练习,铁汁们,觉得笔者写的不错的可以点个赞,收藏关注下呗,你们支持就是我写博客最大的动力!!!!

    PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助,有需要的朋友你可以dd我。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近100个G。

    ☑ 240集-零基础到精通全套视频课程
    ☑ [课件+源码]-完整配套的教程
    ☑ 18套-测试实战项目源码
    ☑ 37套-测试工具软件包
    ☑ 268道-真实面试题
    ☑ 200个模板-面试简历模板、测试方案模板、软件测试报告模板、测试分析模版、测试计划模板、性能测试报告、性能测试报告、性能测试脚本用例模板(信息完整)

    这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

  • 相关阅读:
    雷达波束高度估计、折射分类、大气波导现象概念
    iNFTnews | 对体育行业和球迷来说,NFT可以带来什么?
    树的算法基础知识
    零基础5分钟上手亚马逊云科技AWS核心云架构知识 - 为应用配置自动扩展
    10.20作业
    Python之第十一章 面向对象 --- 基础
    【RPC】gRPC 安装及使用
    顺丰快递商家寄件发货接口API类型和接入流程方案【快递100接口Demo】
    深度学习基础之梯度下降
    星辰天合联合星环科技完成互认证 共同打造更有生命力的大数据存算解决方案
  • 原文地址:https://blog.csdn.net/HUA1211/article/details/132713684