下拉框操作/键鼠操作/文件上传

news2024/11/16 17:36:06

在我们做UI自动化测试的时候,会有一些元素需要特殊操作,比如下拉框操作/键鼠操作/文件上传。

下拉框操作

在我们很多页面里有下拉框的选择,这种元素怎么定位呢?下拉框分为两种类型:我们分别针对这两种元素进行定位和操作

  • select标签 : 通过select类处理。
  • 非select标签

1、针对下拉框元素,如果是Select标签类型,可以通过Selenium WebDriver中的Select类来进行处理:

from selenium.webdriver.support.ui import Select

这个Select类提供了如下操作方法:

  • select_by_index(index) #通过选项的顺序 : 索引选择,从0开始
  • select_by_value(value) #通过value属性
  • select_by_visible_text(text) #通过选项可见文本
  • options #提供所有的选项的列表,其中都是选项的WebElement元素
    from select import select
    from time import sleep
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.select import Select
    驱动 = webdriver.Chrome()
    驱动.get("https://www.hao123.com/?src=from_pc")
    驱动.maximize_window()
    驱动.implicitly_wait(3)
    #点击切换按钮
    驱动.find_element(By.CSS_SELECTOR,".city-change-btn").click()
    sleep(3)
    # 获取省下拉框的元素
    select_test01 = 驱动.find_element(By.NAME,"province")
    sleep(3)
    #通过编号
    Select(select_test01).select_by_value("04")
    sleep(3)
    # 获取城市下拉框的元素
    select_test02 = 驱动.find_element(By.NAME,"city")
    sleep(3)
    #通过文字
    Select(select_test02).select_by_visible_text("B 巴南")
    sleep(3)
    #获取城市下级元素下拉框的元素
    select_test03 = 驱动.find_element(By.NAME,"dist")
    sleep(3)
    #通过索引
    Select(select_test03).select_by_index(0)
    sleep(3)
    驱动.find_element(By.CSS_SELECTOR,".select-confirm-btn").click()

2、如果是非Select类型元素,不能通过Select类来进行处理,此时直接点击即可。现在很多项目并不是select标 签。

from selenium.webdriver.support.ui import Select
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.baidu.com/')

# 点击设置按钮
driver.find_element(By.ID,"s-usersetting-top").click()
sleep(2)
# 点击高级搜索
driver.find_element(By.XPATH,'//span[text()="高级搜索"]').click()
sleep(2)
#点击时间不限的下拉框元素
driver.find_element(By.XPATH,'//span[text()="时间不限"]').click()
sleep(2)
driver.find_element(By.XPATH,'//p[text()="一周内"]').click()

sleep(3)

driver.quit()

左右滑动解锁

(1)driver.find_elements_by_class_name("slide-to-unlock-handle")[0]==先通过class属性找到所有的里面的第一个

(2)click_and_hold()   ==对滑块按下鼠标左键

(3)move_by_offset() ==通过for循环动滑块的位置,move_by_offset()方法第一个参数是X轴,第二个参数是Y轴,单位为像素。因为是平行移动,所以Y设置为0。 X每次移动两2个像素。每次循环休眠0.1秒,时间间隔越小,移动越顺滑.

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import  ActionChains
驱动 = webdriver.Chrome()
驱动.get("https://www.helloweba.net/demo/2017/unlock/")
驱动.maximize_window()
# 查找滑动模块
unlock_element = 驱动.find_element(By.CSS_SELECTOR,".slide-to-unlock-handle")
# 获取鼠标操作
mouse_oper = ActionChains(驱动)
#对滑块按下鼠标左键并执行
mouse_oper.click_and_hold(unlock_element).perform()
#拖动x轴移动x坐标
mouse_oper.move_by_offset(300,0).perform()
#重置滑动框
mouse_oper.reset_actions()
sleep(5)
#退出
驱动.quit()

键鼠操作

UI自动化测试的时候,我们有些时间需要操作鼠标和键盘,对元素进行操作。比如鼠标有很多操作 双击 单机 右键等。所以,我们需 要学习键鼠操作。

