news 2026/7/2 22:21:54

Python Selenium自动化测试环境搭建:从零到一完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python Selenium自动化测试环境搭建:从零到一完整指南

1. 项目概述:为什么从Selenium开始?

如果你刚接触自动化测试,或者想用Python写点脚本来自动点点网页、填填表单,那么“Python + Selenium”这个组合几乎是你绕不开的起点。我刚开始做自动化那会儿,也在这个环节折腾过不少时间,从环境变量配错到浏览器驱动版本不匹配,各种坑都踩过一遍。所以,今天这篇内容,我就想从一个过来人的角度,把“安装Selenium”这个看似简单、实则暗藏玄机的第一步,给你彻底讲透、理顺。

简单来说,Selenium是一个用于Web应用程序自动化测试的强大工具。它允许你通过编写代码来模拟真实用户在浏览器中的操作,比如点击链接、输入文本、提交表单等。而Python,凭借其简洁的语法和丰富的生态,成为了驱动Selenium最流行的语言之一。这个组合能帮你做什么呢?小到每天自动登录某个网站签到,大到对一个复杂的电商系统进行回归测试,它都能胜任。无论你是测试工程师、开发人员,还是想用自动化解放双手的普通用户,掌握这个基础环境搭建,都是迈出的第一步。

很多人觉得“安装”不就是pip install selenium吗?没错,核心命令就这一句。但为什么很多人执行完这句后,跑第一个脚本就报WebDriverException?问题往往出在那些“没说”的细节里:你的Python环境干净吗?浏览器驱动放对地方了吗?版本匹配吗?这篇“基础篇”,我们就聚焦在“安装”本身,确保你能一次性成功地把环境跑起来,并为后续的自动化脚本编写打下坚实的基础。我会把每个步骤背后的逻辑、常见的坑以及我自己的实操心得都揉碎了讲给你听。

2. 环境准备:打造稳固的“地基”

在敲下任何安装命令之前,花点时间把基础环境理顺,能避免后续80%的莫名错误。这里的环境准备,主要围绕三个核心:Python解释器、包管理工具pip,以及一个趁手的代码编辑器。

2.1 Python解释器的选择与安装

Python是这一切的发动机。首先,确保你安装的是Python 3.6或更高版本。Selenium 4.x版本已经停止对Python 2.7的支持,所以别再纠结老版本了。去Python官网下载安装程序,这是最稳妥的渠道。

注意:安装时,务必勾选“Add Python 3.x to PATH”这个选项。这是很多新手遇到的第一个拦路虎。勾选它,意味着系统会自动配置好环境变量,让你能在命令行(CMD或终端)的任何位置直接输入pythonpip来调用它们。如果不小心漏了,后续就需要手动去配置环境变量,对新手来说比较麻烦。

安装完成后,验证一下。打开你的命令行(Windows上是CMD或PowerShell,macOS/Linux上是Terminal),输入:

python --version

或者

python3 --version

你应该能看到类似Python 3.11.4的输出。同时,也检查一下pip是否可用:

pip --version

正常会显示pip的版本和其对应的Python路径。如果这两条命令都成功了,恭喜你,第一步的“地基”就打好了。

我个人的心得是,对于学习和中小型项目,直接使用官网的Python安装包即可,无需一开始就折腾Anaconda或虚拟环境(虽然它们很棒)。先让核心路径跑通,减少初期学习的复杂度。等你的项目多了,或者需要管理不同项目的依赖时,再引入虚拟环境(如venv)是更合适的时机。

2.2 包管理工具pip的确认与升级

pip是Python的包安装工具,我们用它来安装Selenium。新版的Python安装包通常已经自带了pip,但我们最好将它升级到最新版本,以确保安装过程顺畅,并能获取最新的包。

python -m pip install --upgrade pip

这条命令的意思是:使用当前Python解释器(python -m)运行pip模块,执行安装(install)操作,并且升级(--upgrade)pip自身。

有时候,由于网络环境或权限问题,你可能会遇到安装缓慢或权限错误。对于速度问题,可以考虑临时使用国内的镜像源,例如清华源:

pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple

对于权限错误(尤其在Linux/macOS上),如果提示“Permission denied”,可以尝试在命令前加上sudo(需要管理员密码),或者更好的做法是使用--user参数安装到用户目录:

pip install --upgrade pip --user

