web自动化学习笔记

目录

  • 一、web自动化测试环境搭建
  • 二、web自动化测试第一个脚本
  • 三、selenium 8种定位方式
    • 3.1、通过id定位
    • 3.2、通过name定位
    • 3.3、通过tag_name(标签名)定位
    • 3.4、通过class值进行定位
    • 3.5、通过链接文本定位
    • 3.6、通过部分链接文本定位
    • 3.7、通过xpath定位
    • 3.8、通过css选择器定位
    • 3.9、定位动态元素
    • 3.10、定位带空格的复合class属性
  • 三、元素常用操作
  • 四、页面常用操作
    • 4.1、浏览器操作
    • 4.2、键盘操作 keys
    • 4.3、鼠标操作 ActionChains
    • 4.4、JS操作
      • 4.4.1、日期控件
      • 4.4.2、滚动条
    • 4.5、下拉列表
    • 4.6、弹出框、警告框
    • 4.7、文件上传
  • 五、三大等待
    • 5.1、强制等待 time.sleep()
    • 5.2、智能等待(隐式等待) driver.implicitly_wait()
    • 5.3、显示等待
  • 六、三大切换
    • 6.1、窗口切换
    • 6.2、切换iframe或frame
    • 6.3、
  • 七、常用方法封装

一、web自动化测试环境搭建

1、安装selenium(第三方库)
cmd命令:pip install selenium
2、安装浏览器(谷歌浏览器)
常见浏览器:chrome浏览器、Firefox浏览器
3、安装浏览器驱动
谷歌浏览器驱动:chromedriver.exe
Firefox浏览器驱动:geckodirver.exe
特别注意事项:下载驱动版本必须与浏览器的版本一致

二、web自动化测试第一个脚本

from selenium import  webdriver
# 创建浏览器对象
driver = webdriver.Chrome()
# 访问百度
driver.get("https://www.baidu.com")

执行后,自动访问了百度

三、selenium 8种定位方式

3.1、通过id定位

driver.find_element_by_id()

示例:
①、F12获取输入框元素的id值

在这里插入图片描述
②、执行代码

from selenium import  webdriver
import  time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
# 强制等待2s
time.sleep(2)
# 定位搜索框
el_select = driver.find_element_by_id("kw")
# 输入csdn
el_select.send_keys("csdn")

③、执行后效果
在这里插入图片描述

3.2、通过name定位

driver.find_element_by_name()

示例:还是百度的搜索框

from selenium import  webdriver
import  time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
# 强制等待2s
time.sleep(2)
# 定位搜索框
el_select = driver.find_element_by_name("wd")
# 输入csdn
el_select.send_keys("csdn")

3.3、通过tag_name(标签名)定位

该元素要么唯一,要么第一位,一般不用此方法

el_select = driver.find_element_by_tag_name("input")

3.4、通过class值进行定位

driver.find_element_by_class_name()

示例:还是百度的搜索框

from selenium import  webdriver
import  time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
# 强制等待2s
time.sleep(2)
# 定位搜索框
el_select = driver.find_element_by_class_name("s_ipt")
# 输入csdn
el_select.send_keys("csdn")

3.5、通过链接文本定位

driver.find_element_by_link_text()

示例:
①、例如想定位百度网页的新闻,并点击
在这里插入图片描述
②、执行代码

from selenium import  webdriver
import  time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
# 强制等待2s
time.sleep(2)
# 定位新闻
el_click = driver.find_element_by_link_text("新闻")
# 点击新闻
el_click.click()

3.6、通过部分链接文本定位

driver.find_element_by_partial_link_text()

示例:还是定位百度网页的新闻,并点击

from selenium import  webdriver
import  time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
# 强制等待2s
time.sleep(2)
# 定位含有新的链接(新闻)
el_click = driver.find_element_by_partial_link_text("新")
# 点击
el_click.click()

3.7、通过xpath定位

driver.find_elements_by_xpath()

3.8、通过css选择器定位

driver.find_element_by_css_selector()

3.9、定位动态元素

如163邮箱登录iframe标签中id值末尾是一串动态的数字
在这里插入图片描述

①、contains 包含某字符串的元素

//标签名[contains(@元素名, '元素值')]
el_iframe = driver.find_element_by_xpath('//*[contains(@id,"x-URS-iframe")]')