selenium里有一个专门的类来处理鼠标的操作: ActionChains类, 可以用来模拟鼠标操作

  • from selenium.webdriver.common.action_chains import ActionChains 【导包】

第一步:选择鼠标的行为(参数是元素对象 -element): 通过driver.find_element找到的元素,再选 择鼠标行为:

  • 悬浮-移动鼠标 move_to_element() -- p1
  • 点击 click() --p1 拖拽 drag_and_drop(element1,element2) --P1
    • 先找到element1,再找到element2,拖拽执行
  • 双击 double_click() ---p2
  • 在特定元素上单击鼠标左键(不释放)click_and_hold() ----- p2
  • 暂停 pause() 每个动作之间可以暂停一下----- p2
  • release() #抬起鼠标 --p2 右键 context_click() :
  • 右键后打开的菜单 无法定位 不属于html页面 所以用的少。

这个方法很多,不需要全部记住,如果用到的时候查一下就可以。 知道基本使用的步骤就可以。-- 通过ActionChains(driver).可以查 看所有方法。

第二步:执行鼠标操作行为 - perform(),鼠标操作一定要perform才会执行。

ActionChains鼠标操作的具体的使用步骤:

1、实例化ActionChains对象

2、调用你要使用的鼠标操作行为 : 可以用链式调用

  • - 因为每个方法返回的都是self ,可以连续调用

3、调用perform()去执行鼠标操作: 一定要perform才会执行。

ActionChains(driver).move_to_element(elem).perform() # 移动到元素
ActionChains(driver).click(elem).perform() # 点击元素
ActionChains(driver).drag_and_drop(element1,element2).perform() # 拖拽动作

注意问题:普通的点击操作和鼠标点击操作的区别?

  • 普通的click,在点击的时候是有条件要求,被点击的元素需要是能够被点击的状态 -- 有条件约束,有可能会失败
  • 鼠标click,不会管元素是否能够被点击,直接去点击 -- 没有条件约束,任何元素都可以点击
  • 什么情况下使用鼠标click?== 如果你发现有时候通过普通的click点击不了,那你可以选择鼠标click
    """
    第一步:选择鼠标的行为(参数是元素对象 -element): 通过driver.find_element找到的元素,再选择鼠标行为:
    * 悬浮-移动鼠标 move_to_element() -- p1
    * 点击 click() --p1
    * 拖拽 drag_and_drop(element1,element2) --P1
        * 先找到element1,再找到element2,拖拽执行
    第二步:执行鼠标操作行为 - perform(),鼠标操作一定要perform才会执行。
    
    ActionChains鼠标操作的具体的使用步骤:
    * 1、实例化ActionChains对象
    * 2、调用你要使用的鼠标操作行为 :
        * 可以用链式调用 - 因为每个方法返回的都是self ,可以连续调用
    * 3、调用perform()去执行鼠标操作: 一定要perform才会执行。
    """
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.support.ui import Select
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from time import sleep
    
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('https://www.baidu.com/')
    
    # 元素定位表达式-设置按钮
    ele_setting = driver.find_element(By.ID,"s-usersetting-top")
    
    # 1、实例化ActionChains对象 + 2、调用你要使用的鼠标操作行为 :-悬浮 移动鼠标到某个元素+3、调用perform()去执行鼠标操作
    ActionChains(driver).move_to_element(ele_setting).perform()
    sleep(2)
    
    # 找到高级搜索按钮 --用鼠标点击操作
    ele_search = driver.find_element(By.XPATH,'//span[text()="高级搜索"]')
    ActionChains(driver).click(ele_search).perform()
    sleep(2)
    
    """
    第一步:选择鼠标的行为(参数是元素对象 -element): 通过driver.find_element找到的元素,再选择鼠标行为:
    * 悬浮-移动鼠标 move_to_element() -- p1
    * 点击 click() --p1
    * 拖拽 drag_and_drop(element1,element2) --P1
        * 先找到element1,再找到element2,拖拽执行
    第二步:执行鼠标操作行为 - perform(),鼠标操作一定要perform才会执行。
    
    ActionChains鼠标操作的具体的使用步骤:
    * 1、实例化ActionChains对象
    * 2、调用你要使用的鼠标操作行为 :
        * 可以用链式调用 - 因为每个方法返回的都是self ,可以连续调用
    * 3、调用perform()去执行鼠标操作: 一定要perform才会执行。
    """
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.support.ui import Select
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from time import sleep
    
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('https://www.treejs.cn/v3/demo/cn/exedit/drag.html')
    
    #元素拖拽操作
    ele1 = driver.find_element(By.ID,'treeDemo_2_span') # 初始元素
    ele2 = driver.find_element(By.ID,'treeDemo_5_span') # 目标位置
    ActionChains(driver).drag_and_drop(ele1,ele2).perform()
    sleep(2)
    
    
    driver.quit()
    """
    有些按钮用普通点击无法点击成功 此时就会需要去尝试使用鼠标点击。
    
    """
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.support.ui import Select
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from time import sleep
    
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('file:///D:/Pycharm_Project/upload_demo.html')
    
    # 普通点击不能生效的
    # driver.find_element(By.ID,'fu').click()
    
    # 尝试用鼠标点击
    ActionChains(driver).click(driver.find_element(By.ID,'fu')).perform()
    