升级完成后,再次用pip --version确认一下版本。

2.3 代码编辑器的准备(可选但推荐)

虽然你可以用记事本写Python代码,但一个好用的编辑器或集成开发环境(IDE)能极大提升效率。这里有两个主流推荐:

  1. Visual Studio Code (VS Code):轻量、免费、插件生态丰富。安装Python扩展后,能提供代码高亮、智能提示、调试等功能,对新手非常友好。
  2. PyCharm:专业的Python IDE,分社区版(免费)和专业版。功能更全面,开箱即用,但相对更重一些。

我的建议是,如果你是初学者,从VS Code开始会更容易上手,配置也简单。无论选择哪个,确保你知道如何创建新的Python文件(.py后缀)并运行它。

3. 核心组件安装:Selenium库与浏览器驱动

这是最核心的环节,也是问题高发区。很多人只做了第一步(装库),却忽略了第二步(配驱动),导致脚本无法启动浏览器。

3.1 安装Selenium Python客户端库

这一步非常简单,就是通过pip安装selenium这个包。打开命令行,执行:

pip install selenium

这条命令会从Python官方的包索引(PyPI)下载并安装最新稳定版的Selenium库。安装成功后,你可以在命令行里进入Python交互模式验证一下:

python

在出现的>>>提示符后输入:

import selenium print(selenium.__version__)

如果没有报错,并打印出版本号(如4.15.2),说明库安装成功。

实操心得:我强烈建议在安装时,指定一个具体的、相对较新的稳定版本,而不是永远安装“最新版”。因为“最新版”有时可能包含未预见的Bug,而浏览器驱动的更新可能滞后。例如,你可以使用pip install selenium==4.15.2。这样能保证环境的一致性,特别是在团队协作或需要复现问题时。你可以通过Selenium官网或PyPI页面查看当前的稳定版本号。

3.2 下载与配置WebDriver浏览器驱动

这是最关键也最容易出错的一步。Selenium库本身只是一个“指挥中心”,它需要通过与一个名为“WebDriver”的独立组件通信,才能实际控制浏览器。这个WebDriver是针对特定浏览器(如Chrome、Firefox、Edge)的。

为什么需要独立的驱动?你可以把Selenium库想象成你(测试脚本),把浏览器想象成一辆车。你光有开车的想法(Selenium代码)不行,还必须有一个司机(WebDriver)来听懂你的指令并实际操作方向盘、油门和刹车。不同的车(浏览器)需要不同的司机(Driver)。

以最常用的Chrome浏览器为例,步骤如下:

  1. 查看你的Chrome浏览器版本:打开Chrome,点击右上角三个点 -> 帮助 -> 关于Google Chrome。记下版本号,例如120.0.6099.110

  2. 下载对应版本的ChromeDriver

    • 访问ChromeDriver的官方下载站点(搜索ChromeDriver downloads即可找到)。
    • 找到与你的Chrome浏览器主版本号匹配的驱动版本。例如,Chrome是120.x.x,就下载120.x.x.x版本的ChromeDriver。主版本号必须一致!
    • 根据你的操作系统(Windows、macOS、Linux)下载对应的压缩包。
  3. 放置ChromeDriver到系统路径:这是配置的核心。你需要让系统在任意位置都能找到这个驱动文件。

    • Windows
      • 将下载的chromedriver.exe文件,放置到一个你喜欢的目录,例如C:\WebDriver\
      • 然后,将这个目录(C:\WebDriver\)添加到系统的PATH环境变量中。
      • 具体操作:右键“此电脑”->属性->高级系统设置->环境变量。在“系统变量”或“用户变量”中找到Path,编辑,新建一条,填入你的目录路径(如C:\WebDriver),然后确定。
    • macOS / Linux
      • 将下载的chromedriver可执行文件,通常移动到/usr/local/bin目录下(需要sudo权限)。
      • 或者,也可以放到任意目录,并将该目录添加到$PATH环境变量中(通过修改~/.bashrc~/.zshrc文件)。
    • 验证配置:打开新的命令行窗口,输入chromedriver(或chromedriver --version)。如果能看到版本信息而不是“找不到命令”,说明路径配置成功。

对于其他浏览器:

  • Firefox (GeckoDriver):为Firefox下载geckodriver,配置方式同上。
  • Microsoft Edge:Edge基于Chromium,所以使用msedgedriver,其下载和配置方式与ChromeDriver几乎完全相同,也需要版本匹配。