②、starts-with 以某字符串开始的元素

//标签名[starts-with(@元素名, '元素值')]
el = driver.find_element_by_xpath('//*[starts-with(@id,"x-URS-iframe")]')

③、ends-with 以某字符串结尾的元素

//标签名[ends-with(@元素名, '元素值')]
el = driver.find_element_by_xpath('//*[ends-with(@id,"xxxx")]')

3.10、定位带空格的复合class属性

下图可以看出class值有空格,如果直接用class_name的方式定位,会报错,此时可以采用css_selector方式定位

driver.find_element_by_css_selector('[class="title-content  c-link c-font-medium c-line-clamp1"]')

在这里插入图片描述

三、元素常用操作

方法或属性说明
el.send_keys()输入数据
el.clear()清除数据
el.text获取文本内容
el.get_attribute获取属性值
el.submit()提交

示例代码:为了看清效果,加了好多等待😂

from selenium import  webdriver
import time
driver = webdriver.Chrome()
# 访问百度
url_bd = "https://www.baidu.com"
driver.get(url_bd)
# 浏览器最大化
driver.maximize_window()
time.sleep(2)
# 定位搜索框
el = driver.find_element_by_id("kw")
# 打印元素的属性
print(el.get_attribute('id'))
time.sleep(1)
# 输入csdn
el.send_keys("csdn")
time.sleep(2)
# 清除元素的内容
el.clear()
time.sleep(1)
# 刷新浏览器
driver.refresh()
time.sleep(1)
# 定位新闻
el2 = driver.find_element_by_link_text("新闻")
# 打印元素的文本
print(el2.text)

四、页面常用操作

4.1、浏览器操作

方法说明
get(url)浏览器发送请求
maximize_window()浏览器最大化
back()浏览器后退
forward()浏览器前进
refresh()刷新浏览器
close()关闭当前页面
quit()关闭浏览器

示例代码:

from selenium import  webdriver
import time
driver = webdriver.Chrome()
# 访问百度
url_bd = "https://www.baidu.com"
driver.get(url_bd)
# 浏览器最大化
driver.maximize_window()
time.sleep(2)
# 访问58
url_58 = "https://tj.58.com/"
driver.get(url_58)
# 页面后退
driver.back()
time.sleep(1)
# 页面前进
driver.forward()
time.sleep(1)
# 刷新页面
driver.refresh()
time.sleep(1)
# 关闭浏览器
driver.quit()

close()场景

from selenium import  webdriver
import time
driver = webdriver.Chrome()
# 访问百度
url_bd = "https://www.baidu.com"
driver.get(url_bd)
# 浏览器最大化
driver.maximize_window()
time.sleep(2)
# 定位新闻
el = driver.find_element_by_link_text("新闻")
# 点击新闻
el.click()
time.sleep(1)
# 打印当前页面url
print(driver.current_url)
# 关闭当前页面
driver.close()

上述代码,虽然点击新闻后到了新页面,但通过driver.current_url可以看出当前页面还是百度首页,所以关闭当前页面操作关闭的是百度首页,执行后只剩下新闻页面

4.2、键盘操作 keys

需要先导包

from selenium.webdriver.common.keys import Keys
方法说明
send_keys(Keys.CONTROL,“a”)全选
send_keys(Keys.CONTROL,“c”)复制
send_keys(Keys.CONTROL,“x”)剪切
send_keys(Keys.CONTROL,“v”)粘贴

代码示例:

from selenium import  webdriver
import time
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
# 访问百度
url_bd = "https://www.baidu.com"
driver.get(url_bd)
# 浏览器最大化
driver.maximize_window()
time.sleep(2)
# 定位搜索框
el = driver.find_element_by_id("kw")
# 输入csdn
el.send_keys("csdn")
# ctrl+a
el.send_keys(Keys.CONTROL,"a")
time.sleep(1)
# ctrl+x
el.send_keys(Keys.CONTROL,"x")
time.sleep(1)
# ctrl+v
el.send_keys(Keys.CONTROL,"v")
time.sleep(1)
# ctrl+c
el.send_keys(Keys.CONTROL,"c")

4.3、鼠标操作 ActionChains

需要先导包

from selenium.webdriver import ActionChains
方法说明
ActionChains(driver).context_click(el).perform()点击鼠标右键,el为元素
ActionChains(driver).double_click(el).perform()鼠标双击
ActionChains(driver).move_to_element(el).perform()鼠标悬停

