网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。
一、前言
我从24年11月份开始学习网络爬虫应用开发,经过2个来月的努力,于1月下旬完成了开发一款网络爬虫软件的学习目标。这里对本次学习及应用开发进行一下回顾总结。
前几天我已经发了一篇日志(网络爬虫学习:应用selenium从搜*狐搜索爬取新闻结果的数据)记录了应用中使用的爬虫技术。
这篇日志记录另外一个问题的解决。
二、问题描述
我在完成软件的初步开发后,曾将软件打包成exe文件后,拷贝到两位同事的电脑上进行检测,软件可以正常打开,但是在输入关键字,点击搜索按钮后,Edge浏览器却一直没有弹出。之后通过研究和对比,找出了原因。
我安装的selenium 库版本号是4.27.1,这个版本的selenium在执行 webdriver.Edge() 方法时,如果没有指定“msedgedriver.exe”,会自动下载msedgedriver.exe文件并保存到C盘 > 用户 > 用户名(如Administer、Lenovo等) > .cache > selenium > msedgedriver > win64 > 驱动版本号 文件夹下。且下载的msedgedriver文件的版本号能够兼容用户电脑上的Edge浏览器。
(selenium自动下载的msedgedriver.exe)
回忆我学习selenium 库的时候,好像刚开始也出现过隔了好一会才打开Edge浏览器的情况。并且在研究如何解决问题的过程中,我曾打开Edge浏览器检查版本号,发现浏览器在更新,并且在浏览器更新后我在进入pycharm调试我开发的软件时,同样出现了打开Edge浏览器等待时间长的情况,基本可以判断造成长时间不打开Edge浏览器的原因是软件正在下载msedgedriver.exe,由于我公司的内部网络有限速,导致下载时间长。
找到原因后,我一开始尝试的方法是:下载好与使用者电脑Edge浏览器版本号一致的msedgedriver.exe,并copy到使用者电脑C盘的 “.cache” 目录中对应的子文件夹下。再次运行我开发的爬虫软件,这次可以较快速的打开Edge浏览器了。
不过这种手动添加的方法,很不方便,不太可取。首先是,我的同事大多不精通电脑,这个操作对他们来说有难度。而如果都由我一个个的设置,则比较麻烦。其次,我发现我开发的电脑与软件测试的2台电脑中的Edge浏览器版本号都不一样,且我的电脑Edge用得比较多,版本都升级了好几次了, “.cache” 目录内已经下载了好几个版本的msedgedriver.exe了。查询 Microsoft Edge Driver官网 可以看到msedgedriver的版本号非常多,在无法确定使用者电脑中Edge浏览器的版本号时,难道要把这些版本的驱动都下载?那也太麻烦了,且占用的存储空间也很大。
在否定了手动添加msedgedriver.exe的方法后,就需要寻找更有效的方法让使用者可以方便的下载和配置msedgedriver.exe了。
三、借助DeepSeek获取解决办法
正好这几天DeepSeek上了热搜,看到相关的文章,让我对DeepSeek产生了兴趣,就尝试了用DeepSeek来解决问题,结果从DeepSeek给的答案中找到了解决问题的方法。
我一共向DeepSeek提了2个问题。
第1问:“使用selenium库,如何获取edge浏览器的版本号”。
这一问的目的是希望通过自己开发的应用获取到Edge浏览器的版本号,为下一步下载对应版本的msedgedriver.exe做准备。DeepSeek思考了64秒,给了我一份详细的答案。在这份答案中给出了“通过driver.capabilities获取浏览器的详细信息”的方法。
这个方法也确实可以获取到Edge浏览器的版本号,不过此法仍需通过webdriver.Edge() 方法打开Edge浏览器,才能获取到浏览器的版本信息(同时还能获取到msedgedriver.exe的版本号信息),但我之前遇到的问题是在使用者的电脑上并没有下载和配置好msedgedriver.exe,导致了打开Edge浏览器需要很长的时间,而我又暂时无法在软件中给出足够有效的提示,因此,这个办法不适合我遇到的问题。
(第1问)
(第1问的答案)
接着我又提出了第2问:“使用python进行爬虫软件开发,如果没有提前下载msedgedriver驱动,在软件中执行webdriver.Edge()方法,无法打开Edge浏览器,如何处理。”
这一问的描述更详尽一些,且是接着上一问提的,DeepSeek这次比较给力,只思考了34秒,最终给了我三个解决方法,从中,我选择了第二个方法。另外两个方法我并未尝试。
(第1问)
(第2问给的第一个方法)
(第2问给的第二个方法)
(第2问给的第三个方法)
四、功能实现
我基于DeepSeek给的方案完善了自己的爬虫软件,在应用中,添加了检查浏览器版本号和msedgedriver.exe的版本号的功能,一旦发现版本号不一致,或信息缺失,就会提示用户下载msedgedriver.exe。软件会将msedgedriver.exe下载到应用工作目录的drivers文件夹下。另外,我在所有调用webdriver.Edge() 方法的代码块,都添加了指定msedgedriver.exe文件路径的语句,使webdriver.Edge() 方法可以直接到指定目录下找到msedgedriver.exe,这样就可以加快Edge浏览器的启动了。解决问题的代码分以下几个部分(具体代码见“五、代码展示”):
1. get_edge_version()方法:
从注册表中获取Edge浏览器的版本号
2. get_edgedriver_version()方法:
获取msedgedriver的版本号
3. download_edgedriver()方法:
下载Edge浏览器对应版本的msedgedriver
4. check_system_bit()方法:
检查操作系统是64位还是32位,根据此方法结果决定下载win64还是win32的msedgedriver
5. vrsion_comparison()方法:
比较浏览器和驱动的版本号
6. open_edge()方法:
用于展示执行webdriver.Edge方法时检查和设置msedgedriver
五、代码展示
最后放上功能实现的示例代码供参考,可以直接运行。
from selenium import webdriver
from selenium.webdriver.edge.service import Service
import time
import re
import winreg # Windows系统 用于从注册表中获取信息
import requests
import zipfile
import os
import subprocess # 用于获取驱动器的版本号def get_edge_version():""" 从注册表中获取Edge浏览器的版本号 """try:key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Edge\BLBeacon")version, _ = winreg.QueryValueEx(key, "version")winreg.CloseKey(key)return versionexcept Exception:return Nonedef get_edgedriver_version():""" 获取Edge驱动器版本号 """# 指定msedgedriver的路径msedgedriver_path = os.path.abspath("drivers/msedgedriver.exe")try:# 尝试获取版本信息ver = subprocess.run([msedgedriver_path, '--version'], capture_output=True, text=True)if ver.returncode == 0:# 形如:Microsoft Edge WebDriver 120.0.2210.91 (f469d579f138ffc82b54354de66117c1cb1bb923)match = re.search(r'(\d+\.\d+\.\d+\.\d+)', ver.stdout.strip())if match:vrsion = match.group(1)return vrsionelse:return Noneelse:print("获取版本时出错:", ver.stderr.strip())return Noneexcept Exception as e:print("出现错误:", str(e))return Nonedef download_edgedriver(version: str):""" 下载对应版本的msedgedriver """# 检查操作系统位数architecture = check_system_bit()if architecture == 64:# 下载win64位的压缩包url = f'https://msedgedriver.azureedge.net/{version}/edgedriver_win64.zip'else:# 下载win32位的压缩包url = f'https://msedgedriver.azureedge.net/{version}/edgedriver_win32.zip'print('驱动器压缩包下载地址:')print(url)response = requests.get(url)print('开始获取驱动器压缩包')# 保存并解压驱动zip_path = f"edgedriver_win{architecture}.zip"with open(zip_path, 'wb') as f:f.write(response.content)print(f'驱动器压缩包已下载到当前工作目录内,文件名{zip_path}')with zipfile.ZipFile(zip_path, 'r') as zip_ref:zip_ref.extractall("drivers/")os.remove(zip_path)print('文件已解压,压缩包已删除')return os.path.abspath("drivers/msedgedriver.exe")def check_system_bit():""" 检查操作系统位数 """if 'PROGRAMFILES(X86)' in os.environ:print("你的电脑为 64-bit 操作系统")return 64else:print("你的电脑为 32-bit 操作系统")return 32def vrsion_comparison(edge_v: str, driver_v: str):""" 比较浏览器和驱动的版本号 """if edge_v == driver_v:return Trueelse:return Falsedef open_edge(url):""" 用于展示执行webdriver.Edge方法时检查和设置msedgedriver """# 获取浏览器版本edge_version = get_edge_version()# 获取驱动器版本,同时也是检查驱动器是否存在driver_version = get_edgedriver_version()if edge_version and driver_version:math = vrsion_comparison(edge_version, driver_version)if not math:print('浏览器和驱动器版本号不一致,但我们仍尝试打开浏览器')try:# 指定msedgedriver.exe的完整路径path_to_executable = os.path.abspath("drivers/msedgedriver.exe")service = Service(executable_path=path_to_executable)driver = webdriver.Edge(service=service)driver.get(url)# 等待页面加载完成time.sleep(30)except Exception as e:print(f'打开驱动器出错:{e}')else:print('浏览器或驱动器版本信息缺失,可能导致异常,故暂不能执行爬虫任务。')if __name__ == '__main__':# 1.获取edge浏览器版本号edge_version = get_edge_version()print("Edge浏览器版本号:", edge_version)# 2.获取驱动器版本driver_version = get_edgedriver_version()print("msedgedriver版本号:", driver_version)# 3.进行版本信息检查check_ok = Falseif driver_version:if edge_version:# 比较浏览器和驱动器的版本号result = vrsion_comparison(edge_version, driver_version)if result:print('浏览器和驱动的版本一致')check_ok = Trueelse:print(f'浏览器版本{edge_version} 和 驱动器版本{driver_version} 不一致')select = input('是否下载浏览器对应版本的驱动?(Y/N)?').strip()select = select.lower()if select == 'y':# 4.下载驱动器print('开始下载浏览器驱动,请稍候')driver_path = download_edgedriver(edge_version)print(f'驱动已下载,保存在 {driver_path}')check_ok = Trueelse:print('您未下载浏览器对应版本的驱动,可能会导致在软件中打开Edge浏览器出问题')else:print('未获取到Edge浏览器的版本信息')else:print('未获取到驱动版本信息')select = input('是否下载浏览器对应版本的驱动?(Y/N)?').strip()select = select.lower()if select == 'y':# 4.下载驱动器print('开始下载浏览器驱动,请稍候')driver_path = download_edgedriver(edge_version)print(f'驱动已下载,保存在 {driver_path}')check_ok = Trueelse:print('您未下载浏览器对应版本的驱动,可能会导致在软件中打开Edge浏览器出问题')# 4. 打开浏览器if check_ok:m_url = 'https://www.baidu.com/'open_edge(m_url)
相关文章:
网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。
一、前言 我从24年11月份开始学习网络爬虫应用开发,经过2个来月的努力,于1月下旬完成了开发一款网络爬虫软件的学习目标。这里对本次学习及应用开发进行一下回顾总结。 前几天我已经发了一篇日志(网络爬虫学习:应用selenium从搜…...
Zookeeper入门部署(单点与集群)
本篇文章基于docker方式部署zookeeper集群,请先安装docker 目录 1. docker初期准备 2.启动zookeeper 2.1 单点部署 2.2 集群部署 3. Linux脚本实现快速切换启动关闭 1. docker初期准备 拉取zookeeper镜像 docker pull zookeeper:3.5.6 如果拉取时间过长…...
2025最新在线模型转换工具onnx转换ncnn,mnn,tengine等
文章目录 引言最新网址地点一、模型转换1. 框架转换全景图2. 安全的模型转换3. 网站全景图 二、转换说明三、模型转换流程图四、感谢 引言 在yolov5,yolov8,yolov11等等模型转换的领域中,时间成本常常是开发者头疼的问题。最近发现一个超棒的…...
文件读写操作
写入文本文件 #include <iostream> #include <fstream>//ofstream类需要包含的头文件 using namespace std;void test01() {//1、包含头文件 fstream//2、创建流对象ofstream fout;/*3、指定打开方式:1.ios::out、ios::trunc 清除文件内容后打开2.ios:…...
AJAX XML
AJAX XML 引言 随着互联网技术的不断发展,Web应用对用户交互性和实时性的要求越来越高。AJAX(Asynchronous JavaScript and XML)技术的出现,为Web应用开发提供了强大的支持。AJAX技术允许Web应用在不重新加载整个页面的情况下,与服务器进行异步通信。XML作为数据传输格式…...
Linux文件原生操作
Linux 中一切皆文件,那么 Linux 文件是什么? 在 Linux 中的文件 可以是:传统意义上的有序数据集合,即:文件系统中的物理文件 也可以是:设备,管道,内存。。。(Linux 管理的一切对象…...
JavaScript常用的内置构造函数
JavaScript作为一种广泛应用的编程语言,提供了丰富的内置构造函数,帮助开发者处理不同类型的数据和操作。这些内置构造函数在创建和操作对象时非常有用。本文将详细介绍JavaScript中常用的内置构造函数及其用途。 常用内置构造函数概述 1. Object Obj…...
Shell篇-字符串处理
目录 1.变量引用 2.获取字符串长度 3.字符串截取 4.删除子字符串 5.字符串替换 总结: Bash(Shell 脚本)中的字符串处理语法。以下是对其的介绍和总结:Bash 变量可以使用不同的语法来获取、修改和删除字符串的内容。图片中列…...
Arduino大师练成手册 -- 控制 AS608 指纹识别模块
要在 Arduino 上控制 AS608 指纹识别模块,你可以按照以下步骤进行: 硬件连接 连接指纹模块:将 AS608 指纹模块与 Arduino 连接。通常,AS608 使用 UART 接口进行通信。你需要将 AS608 的 TX、RX、VCC 和 GND 引脚分别连接到 Ardu…...
C++ Primer 命名空间的using声明
欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...
C#,入门教程(12)——数组及数组使用的基础知识
上一篇: C#,入门教程(11)——枚举(Enum)的基础知识和高级应用https://blog.csdn.net/beijinghorn/article/details/123917587https://blog.csdn.net/beijinghorn/article/details/123917587 数组是一种数据集合,是一组…...
深入浅出并查集(不相交集合实现思路)
引言 并查集(Disjoint Set Union,简称DSU)是一种用于处理一些不交集的合并及查询问题。它主要支持两种操作:查找(Find)和合并(Union)。 查找:确定某个元素属于哪一个子…...
M|哪吒之魔童闹海
rating: 8.5 豆瓣: 8.5 上映时间: “2025” 类型: M动画 导演: 饺子 主演: 国家/地区: 中国大陆 片长/分钟: 144分钟 M|哪吒之魔童闹海 制作精良,除了剧情逻辑有一点瑕疵,各方面都很到位。总体瑕不掩瑜。 上映时间: &…...
【c++】类与对象详解
目录 面向过程思想和面向对象思想类的定义引入类的关键字类定义的两种方式类的访问限定符类的作用域类大小的计算封装 this指针类的6个默认成员函数构造函数初步理解构造函数深入理解构造函数初始化列表单参数构造函数引发的隐式类型转换 析构函数拷贝构造函数赋值运算符重载运…...
LabVIEW如何有效地进行数据采集?
数据采集(DAQ)是许多工程项目中的核心环节,无论是测试、监控还是控制系统,准确、高效的数据采集都是至关重要的。LabVIEW作为一个图形化编程环境,提供了丰富的功能来实现数据采集,确保数据的实时性与可靠性…...
Golang 并发机制-4:用Mutex管理共享资源
并发性是Go的强大功能之一,它允许多个线程(并发线程)同时执行。然而,权力越大,责任越大。当多个例程并发地访问和修改共享资源时,可能会导致数据损坏、竞争条件和不可预测的程序行为。为了解决这些问题&…...
如何用微信小程序写春联
生活没有模板,只需心灯一盏。 如果笑能让你释然,那就开怀一笑;如果哭能让你减压,那就让泪水流下来。如果沉默是金,那就不用解释;如果放下能更好地前行,就别再扛着。 一、引入 Vant UI 1、通过 npm 安装 npm i @vant/weapp -S --production 2、修改 app.json …...
从零开始:用Qt开发一个功能强大的文本编辑器——WPS项目全解析
文章目录 引言项目功能介绍1. **文件操作**2. **文本编辑功能**3. **撤销与重做**4. **剪切、复制与粘贴**5. **文本查找与替换**6. **打印功能**7. **打印预览**8. **设置字体颜色**9. **设置字号**10. **设置字体**11. **左对齐**12. **右对齐**13. **居中对齐**14. **两侧对…...
LLMs之OpenAI o系列:OpenAI o3-mini的简介、安装和使用方法、案例应用之详细攻略
LLMs之OpenAI o系列:OpenAI o3-mini的简介、安装和使用方法、案例应用之详细攻略 目录 相关文章 LLMs之o3:《Deliberative Alignment: Reasoning Enables Safer Language Models》翻译与解读 LLMs之OpenAI o系列:OpenAI o3-mini的简介、安…...
DeepSeek-R1 低成本训练的根本原因是?
在人工智能领域,大语言模型(LLM)正以前所未有的速度发展,驱动着自然语言处理、内容生成、智能客服等众多应用的革新。然而,高性能的背后往往是高昂的训练成本,动辄数百万美元的投入让许多企业和研究机构望而…...
C语言:结构体
一,结构体 C语⾔已经提供了内置类型,如:char、short、int、long、float、double等,但是只有这些内置类型还是不够的,假设我想描述学⽣,描述⼀本书,这时单⼀的内置类型是不⾏的。 描述⼀个学⽣需…...
java练习(5)
ps:题目来自力扣 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这…...
【高等数学】贝塞尔函数
贝塞尔函数(Bessel functions)是数学中一类重要的特殊函数,通常用于解决涉及圆对称或球对称的微分方程。它们在物理学、工程学、天文学等多个领域都有广泛的应用,例如在波动方程、热传导方程、电磁波传播等问题中。 贝塞尔函数的…...
贪吃蛇实现
1.资料来源 https://learn.microsoft.com/zh-cn/windows/console/getstdhandle 2.前言 简介 贪吃蛇是久负盛名的游戏,和俄罗斯方块、扫雷等游戏位列于经典游戏的行列。 《贪食蛇》中玩家控制一条不断移动的蛇,在屏幕上吃掉出现的食物。每吃掉一个食物…...
Windows电脑本地部署运行DeepSeek R1大模型(基于Ollama和Chatbox)
文章目录 一、环境准备二、安装Ollama2.1 访问Ollama官方网站2.2 下载适用于Windows的安装包2.3 安装Ollama安装包2.4 指定Ollama安装目录2.5 指定Ollama的大模型的存储目录 三、选择DeepSeek R1模型四、下载并运行DeepSeek R1模型五、使用Chatbox进行交互5.1 下载Chatbox安装包…...
在C++中,成员变量必须在对象构造完成前初始化,但初始化的方式有多种...
在C中,成员变量必须在对象构造完成前初始化,但初始化的方式可以有多种,具体取决于成员变量的类型和设计需求。以下是C中成员变量初始化的规则和相关机制: 1. 成员变量必须初始化 如果成员变量是基本类型(如 int、doub…...
maven mysql jdk nvm node npm 环境安装
安装JDK 1.8 11 环境 maven环境安装 打开网站 下载 下载zip格式 解压 自己创建一个maven库 以后在idea 使用maven时候重新设置一下 这三个地方分别设置 这时候maven才算设置好 nvm 管理 npm nodejs nvm下载 安装 Releases coreybutler/nvm-windows GitHub 一键安装且若有…...
算法随笔_37: 交替合并字符串
上一篇:算法随笔_36: 复写零-CSDN博客 题目描述如下: 给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。 返回 合并后的字符串 。 示例…...
w188校园商铺管理系统设计与实现
🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…...
(2025 年最新)MacOS Redis Desktop Manager中文版下载,附详细图文
MacOS Redis Desktop Manager中文版下载 大家好,今天给大家带来一款非常实用的 Redis 可视化工具——Redis Desktop Manager(简称 RDM)。相信很多开发者都用过 Redis 数据库,但如果你想要更高效、更方便地管理 Redis 数据&#x…...
【Block总结】Shuffle Attention,新型的Shuffle注意力|即插即用
一、论文信息 标题: SA-Net: Shuffle Attention for Deep Convolutional Neural Networks 论文链接: arXiv 代码链接: GitHub 二、创新点 Shuffle Attention(SA)模块的主要创新在于高效结合了通道注意力和空间注意力,同时通过通道重排技…...
解锁豆瓣高清海报(一) 深度爬虫与requests进阶之路
前瞻 PosterBandit 这个脚本能够根据用户指定的日期,爬取你看过的影视最高清的海报,然后使用 PixelWeaver.py 自动拼接成指定大小的长图。 你是否发现直接从豆瓣爬取下来的海报清晰度很低? 使用 .pic .nbg img CSS 选择器,在 我…...
【机器学习与数据挖掘实战】案例11:基于灰色预测和SVR的企业所得税预测分析
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支,专注于让计算机系统通过数据学习和改进。它利用统计和计算方法,使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数据集中发现模式、关联…...
聚簇索引、哈希索引、覆盖索引、索引分类、最左前缀原则、判断索引使用情况、索引失效条件、优化查询性能
聚簇索引 聚簇索引像一本按目录排版的书,用空间换时间,适合读多写少的场景。设计数据库时,主键的选择(如自增ID vs 随机UUID)会直接影响聚簇索引的性能。 什么是聚簇索引? 数据即索引:聚簇索引…...
克隆OpenAI(基于openai API和streamlit)
utils.py: from langchain_openai import ChatOpenAI from langchain.memory import ConversationBufferMemory from langchain.chains import ConversationChain import osdef get_chat_response(api_key,prompt,memory): # memory不能是函数的内部局部变量&…...
DeepSeek技术深度解析:从不同技术角度的全面探讨
DeepSeek技术深度解析:从不同技术角度的全面探讨 引言 DeepSeek是一个集成了多种先进技术的平台,旨在通过深度学习和其他前沿技术来解决复杂的问题。本文将从算法、架构、数据处理以及应用等不同技术角度对DeepSeek进行详细分析。 一、算法层面 深度学…...
完全卸载mysql server步骤
1. 在控制面板中卸载mysql 2. 打开注册表,运行regedit, 删除mysql信息 HKEY_LOCAL_MACHINE-> SYSTEM->CurrentContolSet->Services->EventLog->Application->Mysql HKEY_LOCAL_MACHINE-> SYSTEM->CurrentContolSet->Services->Mysql …...
2025年大年初一篇,C#调用GPU并行计算推荐
C#调用GPU库的主要目的是利用GPU的并行计算能力,加速计算密集型任务,提高程序性能,支持大规模数据处理,优化资源利用,满足特定应用场景的需求,并提升用户体验。在需要处理大量并行数据或进行复杂计算的场景…...
机器学习优化算法:从梯度下降到Adam及其实验改进
机器学习优化算法:从梯度下降到Adam及其实验改进 在机器学习和深度学习领域,模型的训练过程本质上是一个优化问题。优化算法的作用是通过调整模型参数,使得模型在给定的数据 集上实现最优性能。而优化算法的效率和效果直接决定了模型的收敛速…...
在 Ubuntu 中使用 Conda 创建和管理虚拟环境
Conda 是一个广泛使用的包管理和环境管理系统,尤其适用于数据科学和 Python 开发。本文将指导你如何在 Ubuntu 系统中安装 Conda 并创建基于 python3.11 的虚拟环境。 1. 安装 Miniconda 或 Anaconda 方法 1:下载并安装 Miniconda Miniconda 是一个轻量…...
【深度学习】搭建卷积神经网络并进行参数解读
第一步 导包 import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F from torchvision import datasets,transforms import matplotlib.pyplot as plt import numpy as np %matplotlib inline transforms 模块是 torchvision 库的…...
稀疏进化训练:机器学习优化算法中的高效解决方案
稀疏进化训练:机器学习优化算法中的高效解决方案 稀疏进化训练:机器学习优化算法中的高效解决方案引言第一部分:背景与动机1.1 传统优化算法的局限性1.2 进化策略的优势1.3 稀疏性的重要性 第二部分:稀疏进化训练的核心思想2.1 稀…...
Vue - Suspense的使用
在 Vue 3 中,Suspense 是一个用于处理异步组件的 API。它允许在加载异步组件时提供一个后备内容(例如加载指示器),从而改善用户体验。在加载期间,可以在页面上显示一个占位符,而不是让用户看到一个空白或错…...
在K8S中,pending状态一般由什么原因导致的?
在Kubernetes中,资源或Pod处于Pending状态可能有多种原因引起。以下是一些常见的原因和详细解释: 资源不足 概述:当集群中的资源不足以满足Pod或服务的需求时,它们可能会被至于Pending状态。这通常涉及到CPU、内存、存储或其他资…...
【算法】回溯算法专题② ——组合型回溯 + 剪枝 python
目录 前置知识进入正题小试牛刀实战演练总结 前置知识 【算法】回溯算法专题① ——子集型回溯 python 进入正题 组合https://leetcode.cn/problems/combinations/submissions/596357179/ 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以…...
理解红黑树
简介:红黑树是一种自平衡二叉查找树,由鲁道夫贝尔(Rudolf Bayer)在1972年发明,最初称为“对称二叉B树”。它的设计旨在解决普通二叉查找树在频繁插入和删除操作时可能退化为链表的问题,从而保持高效的查找、…...
从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(OLED设备层封装)
目录 OLED设备层驱动开发 如何抽象一个OLED 完成OLED的功能 初始化OLED 清空屏幕 刷新屏幕与光标设置1 刷新屏幕与光标设置2 刷新屏幕与光标设置3 绘制一个点 反色 区域化操作 区域置位 区域反色 区域更新 区域清空 测试我们的抽象 整理一下,我们应…...
大模型能力评估数据集都有哪些?
大模型能力的评估数据集种类繁多,涵盖了语言理解、推理、生成、代码能力、安全性和鲁棒性等多个方面。以下是一些主要的评估数据集及其特点: 通用能力评估数据集: MMLU:多模态大规模多语言任务理解数据集,覆盖从基础教育到高级专业水平的57个科目,用于评估模型的知识储备…...
论文阅读(二):理解概率图模型的两个要点:关于推理和学习的知识
1.论文链接:Essentials to Understand Probabilistic Graphical Models: A Tutorial about Inference and Learning 摘要: 本章的目的是为没有概率图形模型背景或没有深入背景的科学家提供一个高级教程。对于更熟悉这些模型的读者,本章将作为…...
《OpenCV》——图像透视转换
图像透视转换简介 在 OpenCV 里,图像透视转换属于重要的几何变换,也被叫做投影变换。下面从原理、实现步骤、相关函数和应用场景几个方面为你详细介绍。 原理 实现步骤 选取对应点:要在源图像和目标图像上分别找出至少四个对应的点。这些对…...