避坑指南:版本匹配是重中之重!浏览器频繁自动更新,但你可能忘记更新驱动。如果出现“This version of ChromeDriver only supports Chrome version XX”的错误,十有八九是驱动版本旧了。一个实用的技巧是,使用webdriver-manager这个第三方库,它可以自动帮你下载和管理正确版本的驱动。安装:pip install webdriver-manager。在代码中,可以这样使用(以Chrome为例):

from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager service = Service(ChromeDriverManager().install()) driver = webdriver.Chrome(service=service)

这能省去手动下载和配置的麻烦,特别适合新手和需要环境快速部署的场景。

4. 验证安装:编写并运行你的第一个脚本

环境搭好了,不跑个脚本验证一下,心里总不踏实。我们来写一个最简单的脚本,打开百度首页,搜索一个关键词。

4.1 创建并编写测试脚本

在你喜欢的位置(例如桌面或一个专门的项目文件夹),新建一个文本文件,将其重命名为first_selenium_test.py。用你的代码编辑器(如VS Code)打开它,输入以下代码:

# 导入selenium的webdriver模块,这是控制浏览器的核心 from selenium import webdriver # 导入By类,用于指定定位元素的方式(如ID, NAME, CSS_SELECTOR等) from selenium.webdriver.common.by import By # 导入Keys类,用于模拟键盘按键(如回车) from selenium.webdriver.common.keys import Keys # 导入time模块,用于简单的等待(实际项目中应用更智能的等待方式) import time # 1. 创建一个Chrome浏览器的实例 # 如果你的chromedriver已在PATH中,可以直接这样写 driver = webdriver.Chrome() # 如果使用webdriver-manager,则使用上面提到的Service方式 # 2. 设置浏览器窗口最大化(非必须,但看着舒服) driver.maximize_window() # 3. 使用get方法导航到百度首页 driver.get("https://www.baidu.com") # 4. 等待页面加载一下(这是一个简单的强制等待,实际不推荐,这里仅为演示) time.sleep(2) # 5. 定位百度首页的搜索输入框。通过检查网页元素,发现其id为‘kw’ search_box = driver.find_element(By.ID, "kw") # 6. 在搜索框中输入文本“Selenium自动化测试” search_box.send_keys("Selenium自动化测试") # 7. 模拟按下回车键进行搜索 search_box.send_keys(Keys.RETURN) # 8. 等待搜索结果加载 time.sleep(3) # 9. 在控制台打印当前页面的标题 print("当前页面标题是:", driver.title) # 10. 可选:截屏保存当前页面 driver.save_screenshot("baidu_search_result.png") print("截图已保存为 baidu_search_result.png") # 11. 等待一会儿,让你能看到结果 time.sleep(5) # 12. 关闭浏览器窗口 driver.quit()

4.2 运行脚本并解读结果

保存文件后,在命令行中,导航到这个文件所在的目录。例如,如果你的文件在桌面:

cd Desktop

然后运行脚本:

python first_selenium_test.py

如果一切配置正确,你将看到:

  1. 自动弹出一个新的Chrome浏览器窗口(可能会提示“Chrome正受到自动测试软件的控制”,这是正常的)。
  2. 浏览器自动打开百度首页。
  3. 在搜索框中自动输入“Selenium自动化测试”并开始搜索。
  4. 跳转到搜索结果页。
  5. 命令行窗口会打印出当前页面的标题。
  6. 脚本运行目录下会生成一张名为baidu_search_result.png的截图。
  7. 最后,浏览器窗口自动关闭。

这个过程直观地展示了Selenium的核心能力:以编程方式控制浏览器。你通过代码(driver.get,find_element,send_keys)发出了指令,WebDriver接收并执行,浏览器做出了相应的响应。

注意事项:你可能注意到了代码中使用了time.sleep(2)。这叫做“强制等待”,它让程序无条件暂停指定的秒数。在实际的自动化测试中,这是一种非常不推荐的做法,因为它效率低下且不可靠(网络或电脑慢时可能不够,快时又浪费)。正确的做法是使用Selenium提供的“显式等待”或“隐式等待”,它们会智能地等待某个条件(如元素出现、可点击)达成后再继续,我们会在后续的篇章中详细讲解。这里使用sleep仅仅是为了让第一次运行的你能清楚地看到每一步的界面变化。