4.4、JS操作

4.4.1、日期控件

4.4.2、滚动条

# 通过JavaScript设置浏览器窗口的滚动条位置
js1 = "window.scrollTo(100, 450);"
driver.execute_script(js1)
# 实现滚动条从顶部到底部
js2 = "scrollTo(0,document.body.scrollHeight)"
driver.execute_script(js2)
# 实现滚动条从浏览器底部到顶部
js3 = "scrollTo(document.body.scrollHeight,0)"
driver.execute_script(js3)
# 操作哪个元素,滚动条移动到元素附近(元素与页面的顶部对齐,元素与页面的底部对齐)
el = driver.find_element_by_xpath('//*[@id="3"]/h3/a/em')
# 元素与页面的底部对齐
js4 = "arguments[0].scrollIntoView(false);"
driver.execute_script(js4, el)
# 元素与页面的顶部对齐
js5 = "arguments[0].scrollIntoView(true);"
driver.execute_script(js5, el)

示例场景:

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
# 设置浏览器窗口大小,以保证能看到横向和纵向滑动条
driver.set_window_size(800, 600)
# 定位输入框并输入selenium
driver.find_element_by_id("kw").send_keys("selenium")
# 点击百度一下按钮
driver.find_element_by_id("su").click()
time.sleep(2)
# 定位元素:selenium安装教程 - 相关博客 - 开发者搜索
el = driver.find_element_by_xpath('//*[@id="3"]/h3/a/em')
# 滑动到元素与页面的底部对齐
js4 = "arguments[0].scrollIntoView(false);"
driver.execute_script(js4, el)
# 关闭浏览器
driver.quit()

4.5、下拉列表

F12查看元素有select标签,说明可以使用下拉l列表的方法,这里使用的是自己本地的一个html文件
在这里插入图片描述
html文件:

<!DOCTYPE html>
<html lang="zh-cn">
<head><meta charset="UTF-8">
</head>
<body>
<p>今天吃什么</p>
<select name="eatwhate" id="eathow"><option value="gbjd">宫保鸡丁</option><option value="mlt">麻辣烫</option><option value="yxrs">鱼香肉丝</option><option value="gbr">锅包肉</option>
<option value="hgj">火锅鸡</option>
</select>
</body>
</html>

先导入:

from selenium.webdriver.support.select import Select# 创建对象
selsub = Select(下拉菜单元素)
方法说明
selsub.select_by_value()通过value值选择
selsub.select_by_visible_text()通过选项名称选择
selsub.select_by_index()通过选项索引值选择,从0开始

示例代码

from selenium import webdriver
from selenium.webdriver.support.select import Select
import time
driver = webdriver.Chrome()
# 访问本地的html文件地址
driver.get('file:///C:/Users/Administrator/Desktop/%E4%B8%8B%E6%8B%89%E6%A1%86.html')
driver.maximize_window()
el = driver.find_element_by_xpath('//*[@id="eathow"]')
# 创建Select对象
selsub = Select(el)
# 通过value值选择
selsub.select_by_value('yxrs')
time.sleep(1)
# 通过选项名称选择
selsub.select_by_visible_text('火锅鸡')
time.sleep(1)
# 通过选项索引值选择,从0开始
selsub.select_by_index(3)
time.sleep(1)
driver.quit()

4.6、弹出框、警告框

4.7、文件上传

1、input标签

F12查看元素,如果是通过input标签实现的上传功能,可以通过输入的方法即通过send_keys()指定文件路径实现文件上传
在这里插入图片描述
示例代码:

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get(r"file:///C:/Users/Administrator/Desktop/test.html")
time.sleep(4)
# 定位选择文件元素
el_file=driver.find_element_by_id("f1")
# 输入文件路径
el_file.send_keys(r"C:\Users\Administrator\Pictures\测试图片\滑稽.jpg")

test.html文件代码参考:

<form action="/upload" method="post" enctype="multipart/form-data">姓名: <input type="text" name="username"><br>年龄: <input type="text" name="age"><br>头像: <input type="file" name="image" id="f1"><br><input type="submit" value="提交">
</form>

.2、非input标签

①、使用第三方库pywin32

安装命令:pip install pywin32

