web自动化学习笔记

news2024/9/23 6:02:28

目录

  • 一、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 os

driver = 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()

使用时需先导包

import time

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.coloradmin.cn/o/2156791.html

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

相关文章

MySQL:SQL语句执行过程

本篇文章会分析下一个 SQL 语句在 MySQL 中的执行流程&#xff0c;包括 SQL 的查询在 MySQL 内部会怎么流转&#xff0c;SQL 语句的更新是怎么完成的。 在分析之前我会先带着你看看 MySQL 的基础架构&#xff0c;知道了 MySQL 由那些组件组成以及这些组件的作用是什么&#xf…

Spring_AMQP

文章目录 一、SpringAMQP二、SpringAMQP应用2.1、消息发送2.2、消息接收 一、SpringAMQP SpringAMQP是基于RabbitMQ封装的一套模板&#xff0c;并且还利用SpringBoot对其实现了自动装配&#xff0c;使用起来非常方便。 SpringAmqp的官方地址。 SpringAMQP提供了三个功能&am…

python27 安装pywinauto-0.6.8

文章目录 环境所需依赖依赖查找所需依赖链接1. comtypes2. six3. pyWin324. (optional) Pillow (to make screenshoots)5. pywinauto 安装结果 环境 windows 11 Python 2.7 setuptools 18.0.1 pip 18.1 所需依赖 依赖查找 按照官方文档&#xff08;https://pywinauto.readt…

MMROTATE 1.X特征图可视化(绘制Heat Map)

本文参考MMYOLO官方的特征图可视化教程&#xff0c;对MMROTATE相关算法进行特征图可视化 1. 新建featmap_vis_demo.py文件 在mmrotate项目文件夹下新建 featmap_vis_demo.py &#xff1a; # Copyright (c) OpenMMLab. All rights reserved. import argparse import os from t…

java intellij idea开发步骤,使用指南,工程创建与背景色字体配置,快捷键

intellij idea2021 配置背景色&#xff0c;字体大小&#xff0c;主题 快捷键

STM32系统时钟

时钟为单片机提供了稳定的机器周期&#xff0c;从而使我们的系统能够正常的运行 时钟就像我们人的心脏&#xff0c;一旦有问题就整个都会崩溃 stm32有很多外设&#xff0c;但不是所有的外设都使用同一种时钟频率工作&#xff0c;比如我们的内部看门狗和RTC 只要30几k的频率就…

计算机毕业设计推荐-基于python的白酒销售数据可视化分析

精彩专栏推荐订阅&#xff1a;在下方主页&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设木哥&#x1f525; &#x1f496; 文章目录 一、白酒销售数据…

react:React Hook函数

使用规则 只能在组件中或者其他自定义的Hook函数中调用 只能在组件的顶层调用&#xff0c;不能嵌套在if、for、 其他函数中 基础Hook 函数 useState useState是一个hook函数&#xff0c;它允许我们向组件中添加一个状态变量&#xff0c;从而控制影响组件的渲染结果 示例1…

[Excel VBA]如何使用VBA自动生成图表

在Excel中&#xff0c;图表是可视化数据的重要工具。以下是一个VBA代码示例&#xff0c;帮助你自动生成图表。 1. 代码说明 该代码会根据指定数据范围创建一个柱状图&#xff0c;并设置图表的基本属性。 2. VBA代码 Sub CreateChart()Dim ws As WorksheetDim chartObj As Ch…

百度营销转化追踪(网页JS布码)

引言&#xff1a;使用百度营销api配置网站上各个模块组件的转化追踪&#xff0c;统计网站上的各组件模块点击等信息。 一、选择接入方式&#xff08;本文选择的是网页JS布码&#xff09; 参考文档&#xff1a;百度营销-商业开发者中心百度开发者中心是一个面向开发者的知识分享…

Java启动Tomcat: Can‘t load IA 32-bit .dll on a AMD 64-bit platform报错问题解决

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