5. 深入解析:Selenium安装背后的工作原理

理解了“怎么装”,我们再来稍微深入一点,看看“为什么这么装”,以及各个部分是如何协同工作的。这能帮助你在遇到复杂问题时,有更清晰的排查思路。

5.1 Selenium架构:客户端、驱动与浏览器

Selenium的工作遵循着标准的客户端-服务器架构:

  • 客户端 (Client):就是你写的Python脚本,以及你安装的selenium库。这个库提供了一系列友好的API(如find_element,click),让你用Python代码描述对浏览器的操作。
  • WebDriver (服务器/驱动):这是一个独立的、针对特定浏览器的可执行文件(如chromedriver.exe)。它扮演着HTTP服务器的角色,监听一个端口(通常是9515 for Chrome)。
  • 浏览器 (Browser):真正的“执行者”,如Chrome、Firefox。

工作流程如下

  1. 你的Python脚本(客户端)调用webdriver.Chrome()
  2. Selenium库会启动chromedriver.exe进程(服务器)。
  3. chromedriver启动(或连接到一个已有的)Chrome浏览器实例,并在两者之间建立一条特殊的调试通道。
  4. 你的脚本发出命令(如driver.get(url))。
  5. Selenium库将这个命令转换成一个HTTP请求(遵循W3C WebDriver协议),发送给chromedriver服务器。
  6. chromedriver接收到请求,将其翻译成浏览器能理解的指令(通过调试协议),并发送给浏览器。
  7. 浏览器执行指令(如导航到某个URL),并将执行结果返回给chromedriver
  8. chromedriver将结果包装成HTTP响应,发回给Selenium客户端库。
  9. 你的脚本接收到响应,继续执行下一条指令。

所以,pip install selenium只是安装了“翻译官”和“信使”(客户端库),而下载的浏览器驱动则是那个关键的“本地代理服务器”(WebDriver)。没有驱动,你的指令就无法送达浏览器。

5.2 版本兼容性矩阵

这是环境搭建中最令人头疼的问题之一。主要涉及三个版本的兼容:

  1. Selenium库版本
  2. 浏览器驱动版本
  3. 浏览器本身版本

它们之间存在着严格的匹配关系,尤其是浏览器主版本号必须与驱动的主版本号一致。例如,Chrome 120 必须使用 ChromeDriver 120.x.x.x。Selenium库的版本相对宽松,但使用较新的Selenium 4.x版本能获得更好的特性和更符合W3C标准的支持。

为了管理这种复杂性,除了之前提到的webdriver-manager,在团队或CI/CD环境中,更常见的做法是使用容器化技术(如Docker)来固化整个测试环境(包括Python版本、Selenium版本、浏览器版本和驱动),确保每次运行的环境完全一致。

5.3 安装方式的变体:虚拟环境与容器化

随着你项目的深入,你会接触到更高级的环境管理方式:

1. 虚拟环境 (Virtual Environment)强烈建议为每个独立的Python项目创建独立的虚拟环境。这能隔离不同项目所需的依赖包,避免版本冲突。

# 创建虚拟环境 python -m venv my_selenium_env # 激活虚拟环境 (Windows) my_selenium_env\Scripts\activate # 激活虚拟环境 (macOS/Linux) source my_selenium_env/bin/activate # 在激活的虚拟环境中安装selenium pip install selenium

激活后,你的命令行提示符前会出现环境名(my_selenium_env),之后所有pip安装的包都只在这个环境中生效。退出使用deactivate命令。

2. 容器化 (Docker)这是企业级自动化测试的标配。通过编写Dockerfile,你可以定义一个包含操作系统、Python、Selenium、浏览器及驱动的完整镜像。在任何安装了Docker的机器上,都能以完全相同的方式运行你的测试,彻底解决“在我机器上是好的”这类环境问题。这涉及到Docker的知识,是后续进阶的方向。

6. 常见问题与故障排除实录

即使按照步骤操作,第一次搭建也难免遇到问题。这里我整理了最常见的一些错误及其解决方法,这些都是我亲身踩过的坑。