from selenium import webdriver
import win32con
import win32gui
from selenium.webdriver import ActionChains
import time
import osdriver = webdriver.Chrome()
driver.get(r"file:///C:/Users/Administrator/Desktop/test.html")
time.sleep(4)
# 定位选择文件元素
el_file=driver.find_element_by_id("f1")
# 点击选择文件
ActionChains(driver).move_to_element(el_file).click().perform()def upload(filePath, browser_type="Chrome"):if browser_type == "Chrome":title = "打开"else:title = "文件上传"# 根据spy++工具判断需要上传文件的窗口为几级窗口,输入文件路径的文本框有四级目录:#32770‐ComboBoxEx32 ‐ComboBox ‐Edit# 定位一级窗口 ‘打开’,即弹出的Windows界面dialog = win32gui.FindWindow("#32770", title)# 二级窗口ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, "ComboBoxEx32", None)# 三级窗口ComboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, "ComboBox", None)# 定位到四级窗口,文件名输入框edit = win32gui.FindWindowEx(ComboBox, 0, "Edit", None)# 定位打开按钮,打开按钮只有两级目录:#32770‐Button 四级button = win32gui.FindWindowEx(dialog, 0, "Button", None)# 判断传参filePath路径是否存在if os.path.exists(filePath):# 文件名编辑框中输入文件路径win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, filePath)time.sleep(2)# 点击打开按钮win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)else:# 抛出异常raise(filePath + "文件不存在")filepath = r"C:\Users\Administrator\Pictures\测试图片\滑稽.jpg"
time.sleep(5)
# 调用upload方法并传入参数
upload(filePath=filepath)
print("文件上传成功")
time.sleep(5)
driver.quit()

②、第三方工具pyautogui

安装: pip install pyautogui

五、三大等待

5.1、强制等待 time.sleep()

5.2、智能等待(隐式等待) driver.implicitly_wait()

给页面上所有的元素设置全局等待时间,只要在设置的时间范围内找到了元素,就会执行下一个代码,设置最多等待的时间

from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(20)
url = 'https://www.baidu.com/'
driver.get(url)

5.3、显示等待

等待当前需要操作的元素 基于多种条件+等待元素
多种条件:等待元素可见?等待url跳转为xxx?等待新窗口出现?很多场景条件

from selenium import webdriver
# 导入By
from selenium.webdriver.common.by import By
# 导入webdriver等待类
from selenium.webdriver.support.ui import WebDriverWait
# 导入预期条件设置类
from selenium.webdriver.support import expected_conditions as EC
# 创建一个浏览器
driver = webdriver.Chrome()
# 访问百度
url = 'http://www.baidu.com'
driver.get(url)# 浏览器总共等待10秒,在10秒内,每隔0.5秒去使用id的方式定位一下元素,如果定位到,就结束等待,如果定位不到同时没有大于10秒,则继续等待
el = WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.ID,'lg')))

以显示等待为主,以强制等待为辅

六、三大切换

6.1、窗口切换

在页面点击某个链接后,会再打开一个标签页,想在新标签页上进行操作,需要先切换窗口,句柄是窗口的唯一标识,所以只需要切换句柄,就能到对应的标签页进行操作

# 获取窗口句柄列表
wins = driver.window_handles
# 切换到对应窗口
driver.switch_to.window(wins[0])

代码示例:

from selenium import webdriver
import time
# 创建一个浏览器对象
driver = webdriver.Chrome()
# 访问58
url = "https://tj.58.com/"
driver.get(url)
el = driver.find_element_by_link_text("租房")
# 打印当前浏览器句柄
print("点击之前的浏览器句柄是:", driver.window_handles)
print("点击之前的url地址是:", driver.current_url)
el.click()
print("点击之后的浏览器句柄是:", driver.window_handles)
print("点击之后的url地址是:", driver.current_url)
time.sleep(1)
wins = driver.window_handles
# 切换到之前的窗口
driver.switch_to.window(wins[0])

6.2、切换iframe或frame

方法说明
driver.switch_to.frame(a)切换框架,其中a可以是frame元素的name值、id值、索引值或 frame 对应的元素对象
driver.switch_to.default_content()切换到最外层框架
driver.switch_to.parent_frame()切换到上一层框架