键盘事件 : 用的稍微比较少,了解一下

Selenium中send_keys除了可以模拟键盘输入之外,还有些时候需要操作键盘上的按键,甚至是组合键,比如CTRL+A,CTRL+C等, 所以我们需要代码操作键盘。使用的是send_keys里的Keys的类。

  • from selenium.webdriver.common.keys import Keys

Keys()类提供了键盘上所有按键的方法,常用的键盘按键操作如下:

send_keys(Keys.BACK_SPACE) #删除键(BackSpace)
send_keys(Keys.SPACE) #空格键(Space)
send_keys(Keys.TAB) #制表键(Tab)
send_keys(Keys.ESCAPE) #回退键(Esc)
send_keys(Keys.ENTER) #回车键(Enter)
send_keys(Keys.CONTROL,‘a’) #全选(Ctrl+A)
send_keys(Keys.CONTROL,‘c’) #复制(Ctrl+C)
send_keys(Keys.CONTROL,‘x’) #剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v’) #粘贴(Ctrl+V)
send_keys(Keys.F1) #键盘 F1
...
send_keys(Keys.F12) #键盘 F12
"""
send_keys(Keys.BACK_SPACE) #删除键(BackSpace)
send_keys(Keys.SPACE) #空格键(Space)
send_keys(Keys.TAB) #制表键(Tab)
send_keys(Keys.ESCAPE) #回退键(Esc)
send_keys(Keys.ENTER) #回车键(Enter)
send_keys(Keys.CONTROL,‘a’) #全选(Ctrl+A)
send_keys(Keys.CONTROL,‘c’) #复制(Ctrl+C)
send_keys(Keys.CONTROL,‘x’) #剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v’) #粘贴(Ctrl+V)
send_keys(Keys.F1) #键盘 F1
...
send_keys(Keys.F12) #键盘 F12

"""
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.baidu.com/')

driver.find_element(By.ID,'kw').send_keys("百度一下")

# 回车
# driver.find_element(By.ID,"kw").send_keys(Keys.ENTER)
# 回删键
driver.find_element(By.ID,"kw").send_keys(Keys.BACK_SPACE)
sleep(2)
driver.find_element(By.ID,"kw").send_keys(Keys.BACK_SPACE)
sleep(1)
# 组合键 - 全选
driver.find_element(By.ID,"kw").send_keys(Keys.CONTROL,"a")
sleep(2)
# 组合键 - 复制
driver.find_element(By.ID,"kw").send_keys(Keys.CONTROL,"c")
driver.find_element(By.ID,"kw").clear() # 文本清空
sleep(2)
# 组合键 - 粘贴
driver.find_element(By.ID,"kw").send_keys(Keys.CONTROL,"v")
sleep(2)
driver.find_element(By.ID,"kw").send_keys(Keys.CONTROL,"v")


sleep(2)

driver.quit()