6.1 “WebDriverException: Message: ‘chromedriver’ executable needs to be in PATH.”

  • 错误含义:Selenium找不到chromedriver可执行文件。
  • 根本原因chromedriver没有放在系统PATH环境变量包含的目录中,或者路径配置后没有重启命令行窗口。
  • 解决方案
    1. 确认chromedriver.exe的存放路径。
    2. 将该路径精确无误地添加到系统的PATH变量中。
    3. 关闭所有已打开的命令行窗口,重新打开一个新的,让新的PATH生效。
    4. 在新命令行中输入chromedriver --version验证。
  • 临时方案:你也可以在代码中指定驱动的绝对路径,但不推荐作为长期方案,因为路径不通用。
    from selenium import webdriver from selenium.webdriver.chrome.service import Service service = Service(r‘C:\path\to\your\chromedriver.exe‘) # 使用原始字符串或双反斜杠 driver = webdriver.Chrome(service=service)

6.2 “SessionNotCreatedException: This version of ChromeDriver only supports Chrome version XX”

  • 错误含义:ChromeDriver版本与已安装的Chrome浏览器版本不兼容。
  • 根本原因:Chrome浏览器自动更新了,但ChromeDriver还是旧版本。
  • 解决方案
    1. 检查当前Chrome浏览器的确切版本。
    2. 去ChromeDriver官网下载与之主版本号完全相同的新驱动。
    3. 用新驱动替换掉旧驱动(确保PATH指向的是新文件)。
    4. 或者,使用webdriver-manager自动管理。

6.3 浏览器能打开,但页面空白或无法加载

  • 可能原因1:网络问题或代理设置。脚本运行环境可能无法访问目标网站(如Google)。
  • 排查:尝试在脚本中访问一个本地文件或确定可访问的网站(如about:blank)测试。
  • 可能原因2:浏览器启动参数问题。某些企业环境或安全软件会限制浏览器的启动方式。
  • 尝试:在创建driver时添加一些选项,尝试禁用沙箱或忽略证书错误(仅用于测试环境)。
    from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument(‘--no-sandbox‘) # 禁用沙箱模式 options.add_argument(‘--ignore-certificate-errors‘) # 忽略证书错误 driver = webdriver.Chrome(options=options)

6.4 执行pip install时速度极慢或超时

  • 原因:默认的PyPI源在国外,网络不稳定。
  • 解决方案:使用国内镜像源加速下载。可以临时指定,也可以永久配置。
    • 临时使用pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple
    • 永久配置(推荐):
      • Windows:在用户目录(C:\Users\你的用户名\)下创建pip文件夹,里面新建pip.ini文件,写入:
        [global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple [install] trusted-host = pypi.tuna.tsinghua.edu.cn
      • macOS/Linux:在用户目录创建或修改~/.pip/pip.conf文件,内容同上。

6.5 脚本执行完毕,浏览器窗口没有自动关闭

  • 原因:脚本中使用了driver.close()而不是driver.quit(),或者脚本因异常提前终止。
  • 解释
    • driver.close():关闭当前标签页。如果只有一个标签页,则关闭浏览器窗口。但如果WebDriver进程还在,可能会残留。
    • driver.quit():关闭所有关联的窗口,并终止WebDriver进程。这是更彻底的清理方式。
  • 最佳实践:使用try...finally块确保无论是否发生异常,最后都能执行quit()
    driver = webdriver.Chrome() try: # 你的测试逻辑在这里 driver.get("https://www.example.com") # ... finally: driver.quit() # 确保浏览器被关闭

7. 从安装到实践:下一步的学习路径建议

成功运行第一个脚本,只是自动化测试万里长征的第一步。环境搭建好比配好了枪和子弹,接下来要学会如何瞄准和射击。基于这个基础,你可以沿着以下几个方向深入:

1. 掌握核心API与元素定位这是Selenium的基石。你需要熟练掌握find_elementfind_elements方法,以及各种定位策略:By.ID,By.NAME,By.CLASS_NAME,By.TAG_NAME,By.LINK_TEXT,By.PARTIAL_LINK_TEXT,By.CSS_SELECTOR,By.XPATH。其中,CSS选择器和XPath是功能最强大、也最常用的两种,尤其是处理没有固定ID或Name的动态元素时。

2. 理解并运用等待机制彻底抛弃time.sleep()。学习使用:

  • 隐式等待 (Implicit Wait)driver.implicitly_wait(10),为所有find_element操作设置一个全局的最大等待时间。
  • 显式等待 (Explicit Wait):使用WebDriverWait配合expected_conditions,等待某个特定条件成立(如元素可见、可点击、存在等)。这是更精确、更高效的做法。
    from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver, 10) element = wait.until(EC.presence_of_element_located((By.ID, “myDynamicElement”)))