有时候元素定位不到,可能是在iframe框架中,需要先切换到框架内,在进行定位,例如163邮箱登录页面,账号框和密码框以及登录按钮等都在iframe标签内
在这里插入图片描述

代码示例:

from selenium import webdriver
import time
driver = webdriver.Chrome()
# 打开163邮箱
driver.get('http://mail.163.com/')
# 浏览器最大化
driver.maximize_window()
time.sleep(5)
# 定位登录框对应的iframe元素
el_iframe = driver.find_element_by_xpath('//*[contains(@id,"x-URS-iframe")]')
# 切换到iframe中
driver.switch_to.frame(el_iframe)
# 定位账号输入框
email = driver.find_element_by_name('email')
# 输入邮箱账号
email.send_keys('ceshi@163.com')
# 定位密码输入框
password = driver.find_element_by_name('password')
# 输入密码
password.send_keys('123456')
# 定位登录按钮
login_btn = driver.find_element_by_id('dologin')
# 点击登陆按钮
login_btn.click()
time.sleep(3)

6.3、

七、常用方法封装

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

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

相关文章

Java自定义集合-基于文件的泛型列表 LocalFileArrayList

Java实现基于文件的泛型列表 LocalFileArrayList 简介核心概念泛型文件操作实现细节构造函数读取和写入文件类型转换List 接口方法实现总结调用示例完整代码简介 LocalFileArrayList我自己随便起的,没怎么思考,不一定是最适合的名字。搞这东西主要是有些需求用到的数据量太大…

漏洞挖掘 | Selenium Grid 中的 SSRF

Selenium 网格框架上的基本服务器端请求伪造 最近&#xff0c;我正在阅读漏洞文章看到Peter Jaric写的一篇 Selenium Grid 文章&#xff1b;他解释了 Selenium Grid 框架上缺乏身份验证和安全措施强化的问题。 在网上进行了更多搜索&#xff0c;我发现 Selenium Grid 开箱即用…

【人工智能学习】8_人工智能其他通用技术

知识图谱 在看影视剧或小说时&#xff0c;若其中的人物很多、人物关系复杂&#xff0c;我们一般会用画人物关系图谱来辅助理解人物关系。那什么是知识图谱呢&#xff1f; 知识是人类对信息进行处理之后的认识和理解&#xff1b;对数据和信息的凝练、总结后的成果。 将信息转…

TaskRes: Task Residual for Tuning Vision-Language Models

