【Python】Python之Selenium基础教程+实战demo:提升你的测试+测试数据构造的效率!
这里写目录标题
- 什么是Selenium?
- Selenium基础用法详解
- 环境搭建
- 编写第一个Selenium脚本
- 解析脚本
- 常用的元素定位方法
- 常用的WebDriver方法
- 等待机制
- Selenium高级技巧详解
- 页面元素操作
- 处理弹窗和警告框
- 截图和日志记录
- 多窗口和多标签页操作
- 一个实战的小demo
- 步骤一:py文件代码
- 步骤二:excel文件
- 步骤三:执行结果
- 总结
- 相关文章
什么是Selenium?
Selenium是一套用于Web应用程序自动化测试的开源工具。它支持多种浏览器(如Chrome、Firefox、Safari等)和多种编程语言(如Java、Python、C#等),使测试人员可以编写脚本来自动化执行测试用例,提升测试效率。
Selenium基础用法详解
环境搭建
在开始编写Selenium脚本之前,我们需要搭建开发环境。
-
安装Python:从Python官网下载并安装最新版本的Python。
-
安装Selenium库:
pip install selenium
-
确认你的Chrome浏览器版本。你可以在Chrome浏览器中打开 chrome://settings/help 查看版本号。
-
下载浏览器驱动:
ChromeDriver官网下载地址
ChromeDriver官网最新版下载地址
ChromeDriver国内镜像下载地址
ChromeDriver国内镜像最新版下载地址
windows/mac用户需要将下载的驱动程序路径,添加到系统的环境变量中,方便Selenium识别和调用。
确认环境变量命令:chromedriver
编写第一个Selenium脚本
让我们通过一个简单的示例,了解如何使用Selenium进行网页自动化操作(代码示例,可以直接运行)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time# 创建一个Chrome浏览器实例
driver = webdriver.Chrome()try:# 打开百度首页driver.get("https://www.baidu.com")# 确保页面加载完成time.sleep(2)# 找到搜索框search_box = driver.find_element(By.NAME, "wd")# 输入搜索关键词search_box.send_keys("Selenium Python")# 提交搜索search_box.send_keys(Keys.RETURN)# 等待页面加载time.sleep(2)# 获取搜索结果的标题results = driver.find_elements(By.CSS_SELECTOR, 'h3')print("搜索结果标题:")for index, result in enumerate(results):print(f"结果 {index + 1}: {result.text}")# 点击第一个搜索结果(如果存在)if results:results[0].click()time.sleep(10) # 等待页面加载# 打印当前页面的标题print("当前页面标题:", driver.title)time.sleep(10)
finally:# 关闭浏览器driver.quit()
解析脚本
-
初始化WebDriver:创建一个Chrome浏览器实例,通过
webdriver.Chrome()
来指定使用的浏览器驱动。 -
打开网站:使用
get
方法访问xx的首页(https://www.baidu.com
) -
定位搜索框:通过
find_element(By.NAME, "wd")
方法找到搜索框元素 -
输入搜索关键词:使用
send_keys
方法将"Selenium Python"输入到搜索框中,在使用send_keys(Keys.RETURN)
模拟按下回车键提交搜索。 -
获取搜索结果标题:通过
find_elements(By.CSS_SELECTOR, 'h3')
方法获取所有搜索结果的标题,使用CSS选择器定位到h3
标签。 -
打印搜索结果标题:遍历搜索结果,使用
enumerate
函数为每个结果编号,并打印出每个结果的标题。 -
点击第一个搜索结果:检查是否有搜索结果,如果存在,就使用
results[0].click()
点击第一个结果 -
打印当前页面标题:在新页面加载完成后,使用
driver.title
获取并打印当前页面的标题。 -
关闭浏览器:使用
driver.quit()
确保无论程序是否发生异常,都会关闭浏览器实例,释放资源。
这就是我们简单的自动化demo,通常可以用在输入框较多需要构造大批量数据,或者自动化回归测试的时候使用
常用的元素定位方法
Selenium提供了多种方法来定位网页元素,选择合适的方法可以提高脚本的稳定性和可维护性。以下是几种常用的定位方式:
- By.ID:通过元素的ID属性定位。
driver.find_element(By.ID, "element_id")
- By.NAME:通过元素的名称属性定位。
driver.find_element(By.NAME, "element_name")
- By.XPATH:通过XPath表达式定位,适用于复杂的层级结构。
driver.find_element(By.XPATH, "//div[@class='example']")
- By.CSS_SELECTOR:通过CSS选择器定位,语法简洁。
driver.find_element(By.CSS_SELECTOR, ".class > #id")
- By.CLASS_NAME:通过元素的类名定位。
driver.find_element(By.CLASS_NAME, "class_name")
- By.TAG_NAME:通过元素的标签名定位。
driver.find_element(By.TAG_NAME, "button")
- By.LINK_TEXT 和 By.PARTIAL_LINK_TEXT:通过链接文本定位。
driver.find_element(By.LINK_TEXT, "点击这里") driver.find_element(By.PARTIAL_LINK_TEXT, "点击")
注意:在正常的情况下,我们通常只会用到id、name和Xpath,但一定要注意获取的元素要是唯一的。
常用的WebDriver方法
掌握一些常用的WebDriver方法,可以大大提升编写脚本的效率和灵活性。
注意:driver
是我们之前定义浏览器实例的实例,如下:
driver = webdriver.Chrome()
因为这个driver
实例,所以才能调用下面的方法
- driver.get(url):打开指定URL。
- driver.find_element(by, value):定位单个元素。
- driver.find_elements(by, value):定位多个元素。
- driver.send_keys(keys):向元素输入文本。
- driver.click():点击元素。
- driver.get_title():获取当前页面的标题。
- driver.get_current_url():获取当前页面的URL。
- driver.back():浏览器后退。
- driver.forward():浏览器前进。
- driver.refresh():刷新页面。
- driver.quit():关闭浏览器。
等待机制
在自动化测试中,页面加载速度不一,合理的等待机制可以提高脚本的稳定性。
-
隐式等待:
driver.implicitly_wait(10) # 最多等待10秒
在查找元素时,如果元素未立即出现,WebDriver会等待指定的时间。
-
显式等待:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as ECwait = WebDriverWait(driver, 10) element = wait.until(EC.presence_of_element_located((By.ID, "element_id")))
根据特定条件等待元素出现,更加灵活和精准。
-
线程等待:
import time time.sleep(5) # 强制等待5秒
不推荐使用,容易导致测试效率低下。
Selenium高级技巧详解
页面元素操作
除了基本的点击和输入,Selenium还支持更多复杂的操作,如下拉菜单选择、拖拽、鼠标悬停等。
-
选择下拉菜单中的选项:
from selenium.webdriver.support.ui import Selectselect_element = Select(driver.find_element(By.ID, "dropdown")) select_element.select_by_visible_text("选项1") # 也可以通过值或索引选择 # select_element.select_by_value("value1") # select_element.select_by_index(1)
-
鼠标悬停:
from selenium.webdriver.common.action_chains import ActionChainselement = driver.find_element(By.ID, "hover_element") ActionChains(driver).move_to_element(element).perform()
-
拖拽操作:
source = driver.find_element(By.ID, "source") target = driver.find_element(By.ID, "target") ActionChains(driver).drag_and_drop(source, target).perform()
处理弹窗和警告框
Web应用中常常会出现各种弹窗和警告框,Selenium提供了简单的方法来处理它们。
# 切换到警告框
alert = driver.switch_to.alert# 获取警告框文本
alert_text = alert.text
print(alert_text)# 接受警告框
alert.accept()# 取消警告框
alert.dismiss()# 输入文本到警告框(如果有输入框)
alert.send_keys("测试")
截图和日志记录
为了更好地调试和记录测试过程,Selenium支持截图和日志记录功能。
-
截图:
driver.save_screenshot("screenshot.png")
-
获取页面源代码:
page_source = driver.page_source
-
日志记录:
import logginglogging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) logger.info("这是一个日志信息")
多窗口和多标签页操作
在现代Web应用中,可能会涉及到多个窗口或标签页的切换,Selenium同样能够轻松应对。
# 获取当前窗口句柄
main_window = driver.current_window_handle# 打开新窗口或标签页
driver.execute_script("window.open('https://www.example.com')")# 获取所有窗口句柄
windows = driver.window_handles# 切换到新窗口
for window in windows:if window != main_window:driver.switch_to.window(window)break# 在新窗口中执行操作
driver.find_element(By.ID, "new_window_element").click()# 切换回主窗口
driver.switch_to.window(main_window)
一个实战的小demo
这是一个通过读取excel文件获取数据,然后封装方法去执行的简单demo。
步骤一:py文件代码
import time, os # 导入时间和操作系统模块
import pandas as pd # 导入pandas库用于数据处理
from selenium import webdriver # 导入selenium的webdriver模块
from selenium.webdriver.common.by import By # 导入定位元素的By类
from selenium.webdriver.common.keys import Keys # 导入键盘操作的Keys类class CodeMoss(object):# 初始化方法def __init__(self):self.url = "https://pc.aihao123.cn/index.html?#/chat" # 设置要访问的URLself.driver = webdriver.Chrome() # 创建Chrome浏览器实例# 读取Excel文件中的数据def read_excel(self):path = os.path.dirname(os.path.dirname(__file__)) # 获取当前文件的上级目录data = os.path.join(path, 'selenium代码/codemoss_data.xlsx') # 拼接Excel文件路径df = pd.read_excel(data, index_col=None, header=None) # 读取Excel文件test_data = [] # 初始化测试数据列表for row in df.itertuples(index=False): # 遍历每一行数据test_data.append({"name": row[0], "type": row[1], "element": row[2], "text": row[3], "times": row[4],"procedure": row[5]}) # 将每行数据转换为字典并添加到列表中del test_data[0] # 删除第一行(通常是表头)return test_data # 返回测试数据列表# 退出浏览器的方法def out_moss(self):time.sleep(10) # 等待10秒self.driver.quit() # 关闭浏览器# 根据XPath点击元素def element_click_xpath(self, Xpath):self.driver.find_element(By.XPATH, str(Xpath)).click() # 查找并点击指定XPath的元素# 根据ID点击元素def element_click_id(self, id):self.driver.find_element(By.ID, str(id)).click() # 查找并点击指定ID的元素# 根据XPath输入文本def element_text_xpath(self, Xpath, text):self.driver.find_element(By.XPATH, str(Xpath)).send_keys(text) # 查找指定XPath的元素并输入文本# 根据ID输入文本def element_text_id(self, id, text):self.driver.find_element(By.ID, str(id)).send_keys(text) # 查找指定ID的元素并输入文本# 等待指定的时间def element_times(self, times):time.sleep(times) # 暂停执行指定的时间# 登录操作的方法def login_moss(self):print(self.read_excel()) # 打印读取的Excel数据self.driver.get(self.url) # 打开指定的URLfor data in self.read_excel(): # 遍历读取的测试数据print(data['procedure']) # 打印当前操作步骤if data['name'] == "click": # 如果操作是点击if data['type'] == "xpath": # 根据类型判断self.element_click_xpath(data['element']) # 点击XPath元素if data['type'] == "id":self.element_click_id(data['element']) # 点击ID元素if data['name'] == "text": # 如果操作是输入文本if data['type'] == "xpath":self.element_text_xpath(data['element'], data['text']) # 输入XPath元素文本if data['type'] == "id":self.element_text_id(data['element'], data['text']) # 输入ID元素文本if data['name'] == "times": # 如果操作是等待self.element_times(data['times']) # 等待指定时间self.out_moss() # 执行退出操作if __name__ == '__main__':CodeMoss().login_moss() # 创建CodeMoss实例并执行登录操作
步骤二:excel文件
这个excel文件跟上面的py文件是在同一个级别。注意文件地址。
文件内容如下:
步骤三:执行结果
总结
Selenium作为一款强大的自动化测试工具,凭借其灵活性和广泛的支持,已成为众多测试人员的首选。
如果你对Selenium还有更多疑问或想了解更深入的高级技巧,欢迎在评论区留言,我们一起探讨!
相关文章
【OpenAI】(一)获取OpenAI API Key的多种方式全攻略:从入门到精通,再到详解教程!!
【VScode】(二)VSCode中的智能AI-GPT编程利器,全面揭秘CodeMoss & ChatGPT中文版
【CodeMoss】(三)集成13种AI大模型(GPT4、o1等)、支持Open API调用、自定义助手、文件上传等强大功能,助您提升工作效率! >>> - CodeMoss & ChatGPT-AI中文版
相关文章:
【Python】Python之Selenium基础教程+实战demo:提升你的测试+测试数据构造的效率!
这里写目录标题 什么是Selenium?Selenium基础用法详解环境搭建编写第一个Selenium脚本解析脚本常用的元素定位方法常用的WebDriver方法等待机制 Selenium高级技巧详解页面元素操作处理弹窗和警告框截图和日志记录多窗口和多标签页操作 一个实战的小demo步骤一&#…...
Ubuntu中批量重命名,rename
你可以使用下面的命令批量重命名这些文件,在文件名中插入 _1: 方式一 使用 mv 命令批量重命名 如果你已经在终端中,且当前目录包含这些文件,可以执行以下命令: mv ai.c ai_1.c mv ai.h ai_1.h mv ao.c ao_1.c mv a…...
LINUX 下 NODE 安装与配置
一、官网地址: (中文网)https://nodejs.cn/ (英文网)https://nodejs.org/en/ 二、下载安装包 2.1、下载地址:下载 | Node.js 中文网 https://nodejs.cn/download/ 2.2、使用 wget 命令下载到linux 服务器…...
Vue3 el-tree-v2渲染慢的问题
一、现象 使用el-tree-v2处理组织架构权限时,整个树的数据在8500条,勾选数据8200条,打开页面需要8~10秒,用户无法接受。 经调试,发现主要卡在树的渲染回显上(勾选数据少时,很快,勾选…...
【redis初阶】浅谈分布式系统
目录 一、常见概念 1.1 基本概念 2.2 评价指标(Metric) 二、架构演进 2.1 单机架构 2.2 应用数据分离架构 2.3 应用服务集群架构 2.4 读写分离/主从分离架构 2.5 引入缓存 ⸺ 冷热分离架构 2.6 数据库分库分表 2.7 业务拆分 ⸺ 引入微服务 redis学习&…...
模式识别与机器学习 | 十一章 概率图模型基础
隐马尔科夫模型(Hidden Markov Model,HMM) HMM是建模序列数据的图模型 1、第一个状态节点对应一个初始状态概率分布 2、状态转移矩阵A, 3、发射矩阵概率B 4、对特定的(x,y)的联合概率可以表示为 α递归计算——前向算法β递归…...
Linux基本指令(1)
一、ls指令 功能:对于目录,显示这个目录下的目录名以及文件名;对于文件,显示文件名 后面可接命令行选项配合使用,接选项时ls与选项以及选项与选项之间要有一个空格; 这里先学习了两个选项:-l…...
逐“绿”前行 企业综合能源管控低碳转型如何推进?
引言: 在“双碳”战略指引下,中国低碳节能各项工作有序推进,逐步建立起碳达峰碳中和“1N”的政策体系,重点领域、重点行业及各地区的碳达峰实施方案相继出台。能源对于促进经济社会发展、增进人民福祉至关重要。近年来࿰…...
springboot和vue配置https请求
项目场景: 代码发布到线上使用https请求需要配置ssl证书,前后端都需要修改。 问题描述 如图,我们在调用接口时报如下错误,这就是未配置ssl但是用https请求产生的问题。 解决方案: 前端:在vite.config.js文…...
数据库(2)--建表 表操作
1.建表 语法: create table if not exists 表名( 类型名 类型 comment ‘注释内容’, ... )设置字符集编码与排序规则; create table if not exists student( name char(10) comment 姓名, id bigint comment 学号 )character set utf8mb4 collate utf8mb4_0900_a…...
泷羽sec----学会并玩转powershell【基础1-2】
声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…...
2 逻辑符号
在文件和目录的判断或者其他情况中,可以组合使用多个条件。 逻辑与 (&&) 逻辑与运算符 && 用于在多个条件都为真时执行某个操作。 # 判断文件是否存在且可读 if [ -f "$file" ] && [ -r "$file" ]; thenecho "…...
Android基于回调的事件处理
Android 中的回调机制:基于回调的事件处理详解 在 Android 开发中,回调(Callback)是一种常见的事件处理机制,主要用于异步操作和事件通知。与传统的基于监听器的事件处理相比,回调机制更加灵活、通用&…...
跨界融合:人工智能与区块链如何重新定义数据安全?
引言:数据安全的挑战与现状 在信息化驱动的数字化时代,数据已成为企业和个人最重要的资产之一。然而,随着网络技术的逐步优化和数据量的爆发式增长,数据安全问题也愈变突出。 数据安全现状:– 数据泄露驱动相关事件驱…...
qml SpringAnimation详解
1. 概述 SpringAnimation 是 Qt Quick 中用于模拟弹簧效果的动画类。它通过模拟物体在弹簧力作用下的反应,产生一种振荡的动画效果,常用于模拟具有自然回弹、弹性和振动的动态行为。这种动画效果在 UI 中广泛应用,特别是在拖动、拉伸、回弹等…...
Qt 5.14.2 学习记录 —— 칠 QWidget 常用控件(2)
文章目录 1、Window Frame2、windowTitle3、windowIcon4、qrc机制5、windowOpacity 1、Window Frame 在运行Qt程序后,除了用户做的界面,最上面还有一个框,这就是window frame框。对于界面的元素,它们的原点是Qt界面的左上角或win…...
Windows service运行Django项目
系统:Windows Service 软件:nssm,nginx 配置Django项目 1、把Django项目的静态文件整理到staticfiles文件夹中 注:settings中的设置 STATIC_URL /static/ STATIC_ROOT os.path.join(BASE_DIR, staticfiles/) STATICFILES_DI…...
notebook主目录及pip镜像源修改
目录 一、notebook主目录修改二、pip镜像源修改 一、notebook主目录修改 在使用Jupyter Notebook进行数据分析时,生成的.ipynb文件默认会保存在Jupyter的主目录中。通常情况下,系统会将Jupyter的主目录设置为系统的文档目录,而文档目录通常位…...
Linux(Centos 7.6)命令详解:touch
1.命令作用 如果文件不存在将创建一个空文件;修改文件修改访问时间。 2.命令语法 Usage: touch [OPTION]... FILE... 3.参数详解 Usage: -a,access 只修改访问时间-c,不创建任何文件-d,--dateSTRING 解析STRING并使用它替代…...
ubuntu 下生成 core dump
在Ubuntu下,发现程序崩溃后不生成core dump文件, 即使设置了ulimit -c unlimited后仍然无效。 1.ulimit -c unlimited 输出的的含义是核心转储文件的大小限制,单位是blocks,默认是0,表示不生成core dump文件。 2. 重设core_pattern ulimit -c unlimited后,核心转储文件…...
大数据智能选课系统
1.产品介绍 产品名称:大数据智能选课系统 一、产品概述 随着信息技术的快速发展,大数据技术在教育领域的应用越来越广泛。针对当前高校选课过程中的繁琐操作、资源分配不均等问题,我们研发了一款基于大数据智能分析的选课系统。本系统旨在…...
HTTP-响应协议
HTTP的响应过程? 浏览器请求数据--》web服务器过程:请求过程 web服务器将响应数据-》到浏览器:响应过程 响应数据有哪些内容? 1.和请求数据类似。 2. 响应体中存储着web服务器返回给浏览器的响应数据。并且注意响应头和响应体之间…...
[离线数仓] 总结三、Hive数仓DIM层开发
5.9 数仓开发之DIM层 DIM层设计要点: (1)DIM层的设计依据是维度建模理论,该层存储维度模型的维度表。 (2)DIM层的数据存储格式为orc列式存储+snappy压缩。 (3)DIM层表名的命名规范为dim_表名_全量表或者拉链表标识(full/zip)。 -- 数仓开发之DIM层 -- DIM层设计要点:…...
搭建RK3588开发板Qt交叉编译环境
一、开发环境 在虚拟机里安装Ubuntu20.04Qt5.14.2交叉编译器gcc-linaro-7.5.0 二、相关资料下载 在虚拟机里安装Ubuntu20.04 Ubuntu20.04镜像下载(https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/)安装Qt5.14.2 下载安装包和源码 安装包(http…...
【Rust自学】11.3. 自定义错误信息
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 11.3.1. 添加错误信息 在 11.2. 断言(Assert) 中我们学习了assert!、assert_eq!和assert_ne!这三个宏,而这篇文章讲的就是它…...
ROS核心概念解析:从Node到Master,再到roslaunch的全面指南
Node 在ROS中,最小的进程单元就是节点(node)。一个软件包里可以有多个可执行文件,可执行文件在运行之后就成了一个进程(process),这个进程在ROS中就叫做节点。 从程序角度来说,node就是一个可执行文件&…...
Autodl安装tensorflow2.10.0记录
首先租用新实例(我选的是3080*2卡),由于基础镜像中没有2.10.0版本,选miniconda3的基础环境 创建虚拟环境:conda create --name xxx python3.8(环境名)激活虚拟环境:conda activate x…...
Linux第一课:c语言 学习记录day06
四、数组 冒泡排序 两两比较,第 j 个和 j1 个比较 int a[5] {5, 4, 3, 2, 1}; 第一轮:i 0 n:n个数,比较 n-1-i 次 4 5 3 2 1 // 第一次比较 j 0 4 3 5 2 1 // 第二次比较 j 1 4 3 2 5 1 // 第三次比较 j 2 4 3 2 1 5 // …...
代码随想录day03
203 链表基础操作 class Solution { public:ListNode* removeElements(ListNode* head, int val) {while (head!NULL&&head->valval){ListNode* temphead;headhead->next;delete temp;}ListNode* curhead;while (cur!NULL&&cur->next!NULL){if(cur-…...
python-leetcode-无重复字符的最长子串
3. 无重复字符的最长子串 - 力扣(LeetCode) class Solution:def lengthOfLongestSubstring(self, s: str) -> int:char_set set()left 0max_length 0for right in range(len(s)):while s[right] in char_set:char_set.remove(s[left])left 1char_…...
30天开发操作系统 第 12 天 -- 定时器 v1.0
前言 定时器(Timer)对于操作系统非常重要。它在原理上却很简单,只是每隔一段时间(比如0.01秒)就发送一个中断信号给CPU。幸亏有了定时器,CPU才不用辛苦地去计量时间。……如果没有定时器会怎么样呢?让我们想象一下吧。 假如CPU看不到定时器而仍想计量时…...
RNN之:LSTM 长短期记忆模型-结构-理论详解(Matlab向)
前言 递归!循环神经网络Recurrent Neural Network 循环神经网络(又称递归神经网络,Recurrent Neural Network,RNN)。是一种用于处理序列数据的神经网络结构,具有记忆功能,能够捕捉序列中的时间…...
vue的路由守卫逻辑处理不当导致部署在nginx上无法捕捉后端异步响应消息等问题
近期对前端的路由卫士有了更多的认识。 何为路由守卫?这可能是一种约定俗成的名称。就是VUE中的自定义函数,用来处理路由跳转。 import { createRouter, createWebHashHistory } from "vue-router";const router createRouter({history: cr…...
C++版的飞翔的小鸟
忙了几天,写了个小鸟游戏打发时间。 MINGWOPENGL 作者很懒,具体看readme.txt吧。 好吧,这就是个当网盘用的,没有售后服务的,而且还不怎么会上传文件。。。😂😂 顺便问下,这破玩意上…...
深入详解自然语言处理(NLP)中的语言模型:BERT、GPT及其他预训练模型的原理与应用
【自然语言处理】——深入详解自然语言处理(NLP)中的语言模型:BERT、GPT及其他预训练模型的原理与应用 自然语言处理(NLP)是人工智能(AI)领域中的重要分支,旨在通过计算机处理和分析…...
EFCore HasDefaultValueSql (续1 ValueGeneratedOnAdd)
前情:EFCore HasDefaultValueSql 小伙伴在使用 HasDefaultValueSql 时,对相关的 ValueGeneratedOnAdd 也有了疑问: ValueGeneratedOnAdd 和 HasDefaultValueSql 是 Entity Framework Core 中用于管理字段默认值的两种不同配置方式࿰…...
React PureComponent使用场景
1. 基本概念 1.1 什么是 PureComponent PureComponent 是 React 提供的一个优化类组件,它通过自动实现 shouldComponentUpdate 生命周期方法,对 props 和 state 进行浅比较来决定是否需要重新渲染组件。 1.2 与 Component 的区别 // 普通 Component …...
初学者如何利用AI辅助编程快速搭建软件原型
在当今这个快速发展的科技时代,AI辅助编程已成为软件开发领域的一大助力,尤其在搭建软件原型阶段,更是能帮助开发者快速探索众多想法,创造出新事物。吴恩达老师最近分享了关于搭建简单Web应用原型的一些最佳实践,其中重…...
六、Angular 发送请求/ HttpClient 模块
一、应用 HttpClient 模块 angular/common/http 中的 HttpClient 类基于浏览器提供的 XMLHttpRequest 接口。要想使用 HtpClient 模块,就要先导入 Anqular 的 HttpClientModule。大多数 Web 应用程序都会在根模块 AppModule 中导入它。 编辑 src/app/app.module.ts…...
11_Redis数据类型-Geo地理位置
1.Geo地理位置介绍 1.1 基本概念 Redis中的GEO(Geographic)是一种专门用于处理地理位置信息的功能模块,自Redis 3.2版本引入。它特别适合用于LBS(基于位置的服务)应用,如查找附近的餐馆、用户或兴趣点等。Redis GEO的实现依赖于有序集合(sorted set),并且利用了Geoh…...
电脑每次开机卡到windows图标界面进不去
我遇到的现象是: 可以正常开机,也可以重装系统,主板电池换过,硬盘,内存也没问题,但每次开机都会卡到这个界面不动,也不崩溃,也进不去系统。最后的解决方法:换CPU&#x…...
如何将 DotNetFramework 项目打包成 NuGet 包并发布
如何将 DotNetFramework 项目打包成 NuGet 包并发布 在软件开发过程中,将项目打包成 NuGet 包并发布到 NuGet 库,可以让其他开发者方便地引用和使用你的项目成果。以下是将 WixWPFWizardBA 项目打包成 NuGet 包并发布的详细步骤: 1. 创建 .n…...
7 分布式定时任务调度框架
先简单介绍下分布式定时任务调度框架的使用场景和功能和架构,然后再介绍世面上常见的产品 我们在大型的复杂的系统下,会有大量的跑批,定时任务的功能,如果在独立的子项目中单独去处理这些任务,随着业务的复杂度的提高…...
鸿蒙UI开发——日历选择器
1、概 述 在项目开发中,我们时常会用到日历选择器,效果如下: ArkUI已经为我们提供了组件,我们可以直接使用,下面针对日历组件做简单介绍。 2、CalendarPickerDialog 接口定义如下: // 定义日历选择器弹…...
【python基础——异常BUG】
什么是异常(BUG) 检测到错误,py编译器无法继续执行,反而出现错误提示 如果遇到错误能继续执行,那么就捕获(try) 1.得到异常:try的执行,try内只可以捕获一个异常 2.预案执行:except后面的语句 3.传入异常:except … as uestcprint(uestc) 4.没有异常:else… 5.鉴定完毕,收尾的语…...
【论文复现】量子海洋捕食者算法用于多级图像分割问题
目录 1.摘要2.海洋捕食者算法MPA原理3.改进策略4.结果展示5.参考文献6.代码获取 1.摘要 本文提出了一种基于量子理论的改进海洋捕食者算法(QMPA),专门用于解决多级图像分割问题。QMPA算法利用薛定谔波函数中的概率函数来确定任何时刻粒子的位…...
【python自写包模块的标准化方法】
目标: 自写一个包,提供关于字符串和文件的模块 要求对异常可以检测 str_tools.py: def str_reverse(s):""":param s: 传入的字符串:return: 反转后的字符串"""# i -1# j 0# s2 ""# while i > (-len(s)):# s2 s[i]# …...
STL——二叉搜索树
目录 二叉搜索树的概念 ⼆叉搜索树的性能分析 ⼆叉搜索树的插⼊ ⼆叉搜索树的查找 ⼆叉搜索树的删除 中序遍历结果为升序序列 二叉搜索树的概念 ⼆叉搜索树⼜称⼆叉排序树,它或者是⼀棵空树,或者是具有以下性质的⼆叉树 • 若它的左⼦树不为空&#…...
2025年XR行业展望:超越虚拟,融合现实
随着科技的飞速发展,扩展现实(XR)技术正逐渐从科幻走进日常生活。2025年,除了备受瞩目的AI百镜大战,XR行业同样充满期待,一系列创新产品和技术进步有望重塑我们对数字世界的体验。 Meta Quest 3S:VR行业的风向标 作为Meta旗下的拳头产品,Quest系列一直是VR市场的领军…...
python异常机制
异常是什么? 软件程序在运行过程中,非常可能遇到刚刚提到的这些问题,我们称之为异常,英文是Exception,意思是例外。遇到这些例外情况,或者交异常,我们怎么让写的程序做出合理的处理,…...