3. 学习操作浏览器与处理复杂交互包括但不限于:窗口和标签页的切换、处理JavaScript弹窗(alert/confirm/prompt)、操作下拉选择框(Select类)、鼠标悬停和拖拽动作(ActionChains类)、执行JavaScript代码、管理Cookies等。

4. 构建测试框架当脚本越来越多时,你需要一个结构来组织它们。这涉及到:

  • 单元测试框架:使用Python自带的unittest或第三方框架pytest来组织测试用例、断言和生成报告。pytest因其简洁灵活而更受欢迎。
  • 页面对象模型 (Page Object Model, POM):一种设计模式,将每个网页封装成一个类,页面的元素定位和操作作为类的方法。这能极大提高代码的可读性、可维护性和复用性。
  • 数据驱动:将测试数据(如用户名、密码)从脚本中分离出来,用外部文件(如Excel, JSON, CSV)或数据库管理。
  • 日志与报告:集成日志模块记录执行过程,并使用如AllureHTMLTestRunner等工具生成美观的测试报告。

5. 集成到CI/CD流程将你的自动化测试脚本集成到Jenkins、GitLab CI、GitHub Actions等持续集成工具中,实现代码提交后自动触发测试,快速获得质量反馈。

环境搭建是第一步,也是最容易让人产生挫败感的一步,因为任何一个环节的疏漏都可能导致失败。但一旦你按照清晰的步骤(准备Python -> 安装Selenium库 -> 下载匹配的浏览器驱动 -> 配置驱动路径)走通,后面就是一马平川的学习和应用过程了。记住,遇到报错不要慌,仔细阅读错误信息,它通常已经指明了方向(如“找不到驱动”或“版本不匹配”)。多动手,多尝试,这个看似简单的“安装”环节,正是你理解整个Selenium工作原理的绝佳起点。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/2 22:21:03

Navicat Mac版无限试用重置终极指南:三步轻松恢复14天试用期

Navicat Mac版无限试用重置终极指南:三步轻松恢复14天试用期 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 你是…

作者头像 李华
网站建设 2026/7/2 22:19:32

Midscene.js:AI视觉自动化测试框架,解决跨平台UI测试难题

1. 项目概述:当AI视觉遇上跨平台测试 最近在折腾一个跨平台的移动端应用,测试环节差点把我搞崩溃。iOS、Android、Web,还有各种不同尺寸的平板和折叠屏设备,光是视觉回归测试(Visual Regression Testing)的…

作者头像 李华
网站建设 2026/7/2 22:07:45

基于arduino单片机万年历的电子万年历数字时钟电子日历闹钟温度3(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于arduino单片机万年历的电子万年历数字时钟电子日历闹钟温度3(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码 功能说明 :通过Arduino单片机进行数据处理LCD1602液晶显示年、月、日、星期、时、分、秒、温度参数…

作者头像 李华
网站建设 2026/7/2 22:07:01

Metabase高危漏洞CVE-2021-41277复现:未授权文件读取原理与防御

1. 项目概述:一次对Metabase文件读取漏洞的深度剖析最近在整理内部安全资产时,又回顾了Metabase这个老牌开源BI工具在2021年底爆出的一个高危漏洞——CVE-2021-41277。这个漏洞的本质是一个未授权文件读取,攻击者无需任何认证,就能…

作者头像 李华
网站建设 2026/7/2 22:06:54

MATLAB直接调用的HSI与RGB色彩空间互转工具包

本文还有配套的精品资源,点击获取 简介:提供hsi2rgb.m和rgb2hsi.m两个即用型MATLAB函数,支持标准HSI与RGB色彩空间双向转换。输入兼容uint8或double类型的图像矩阵(单帧或多通道),输出保持原始数据类型与…

作者头像 李华
网站建设 2026/7/2 22:06:28

Android应用Frida检测绕过实战:从端口隐藏到内存对抗

1. 项目概述:当Frida遇上“安检门” 在Android应用安全分析与逆向工程领域,Frida无疑是一把瑞士军刀,它通过动态插桩技术,让我们能够窥探和修改应用在运行时的内存状态与逻辑流程。然而,随着安全对抗的升级&#xff0c…

作者头像 李华