文件上传:文件上传是自动化中比较麻烦棘手的部分。

有些场景我们需要上传本地文件到项目里。这种比较麻烦,因为需要点开文件上传的窗口后,打开的是windows的文件选择窗口,而 selenium是无法操作这个窗口的。 selenium只能操作html网页。

针对这种上传文件的场景,我们分两种情况来处理:

场景1、上传文件的元素是是input标签 : 这种比较方便,直接send_keys这个文件的路径就可以了。

"""
场景1、上传文件的元素是是input标签 :<input type="file" id="fu" value="选择文件">
这种比较方便,直接send_keys这个文件的路径就可以了。
"""
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.baidu.com/')

# 点击相机的按钮
driver.find_element(By.XPATH,'//span[@class="soutu-btn"]').click()

# 找到文件上传的元素 直接进行send_keys()操作 把上传的文件的路径 填进去
driver.find_element(By.XPATH,'//input[@class="upload-pic"]').send_keys(r'C:\Users\95744\Pictures\Camera Roll\123.jpg')

sleep(3)
driver.quit()

场景2、 不是input输入框,点击弹出系统的选择文件的窗口这种 需要借助第三方库实现:- PC 应用程序自动化工 具

通过系统工具实现自动化测试:windows系统自动化测试工具 :pyautogui,AutoIT,Pywinauto。

  • 1)在打开对话框中填写要上传的文件路径: pyautogui.write(r'D:\fk88.png') ,选择要上传的文件 【write不支持中文】
  • 2)点击打开按钮-按下回车按钮:pyautogui.press('enter', presses=2) ,库可能有bug,所以尽量点击2次 确保万无一失 注意:默认文件路径不能有中文: 有中文 直接使用会报错。

我们学习pyautogui工具,使用的步骤:

  • 1)在打开对话框中填写要上传的文件路径: pyautogui.write(r'D:\fk88.png') ,选择要上传的文件 【write不支持中文】
  • 2)点击打开按钮-按下回车按钮:pyautogui.press('enter', presses=2) ,库可能有bug,所以尽量点击2次 确保万无一失
    • 注意:默认文件路径不能有中文: 有中文 直接使用会报错
    • 支持中文的做法:先去复制路径->粘贴;
    • 但是pyautogui不支持复制操作,所以需要借助 另外一个库:pyperclip,内置库 直接导入即可 :import pyperclip
    • 通过热键粘贴路径
    • 然后再点击回车按钮确认上传
  • 这个库只能支持单个文件上传,要多个 可以使用 pywinauto的库,不过这个库不那么稳定+只能支持windows
    """
    * pyautogui:跨平台支持:windows、linux、mac,操作也比较简单。
        * 第三方库: pip install pyautogui
    我们学习pyautogui工具,使用的步骤:
    * 1)在打开对话框中填写要上传的文件路径: pyautogui.write(r'D:\fk88.png') ,选择要上传的文件
    * 2)点击打开按钮-按下回车按钮:pyautogui.press('enter', presses=2) ,库可能有bug,所以尽量点击2次 确保万无一失
        * 注意:默认文件路径不能有中文: 有中文 直接使用会报错。
            * 支持中文的做法:先去复制路径->粘贴;
            * 但是pyautogui不支持复制操作,所以需要借助 另外一个库:pyperclip,内置库 直接导入即可 :import pyperclip
            * 通过热键粘贴路径
            * 然后再点击回车按钮确认上传
    
    为了万无一失 可以 统一使用中文的方式进行上传。或者你可以在上传之前 确保数据名和路径都是英文的。
    
    """
    import pyautogui
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from time import sleep
    import pyperclip
    
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('https://caesium.app/')
    
    # 点击浏览按钮--点击  打开上传的窗口
    driver.find_element(By.XPATH,'//span[contains(text(),"浏览")]').click()
    sleep(2) # 加一个强制等待
    
    # 借助pyautogui工具 操作 步骤
    # 1)在打开对话框中填写要上传的文件路径
    # pyautogui.write(r'C:\Users\libin\Desktop\tricy.png')
    # pyautogui.write(r'C:\Users\libin\Desktop\验证码.png')
    #
    # # 2)点击打开按钮-按下回车按钮
    # pyautogui.press("enter", presses=2)
    
    # 路径有中文的写法
    # 1、先复制路径
    pyperclip.copy(r'C:\Users\95744\Pictures\Camera Roll\币安app.png')
    # 2、粘贴 -- hotkey 通过热键粘贴
    pyautogui.hotkey("ctrl","v")
    sleep(2)
    
    # 3)点击打开按钮-按下回车按钮
    pyautogui.press("enter", presses=2)
    