Java-数据结构-排序-(二) (๑¯∀¯๑)

文本目录&#xff1a; ❄️一、交换排序&#xff1a; ➷ 1、 冒泡排序&#xff1a; ▶ 代码&#xff1a; ➷ 2、 快速排序&#xff1a; ☞ 基本思想&#xff1a; ☞ 方法一&#xff1a;Hoare法 ▶ 代码&#xff1a; ☞ 方法二&#xff1a;挖坑法 ▶ 代码&#xff1a; ☞ 方法三…

GNU编译器(GCC):编译的4个过程及.elf、.list、.map文件功能说明

0 参考资料 GNU-LD-v2.30-中文手册.pdf GNU linker.pdf1 前言 一个完整的编译工具链应该包含以下4个部分&#xff1a; &#xff08;1&#xff09;编译器 &#xff08;2&#xff09;汇编器 &#xff08;3&#xff09;链接器 &#xff08;4&#xff09;lib库 在GNU工具链中&…

Linux-文件的压缩、解压

Linux系统常见有两种压缩格式&#xff0c;后缀分别是&#xff1a; .tar 称之为tarball&#xff0c;简单的将文件组装到一个.tar的文件内&#xff0c;并没有太多的文件体积减少&#xff0c;仅仅是简单的封装.gz gzip格式压缩文件&#xff0c;可以极大的减少压缩后的体积 针对这…

Lua中..和...的使用区别

一. .. 的用法 二. ... 的用法 在 Lua 中&#xff0c;... 是一个特殊符号&#xff0c;它用于表示不定数量的参数。当你在函数定义或调用中使用 ... 时&#xff0c;它可以匹配任意数量的参数&#xff0c;并将它们作为列表传递。在您的代码示例中&am…

基于SSD的RAG技术方案,推动LLM规模扩展

随着大型语言模型&#xff08;LLM&#xff09;的不断发展&#xff0c;它们在虚拟助手、聊天机器人和对话系统等应用中发挥着重要作用。然而&#xff0c;LLM面临的挑战之一是它们可能会生成虚假或误导性的信息&#xff0c;即所谓的“幻觉”。为了解决这一问题&#xff0c;检索增…

Java数据库连接——JDBC

目录 1、JDBC简介 2、JDBC应用 2.1 建立数据库连接 2.1.1 DriverManager静态方法获取连接 2.1.2 DataSource对象获取 2.2 获取SQL执行对象 2.2.1 SQL注入 2.2.2 Statement(执行静态SQL) 2.2.3 PreparedStatement(预处理的SQL执行对象) 2.3 执行SQL并返回结果 2.4 关…

Error when custom data is added to Azure OpenAI Service Deployment

题意&#xff1a;在向 Azure OpenAI 服务部署添加自定义数据时出现错误。 问题背景&#xff1a; I receive the following error when adding my custom data which is a .txt file (it doesnt matter whether I add it via Azure Cognitive Search, Azure Blob Storage, or F…

证书学习(五)Java实现RSA、SM2证书颁发

目录 一、知识回顾1.1 X.509 证书1.2 X509Certificate 类二、代码实现2.1 Maven 依赖2.2 RSA 证书颁发1)PfxGenerateUtil 证书文件生成工具类2)CertDTO 证书中间类3)RSACertGenerateTest RSA证书生成测试类4)执行结果2.3 SM2 证书颁发1)SM2Utils 国密SM2算法工具类2)SM2C…

查询一条 SQL 语句的流程

查询一条sql语句的流程 连接器:建立连接&#xff0c;管理连接、校验用户身份查询缓存:查询语句如果命中查询缓存则直接返回&#xff0c;否则继续往下执行&#xff08;MSQL8.0 已删除&#xff09;解析 SQL&#xff1a;通过解析器对 SQL 查询语句进行词法分析、语法分析&#xf…