文章汇总 当前VLMs微调中存在的问题 提示微调的问题 在提示调优中缺乏对先验知识保存的保证(me&#xff1a;即提示微调有可能会丢失预训练模型中的通用知识)。虽然预先训练的文本分支模块(如文本编码器和投影)的权重在提示调优范式中被冻结&#xff0c;但原始的良好学习的分类…

Linux 信号的产生

1. 概念 在Linux系统中&#xff0c;信号是一种进程间通信的机制&#xff0c;它允许操作系统或其他进程向特定进程发送异步通知。我们可以通过命令 kill -l来查看信号的种类&#xff1a; Linux系统中的信号可以分为两大类&#xff1a;传统信号和实时信号。从上图可以看出它们分…

AI助力智慧农田作物病虫害监测,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建花田作物种植场景下棉花作物常见病虫害检测识别系统

智慧农业是一个很大的应用市场&#xff0c;将当下如火如荼的AI模型技术与现实的农业生产场景相结合能够有效提升生产效率&#xff0c;农作物在整个种植周期中有很多工作需要进行&#xff0c;如&#xff1a;浇水、施肥、除草除虫等等&#xff0c;传统的农业作物种植生产管理周期…

Vivado FIR IP 详解 (一)

FIR滤波器是数字信号处理中常用的滤波器&#xff0c;除了通过Verilog代码自己实现外&#xff0c;Vivado提供了一个FIR滤波器 IP&#xff0c;可以直接调用。 一、什么是 Vivado FIR IP 核 FIR&#xff08;Finite Impulse Response&#xff09;滤波器即有限长单位冲激响应滤波器…

通信工程学习:什么是ODN光分配网络

ODN&#xff1a;光分配网络 ODN&#xff08;Optical Distribution Network&#xff0c;光分配网络&#xff09;是光接入网中的重要组成部分&#xff0c;它位于光线路终端&#xff08;OLT&#xff09;和光网络单元&#xff08;ONU&#xff09;/光网络终端&#xff08;ONT&#x…

【我的 PWN 学习手札】Tcache Poisoning

目录 前言 一、Tcachebin 的组织形式 二、Tcache Poisoning 三、测试与模板 前言 早期对于 Tcachebin 的引入&#xff0c;在提高分配释放效率的同时&#xff0c;也因毫无保护而变得尤为好攻击和利用。自 glibc-2.32 以后添加了 key 等保护机制&#xff0c;现在的 tcachebi…

必知的PDF转换软件:看2024大学生如何选择

你翻翻你文件的下载记录&#xff0c;是不是PDF文件占了大多数&#xff1f;很多是为了保证页面版式直接收到打印手填再扫描或者直接提交。但是如果能够直接在电脑上编辑之后直接转发或者打印是不是方便了很多&#xff1f;这次我就介绍几款可以进行PDF转换操作的工具&#xff0c;…

使用集成学习对不同的机器学习方法进行集成

数据入口&#xff1a;数据人才的现场调研 - Heywhale.com 本数据集中有 43 行&#xff0c;19 列&#xff0c;数据集包含如下字段&#xff1a; 首先读取数据&#xff1a; import pandas as pd# 读取Excel文件 data pd.read_excel(数据人才的现场调研.xls)可以输出每一列含有…

电脑维修的基本原则

要识别电脑故障&#xff0c;一定要遵循“先易后难”、“先外后内”及“先软后硬”原则&#xff0c;使维修更有效的进行。 一、先易后难 “先易后难”是指处理电脑故障时需要从最简单的事情做起&#xff0c;通过认真的观察后&#xff0c;再进行判断与维修&#xff0c;这样有利于…

104.游戏安全项目-基址的技术原理-基址的本质

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;易道云信息技术研究院 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要盲目相信…

react之jsx基础(2)高频使用场景

文章目录 1. **组件定义**2. **条件渲染**3. **列表渲染**4. **事件处理**5. **嵌套组件**6. **表单处理**7. **样式应用**8. **处理子组件** 在 React 中&#xff0c;JSX 的使用是非常广泛和高频的。以下是一些常见的高频使用场景及其示例&#xff0c;帮助你更好地理解 JSX 的…

工厂ERP采购管理,销售管理,仓库管理,财务管理,生产加工管理建设方案和源码实现(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本&#xff0c;并实时掌握各环节的运营状况。 在采购管理方面&#xff0c;系统能够处理采购订单、供应商管理和采购入库等流程&#xff…

大型语言模型 (LLM) 劫持攻击不断升级,导致每天损失超过 100,000 美元

Sysdig 威胁研究团队 (TRT) 报告称&#xff0c;LLMjacking&#xff08;大型语言模型劫持&#xff09;事件急剧增加&#xff0c;攻击者通过窃取的云凭证非法访问大型语言模型 (LLM)。 这一趋势反映了 LLM 访问黑市的不断增长&#xff0c;攻击者的动机包括个人使用和规避禁令和制…

网络工程师学习笔记——网络互连与互联网(二)

IP地址 是电脑在互联网上进行进行通信的“身份证” 是网络号主机号 网络号代表所处的网段&#xff0c;而主机号则代表电脑 ipv4有232个ip地址大约43亿 其中又分为A、B、C、D、E类地址 A&#xff1a;1.0.0.0~127.255.255.255&#xff08;首位0&#xff09; B&#xff1a;1…

solidwork剪裁实体

之前是这样&#xff1a; 效果如下&#xff1a;

ChatGPT个人专用版 pictureproxy.php SSRF漏洞

0x01 漏洞描述&#xff1a; ChatGPT个人专用版是一种基于人工智能的对话系统&#xff0c;旨在为用户提供个性化的交流体验。它能够理解和生成自然语言&#xff0c;帮助用户解决问题、获取信息或进行创意交流。通过不断学习和优化&#xff0c;ChatGPT个人专用版可以更好地适应用…

微信小程序07-开发进阶

零、文章目录 微信小程序07-开发进阶 1、案例&#xff1a;自定义标签栏 &#xff08;1&#xff09;案例分析 需求&#xff1a;通过前面的学习&#xff0c;我们知道微信小程序的底部标签栏可以在app.json全局配置文件中通过添加tabBar配置项的属性来实现。但是在实际开发中&…