通过系统工具实现自动化测试的缺点:

  • 1、不太稳定,兼容性比较差
  • 2、不能同时以其他的任务在执行 所以尽量优先用send_keys 不能用 再用系统工具。

验证码处理

很多的网站都在登录页面加入了识别文字,识别图片,拖动拼图的验证码方式来防止爬虫、恶意注册等,如果是做自动化,需要绕过 验证码才能进入下一步操作。

  • 方案一、测试环境去除验证码 :最轻松的方法,找开发帮忙解决。
  • 方案二、万能验证码 (推荐): lemon, 这个也简单和常用。推荐使用
  • 方案三、通过添加cookie绕过登录绕过图片验证【UI自动化】

cookie是一门客户端技术,一般是由服务器生成返回给浏览器客户端来保存的,并且cookie是以键值对的形式保存在浏览器客户端 的,每一个cookie都会有名称,值,过期时间...用来保存少量的用户信息

Cookie有很多使用场景,在项目中比较常见的有:

  • 1. 登录记住用户名
  • 2. 记录用户浏览记录

Cookie种类:

1、会话cookie:保存在内存中,浏览器关闭就清除== 这种不适用。

2、持久cookie:保存在硬盘中,失效时间到之后就会清除 ,适用于cookies的处理方式登录。

  • 添加cookie解决验证码思路:
    • 在登录某个网站,如果勾选【自动登录】,当下次再访问该网站时就自动处于登录状态。这个功能其实就是将用户信息保存 在浏览器的cookie中,当再次访问网站时,浏览器直接使用本地保存的cookie用户信息进行登录。
  • 所以我们在代码中也可以将用户信息添加到cookie中,再刷新浏览器即可;
    driver = webdriver.Chrome()
    driver.get('https://www.baidu.com/')
    driver.maximize_window()
    #通过添加百度登录之后用户信息-cookie
    driver.add_cookie({"name":"BDUSS","value":"zlaRUg4VjVPb2xkSG5MSmJOfmpIQnp3WUdDZXNDbWk4V3I5ME9SemtoRHRpWFZsSVFBQUFBJC
    sleep(2)
    driver.refresh()
    
    """
    1、先跟开发确认 登录的cookies保存在哪个cookies键值对里 【浏览器里会保存很多cookies】
    2、确认这个cookies是会话cookies 还是 持久cookie, 持久cookie可以用;
    3、先在本地浏览器里先登录项目-- cookies才能保存在浏览器,并拿到cookies 给代码传过去
    百度登录cookies:
    BDUSS : 1FdWc1ai1LRmNGRE9jZFlBa0Q5cUkyWFpFUGN0ZHBCeGI4SExqbVlvaE1QeGxtSVFBQUFBJCQAAAAAAAAAAAEAAAAJsDdLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEyy8WVMsvFlei
    """
    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com/")
    driver.maximize_window()
    
    # 通过百度登录之后的cookies拿到
    driver.add_cookie({"name":"BDUSS","value":"JxMzJoazl3SzNFa1pWQU5YTzM0UlJlWTBkaS1XMlRQQk8ydEpqNn4za0RBbmhtSUFBQUFBJCQAAAAAAAAAAAEAAACFWXWR1vHSttfTNjYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN1UGYDdVBmNF"})
    sleep(2)
    
    # 刷新页面 --使用cookies直接绕过登录 进入登录后的状态
    driver.refresh()
    
    sleep(2)
    driver.quit()
    
    

cookie失效条件:

  • 1、手动退出登录

  • 2、cookie已经超过有效期

注意,如果cookies失效 就需要重新获取cookies。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1688287.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

移动硬盘容量消失无法读取的解决方案

在数字化时代&#xff0c;数据的存储和备份变得尤为重要。移动硬盘作为一种便捷、大容量的存储设备&#xff0c;受到许多人的青睐。然而&#xff0c;有时我们可能会遭遇这样的问题&#xff1a;移动硬盘不显示容量且无法访问。这种情况无疑给我们的数据存储和管理带来了巨大的困…

sequence cache太小导致enq: SQ – contention

当业务卡的时候&#xff0c;发现大量等待事件为enq: SQ – contention&#xff0c;检查awr的top 5事件&#xff1a; sql语句对sequence的调用非常频繁&#xff1a; 对这些语句排查发现sequence cache值均为默认20&#xff0c;调大cache到1000值&#xff1a; SQL> select SE…

基于YOLOV8/YOLOV5的PCB板缺陷检测识别系统

摘要&#xff1a; 本文详细阐述了一个利用深度学习进行PCB板缺陷检测的系统&#xff0c;该系统集成了最新的YOLOv8算法&#xff0c;并与YOLOv7、YOLOv6、YOLOv5等先前版本进行了性能比较。该系统能够在图像、视频、实时视频流和批量文件中精确地识别和分类PCB板缺陷。文中不仅深…

WiFi蓝牙模块厂家带你了解蓝牙模块功率的等级

目前蓝牙技术的突破已经让许多蓝牙模块厂家从业者忘记了很多专业术语&#xff0c;比如Class1&#xff0c;Class2等&#xff0c;那么我们就蓝牙模块发射功率来做个详细了解。   针对功率来说&#xff0c;低功耗蓝牙和经典蓝牙又有区别。   低功耗蓝牙没有功率的级别&#xf…

Milvus:揭秘未来数据探索之钥

Milvus是什么&#xff1f; 想象一下&#xff0c;你正坐在一个巨大的图书馆中&#xff0c;成千上万本书摆放在眼前&#xff0c;但图书馆却没有目录和顺序&#xff0c;这听起来像一项艰巨的任务&#xff0c;不是吗&#xff1f;好消息是&#xff0c;在数字世界中&#xff0c;我们…

经纬恒润第三代重载自动驾驶平板车

随着无人驾驶在封闭场地和干线道路场景的加速落地&#xff0c;港口作为无人化运营的先行者&#xff0c;其场景的复杂度、特殊性对无人化运营的技术提出了各种挑战。经纬恒润作为无人驾驶解决方案提供商&#xff0c;见证了港口在无人化运营方面的尝试及发展&#xff0c;并深度参…

Python——基于共享单车使用量数据的可视化分析(1)

目录 &#x1f9fe; 1、数据集&#xff08;部分数据&#xff09; ✏️ 2、导入数据集与必要模块 1️⃣ 2.1 导入库以及字体包 2️⃣ 2.2 读取数据集 3️⃣ 2.3 查看数据集基本信息 ⌨️ 3、数据预处理 1️⃣ 3.1删除无关字段 2️⃣ 3.2对各字段进行中文标识 3️⃣ 3.3…

Timeline

SignalTrack信号轨道和自定义带参数的Marker信号和轨道 MySignalReceiver using System; using System.ComponentModel; using UnityEngine.Playables; using UnityEngine.Events;namespace UnityEngine.Timeline { public class BaseSignalReceiver<T, Q> : MonoBeha…

3100点失守,小丑竟是我自己

敏感时刻&#xff0c;亮剑的我们股市买单&#xff0c;海的那边反倒还涨了&#xff0c;好生气啊&#xff01;就连我们胡主编昨晚都气得睡不着&#xff0c;一点多了还在那抒发情感&#xff0c; 确实&#xff0c;有句话说到心窝里了&#xff1a;小散们是拿真金白银撑场子的&#x…

微星打造全球首款DDR5 CAMM2内存主板:这下清爽了

微星预告了新款主板“ Z790 Project Zero Plus”&#xff0c;这也是 全球第一款配备DDR5 CAMM2内存的桌面主板&#xff01; CAMM全称为“Compression Attached Memory Module”&#xff0c;已被JEDEC组织接纳为行业标准&#xff0c;相比传统的SO-DIMM、DIMM内存最大特点就是取消…

大模型之Ollama:在本地机器上释放大型语言模型的强大功能

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

spark的简单学习一

一 RDD 1.1 RDD的概述 1.RDD&#xff08;Resilient Distributed Dataset&#xff0c;弹性分布式数据集&#xff09;是Apache Spark中的一个核心概念。它是Spark中用于表示不可变、可分区、里面的元素可并行计算的集合。RDD提供了一种高度受限的共享内存模型&#xff0c;即RD…

翻译《The Old New Thing》- Why do we even have the DefWindowProc function?

Why do we even have the DefWindowProc function? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20071105-00/?p24583 Raymond Chen 2007年11月05日 为什么一定要使用 DefWindowProc 函数&#xff1f; 简要 文章讨论了为什么我们有DefW…

day15|各种遍历的应用

相关题目&#xff1a; 层次遍历会一打十 反转二叉树 对称二叉树 层次遍历会一打十 自底向上的层序遍历 实现思路&#xff1a;层次遍历二叉树&#xff0c;将遍历后的结果revers即可 public List<List<Integer>> levelOrderBottom(TreeNode root) {List<List&l…

Flutter 页面布局 Flex Expanded弹性布局

题记 —— 执剑天涯&#xff0c;从你的点滴积累开始&#xff0c;所及之处&#xff0c;必精益求精&#xff0c;即是折腾每一天。 什么是弹性布局&#xff08;Flex&#xff09;&#xff1f; 弹性布局&#xff08;Flex&#xff09;是一种基于弹性盒子模型的布局方式&#xff0c;类…

IP地址显示“不安全”怎么办|已解决

解决IP地址显示“不安全”的问题&#xff0c;通常需要确保网站或服务使用HTTPS协议进行加密通信&#xff0c;可以通过部署SSL证书来解决&#xff0c;以下是具体的解决步骤&#xff1a; 1 申请IP地址SSL证书&#xff1a;网站管理员应向证书颁发机构&#xff08;CA&#xff09;申…

【教学类-58-03】黑白三角拼图03(4*4宫格)总数算不出+随机抽取10张

背景需求&#xff1a; 【教学类-58-01】黑白三角拼图01&#xff08;2*2宫格&#xff09;256种-CSDN博客文章浏览阅读318次&#xff0c;点赞10次&#xff0c;收藏12次。【教学类-58-01】黑白三角拼图01&#xff08;2*2宫格&#xff09;256种https://blog.csdn.net/reasonsummer/…

联邦BGP

AR1&#xff1a; [Huawei]bgp 1 [Huawei-bgp]router-id 1.1.1.1 [Huawei-bgp]peer 12.1.1.2 as-number 2 [Huawei-bgp]network 10.1.1.1 24---宣告 AR8&#xff1a; [Huawei]bgp 3 [Huawei-bgp]router-id 8.8.8.8 [Huawei-bgp]peer 78.1.1.7 as-number 2 [Huawei-bgp]ne…

剖析镜面不锈钢氮气柜的种类和使用维护方法

镜面不锈钢氮气柜是一种高端的储存设备&#xff0c;专门设计用于保存对环境条件有严格要求的敏感物品。它采用了高品质的不锈钢材料&#xff0c;并通过精细的抛光处理达到镜面效果&#xff0c;不仅美观而且具备优秀的耐腐蚀性和易清洁性。柜体内利用氮气控制系统&#xff0c;通…

CTFHUB技能树——SSRF(三)

目录 URL Bypass 数字IP Bypass 302跳转 Bypass DNS重绑定 Bypass SSRF绕过方法&#xff1a; &#xff08;1&#xff09; http://abc.com127.0.0.1 &#xff08;2&#xff09;添加端口号 http://127.0.0.1:8080 &#xff08;3&#xff09;短地址 htt…