当前位置: 首页 > article >正文

Selenium菜鸟教程学习笔记

Selenium菜鸟教程学习笔记本博客仅为个人学习记录与理解分享非商业用途所有代码与文档版权归原项目及其贡献者所有。selenium菜鸟教程一、Selenium环境搭建1.安装Selenium库使用Python编写自动化脚本来控制浏览器pipinstallselenium2.测试安装是否成功运行demo1.py观察到浏览器弹出又关闭说明Selenium环境安装成功。fromseleniumimportwebdriver driverwebdriver.Chrome()# 启动driver.get(https://www.bing.com/)# 控制driver.quit()# 关闭二、WebDriver的基本使用可以看到edge弹出菜鸟网页并跳转到百度页面再返回菜鸟页面并刷新最终关闭浏览器的效果。# 导入所需模块fromseleniumimportwebdriverfromselenium.webdriver.edge.serviceimportServiceasEdgeServicefromselenium.webdriver.edge.optionsimportOptionsasEdgeOptions# 自动管理 Edge 驱动无需指定路径# Selenium 4 会自动下载并使用与你当前 Edge 版本匹配的驱动driverwebdriver.Edge()# 打开网页driver.get(https://www.runoob.com)# 最大化窗口driver.maximize_window()# 获取页面标题和 URLprint(页面标题:,driver.title)print(当前 URL:,driver.current_url)# 导航到另一个页面driver.get(https://www.jyshare.com)# 返回上一个页面driver.back()# 刷新页面driver.refresh()# 关闭浏览器driver.quit()三、常见元素定位方式测试1.创建本地 HTML 测试页面目的验证 By.ID、By.NAME、By.CSS_SELECTOR、By.XPATH 四种定位方式命名为test_login.html该 .html 文件与 .py 脚本置于同一目录!DOCTYPEhtmlhtmllangenheadmetacharsetUTF-8titleTest Login Page/title/headbodyforminputtypetextidusernameplaceholderEnter usernamebrbrinputtypepasswordnamepasswordplaceholderEnter passwordbrbrbuttontypebuttonclasssubmit-btnSubmit/buttonbrbrahrefhttps://www.baidu.comtarget_blankClick Here/a/formscript// 可选给按钮加点击事件避免页面跳转中断脚本document.querySelector(.submit-btn).addEventListener(click,(){// alert(Form submitted!);console.log(Form submitted!);});/script/body/html2.Python 脚本验证定位效果fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByimportos driverwebdriver.Edge()# 与实际使用的浏览器一致html_fileos.path.abspath(test_login.html)driver.get(ffile://{html_file})# ID 定位driver.find_element(By.ID,username).send_keys(testuser)# Name 定位driver.find_element(By.NAME,password).send_keys(password123)# CSS 定位driver.find_element(By.CSS_SELECTOR,button.submit-btn).click()# XPath 定位driver.find_element(By.XPATH,//a[text()Click Here]).click()print(✅ 定位与操作完成请按 F12 检查页面注意百度在新标签页打开)input( 检查完毕后按回车退出...)driver.quit()3.运行结果用户名、密码成功输入提交按钮点击后控制台输出日志“Click Here” 链接在新标签页中打开百度input保持原始页面打开便于调试四、等待机制1.隐式等待全局一旦设置对所有后续的 find_element(s) 调用生效。优点简单一行代码全局生效。缺点所有元素共用同一个超时时间缺乏灵活性与显式等待混用时会产生不可预测的等待时间叠加这是最严重的问题。2.显示等待局部为不同的查找设置不同的等待时间是 Selenium 官方推荐的做法。比如用户名输入框应该很快出现1 ~ 2秒内。如果 3 秒还没出来说明页面加载失败。登录成功后的欢迎消息需要调用后端 API可能要8~10 秒才出现。具体写法如下所示fromseleniumimportwebdriverfromselenium.webdriver.chrome.serviceimportServiceasChromeServicefromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasECimportos# 设置正确的驱动路径driverwebdriver.Edge()# 设置隐式等待# driver.implicitly_wait(5) # 最好不要使用# 打开网页html_fileos.path.abspath(test_login.html)driver.get(ffile://{html_file})# 使用显式等待等待元素可见usernameWebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,username)))username.send_keys(testuser)# 使用显式等待等待元素可点击submit_buttonWebDriverWait(driver,15).until(EC.element_to_be_clickable((By.CSS_SELECTOR,button.submit-btn)))submit_button.click()# 关闭浏览器driver.quit()五、文件上传和下载1.创建本地测试页面命名为test_page.html保存在.py文件夹下!DOCTYPEhtmlhtmllangzh-CNheadmetacharsetUTF-8titleSelenium 文件操作测试页/titlestylebody{font-family:sans-serif;padding:20px;}.section{margin-bottom:30px;padding:15px;border:1px solid #ddd;border-radius:5px;}h2{margin-top:0;color:#333;}button{padding:10px 20px;cursor:pointer;background:#007bff;color:white;border:none;border-radius:3px;}button:hover{background:#0056b3;}/style/headbody!-- 1. 上传测试区域 --divclasssectionh2 文件上传测试/h2p请选择一个本地文件模拟上传/pinputtypefileidfileInputbuttononclickalert(文件路径已获取模拟上传成功)提交上传/button/div!-- 2. 下载测试区域 --divclasssectionh2⬇️ 文件下载测试/h2p点击下载按钮浏览器将生成并下载一个文本文件/pbuttoniddownloadBtn点击下载测试文件/button/divscript// 模拟下载逻辑创建一个 Blob 文件并触发下载document.getElementById(downloadBtn).addEventListener(click,function(){constcontent这是 Selenium 自动下载生成的测试内容\n时间newDate().toLocaleString();constblobnewBlob([content],{type:text/plain});consturlURL.createObjectURL(blob);constadocument.createElement(a);a.hrefurl;a.downloadselenium_auto_download.txt;// 下载的文件名document.body.appendChild(a);a.click();// 清理资源document.body.removeChild(a);URL.revokeObjectURL(url);});/script/body/html2.Python 脚本测试上传、下载效果importosimporttimefromseleniumimportwebdriverfromselenium.webdriver.common.byimportBy# 1. 准备工作创建下载目录download_diros.path.join(os.getcwd(),downloads)os.makedirs(download_dir,exist_okTrue)# 2. 配置浏览器核心是设置下载路径禁止弹窗optionswebdriver.EdgeOptions()options.add_experimental_option(prefs,{download.default_directory:download_dir,download.prompt_for_download:False})# 启动浏览器driverwebdriver.Edge(optionsoptions)# 3. 打开本地测试页面 (确保 test_page.html 和这个脚本在一起)html_pathfile:///os.path.abspath(test_page.html)driver.get(html_path)# --- 核心操作上传 ---print(正在上传...)# 找到 input 标签直接发送文件路径# 这里我们临时创建一个文件用来上传test_fileos.path.join(download_dir,upload_test.txt)withopen(test_file,w)asf:f.write(测试内容)upload_inputdriver.find_element(By.ID,fileInput)upload_input.send_keys(test_file)# --- 核心就这一行print(上传完成)# --- 核心操作下载 ---print(正在下载...)# 点击下载按钮download_btndriver.find_element(By.ID,downloadBtn)download_btn.click()# 结束input(下载完成)driver.quit()3.运行结果上传找到 标签用 send_keys 发送文件的“绝对路径”。下载启动浏览器时加 options 配置禁止弹窗 指定路径然后点击网页上的下载链接。六、Selenium测试框架集成1. 与 unittest 集成准备 (setUp)每次测试前都要做的事如打开浏览器、打开网页执行 (test_)具体的测试步骤如输入文字、点击按钮注意函数名必须以 test 开头否则不执行。收尾 (tearDown)每次测试后都要做的事如关闭浏览器。importunittestfromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasECclassTestGoogleSearch(unittest.TestCase):defsetUp(self):self.driverwebdriver.Edge()self.driver.get(https://www.baidu.com)deftest_search(self):search_boxself.driver.find_element(By.NAME,wd)search_box.send_keys(Selenium)search_box.submit()# 断言结果页标题包含Seleniumself.assertIn(Selenium,self.driver.title)deftearDown(self):# 关闭浏览器self.driver.quit()if__name____main__:unittest.main()2.与 pytest 集成1.像写脚本。直接写函数就行不用套在 class 里。2.用 pytest.fixture 装饰器灵活控制。你可以让 10 个测试共用一个浏览器也可以让每个测试单独用一个。3.直接用 Python 原生的 assert 关键字就行。4.需要 yield driver 来传递浏览器。importpytestfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBy# 这个 scopesession 的意思是整个测试过程只启动一次浏览器pytest.fixture(scopesession)defbrowser():driverwebdriver.Edge()yielddriver# 先跑测试用例driver.quit()# 所有测试跑完后才执行这一句# 测试用例写法保持不变deftest_baidu_search(browser):browser.get(https://www.baidu.com)search_boxbrowser.find_element(By.NAME,wd)search_box.send_keys(Selenium)search_box.submit()assertSeleniuminbrowser.title

相关文章:

Selenium菜鸟教程学习笔记

Selenium菜鸟教程学习笔记 本博客仅为个人学习记录与理解分享,非商业用途,所有代码与文档版权归原项目及其贡献者所有。selenium菜鸟教程 一、Selenium环境搭建 1.安装Selenium库 使用Python编写自动化脚本来控制浏览器 pip install selenium2.测试…...

5分钟上手LosslessCut:零基础掌握无损视频剪辑神器

5分钟上手LosslessCut:零基础掌握无损视频剪辑神器 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 还在为剪辑视频等待漫长渲染而烦恼吗?每次剪…...

2026-05-07 号8 个国外项目/需求信号:普通人怎么把“开源工具、README、AI 原型、数字模板”变成小生意?

今天拆 8 个国外项目/需求信号:普通人怎么把“开源工具、README、AI 原型、数字模板”变成小生意?日期:2026-05-07 栏目定位:每天只看具体国外项目、帖子、工具和需求信号,不写空泛鸡汤。 今日判断:不要追“…...

2.1 排序算法之冒泡排序深度解析

冒泡排序深度解析目录 冒泡排序简介核心思想与执行流程 2.1 基本操作:比较与交换 2.2 一次完整的冒泡过程 2.3 多趟排序与终结条件算法实现 3.1 基础版实现 3.2 优化版一:提前终止 3.3 优化版二:记录最后交换位置复杂度深度分析 4.1 时间复杂…...

Wand-Enhancer技术架构深度解析:安全高效解锁WeMod Pro功能的技术实现方案

Wand-Enhancer技术架构深度解析:安全高效解锁WeMod Pro功能的技术实现方案 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer Wand-Enhancer是一…...

从状态机到可配置IP核:手把手教你用parameter玩转Verilog模块复用(附代码)

从状态机到可配置IP核:手把手教你用parameter玩转Verilog模块复用(附代码) 在数字电路设计中,模块复用是提升开发效率的关键策略。想象一下:当你完成一个精心设计的计数器模块后,下一个项目需要相同功能但不…...

本地部署AI智能体工作台kern:统一记忆与自生成仪表盘实战

1. 项目概述:一个真正为你干活的智能体工作台如果你和我一样,对市面上那些“聊天机器人”式的AI助手感到厌倦,觉得它们更像是需要你不断喂指令、记性还不太好的实习生,那么这个项目可能会让你眼前一亮。kern-ai不是一个聊天界面&a…...

Typora 怎么标记清单:勾选自动划掉后续内容,复刻 Notion 效果

解决痛点:勾选任务后,只能划掉当前行,下面的说明文字还是乱糟糟的,看不出哪些是已完成的附属内容想手动给内容加删除线,又麻烦又容易出错,还得随时记得取消标题和任务混在一起,勾选效果失效一、…...

ARM指令集条件执行与内存访问机制详解

1. ARM指令集架构概述ARM架构作为RISC(精简指令集计算机)设计的典型代表,其指令集设计体现了高效、简洁的核心理念。与x86等CISC架构不同,ARM采用固定长度的32位指令编码(THUMB模式为16位),通过…...

从零开始玩转CH32V307评估板:MounRiver Studio环境搭建到点灯实战(含固件下载避坑)

国产RISC-V评估板CH32V307全流程开发指南:从环境搭建到LED控制实战 第一次拿到CH32V307评估板时,我盯着板载的WCH-Link调试器和密密麻麻的接口,既兴奋又忐忑。作为国产RISC-V阵营的新秀,沁恒微的这款MCU以其出色的性价比和丰富的外…...

别再手动复制粘贴了!用Java的XWPFTemplate 1.9.1动态生成Word表格,5分钟搞定周报

告别手工周报:用JavaXWPFTemplate实现智能表格生成 每周五下午,办公室里总会响起此起彼伏的键盘敲击声和鼠标点击声——这是同事们正在与Word文档搏斗,手动复制粘贴数据、调整表格格式、核对数字准确性。这种重复性劳动不仅消耗时间&#xff…...

5G手机开机后,它到底是怎么找到信号塔的?聊聊SSB波束扫描那些事儿

5G手机开机后,它到底是怎么找到信号塔的?聊聊SSB波束扫描那些事儿 每次打开手机,屏幕上瞬间跳出的信号格背后,隐藏着一场精密的"太空芭蕾"。当5G终端开机或进入新区域时,会像迷失在陌生城市的旅人&#xff0…...

Class D音频放大器原理与工程实践解析

1. Class D音频放大器:从原理到实战的全方位解析 作为一名在音频电子领域深耕多年的工程师,我见证了Class D放大器从实验室概念到消费电子标配的完整发展历程。2006年ADI发布的这篇技术白皮书堪称Class D领域的里程碑文献,今天我将结合自己十…...

AI工具全景导航:从文本到视频,构建高效工作流

1. 项目概述:一份AI工具全景导航图 如果你和我一样,在过去一两年里被AI领域层出不穷的新工具、新模型搞得眼花缭乱,那么你肯定能理解整理一份清晰导航图的价值。我最初接触这个名为“Awesome-AI”的项目时,它还是一个相对简单的列…...

别再只看peak数了!用ChIPQC的RiP、SSD、RiBL三大指标,真正看懂你的ChIP-seq富集效果

突破ChIP-seq质控盲区:用RiP、SSD、RiBL构建三维评估体系 当实验室的测序仪吐出海量ChIP-seq数据时,大多数研究者会迫不及待地打开peak calling结果,数一数那些诱人的峰顶数量。这种条件反射式的反应就像品酒师只计算酒瓶数量却从不打开瓶塞—…...

win10 设置自动打开项目目录

问题描述:项目测试过程中,需要开启多个vscode窗口分别运行不同的项目模块代码,每次都要手动找到项目所在位置并开启。由于项目目录较多,时常需要层层翻找;有时电脑自动关机或重启,还需要重新执行这个简单而…...

嵌入式实时调度器SST的极简设计与优化实践

1. 嵌入式实时调度器SST的设计哲学在资源受限的嵌入式环境中,实时调度器的设计往往面临一个根本性矛盾:功能完备性与资源消耗之间的权衡。传统RTOS解决方案如FreeRTOS或uC/OS虽然功能强大,但对于某些8位或16位微控制器而言,其内存…...

Fluent UDF实战:除了速度入口,你的DEFINE_PROFILE宏还能搞定这些边界条件(温度、组分、壁面接触角全解析)

Fluent UDF实战:DEFINE_PROFILE宏在复杂边界条件中的高阶应用 在计算流体动力学(CFD)仿真中,标准界面提供的边界条件设置往往难以满足复杂物理场景的需求。当您需要定义随空间变化的温度场、随时间波动的组分浓度,或是…...

Proteus仿真STM32蓝牙小车,手把手教你用VSPD虚拟串口搞定HC-05模块通讯

基于Proteus的STM32蓝牙小车仿真开发实战指南 在嵌入式系统学习与开发过程中,硬件资源的限制常常成为阻碍项目进展的瓶颈。特别是对于学生和电子爱好者而言,购置各种传感器模块、通信设备不仅成本高昂,还可能面临物流等待和兼容性问题。本文将…...

别再只调光圈快门了!手把手教你理解手机拍照的3A核心(AE/AWB/AF)

手机摄影进阶指南:掌握3A技术拍出专业级照片 每次看到别人用手机拍出惊艳的照片,而自己的作品却总是差强人意?问题可能出在你对手机相机3A系统的理解上。AE(自动曝光)、AWB(自动白平衡)和AF&…...

从玩具舵机到视觉追踪:聊聊OpenMV色块识别背后的图像处理与坐标转换

从玩具舵机到视觉追踪:OpenMV色块识别背后的图像处理与坐标转换 在嵌入式视觉系统中,色块追踪是一个看似简单却蕴含丰富技术细节的经典问题。当我们将OpenMV摄像头对准一个彩色物体时,屏幕上实时跳动的矩形框背后,是一系列精密的图…...

东阳光280亿鲸吞秦淮数据后再接190亿算力大单,高杠杆下资本并购与产业落地挑战几何?

东阳光再接190亿算力大单宣布鲸吞280亿秦淮数据后,5月6日,东阳光(600673.SH)又接下了最高190亿元的算力大单。公告显示,东阳光控股子公司东莞东阳光云智算科技有限公司与某企业A公司签署了《算力服务采购框架合同》,合同预计总金额…...

享界 S9 座椅险夹小孩引热议,鸿蒙智行紧急回应:未达防夹触发阈值

最近有用户在体验享界 S9 展车时,语音开启了“零重力座椅”模式,但当时副驾上还坐着一名体重较轻的小女孩。由于系统压力传感器未能识别到孩子的存在(未达到防夹触发阈值),座椅继续执行了折叠动作,家长情急…...

基于MCP协议构建智能品牌安全审核系统:架构、模型与实战

1. 项目概述:品牌安全智能监控的“火眼金睛”在社交媒体营销和品牌合作领域,有一个长期困扰品牌方和代理机构的“暗礁”:如何在海量的网红内容发布前,精准识别其中潜藏的品牌安全风险?传统的做法是人工审核&#xff0c…...

生存数据分析中的缺失值处理与因果推断实战

1. 生存数据分析的核心挑战与缺失值问题 生存数据在医学研究、工业设备维护、金融风险管理等领域无处不在,但这类数据有个让人头疼的特点——几乎总是带着各种缺失值。想象一下医院随访记录:患者可能中途失访,检测设备偶尔故障,或…...

生存数据分析:缺失值处理与因果效应估计实战

1. 生存数据分析的核心挑战 在医疗健康、工业设备维护等领域,我们经常需要分析"从某个起点事件到终点事件发生的时间",这就是生存分析的核心任务。但实际操作中,数据缺失和混杂变量的问题几乎无处不在。想象一下,你正在…...

这个 Python 泛型仓库让你少写 80% 重复代码(附代码)

本文约4000字,建议阅读5分钟本文介绍了用 Python 泛型和 SQLAlchemy 实现通用仓库,告别重复 CRUD。你还在为每个实体手写CRUD?这个Python泛型仓库模式让你一次编写,随处复用一个真实场景:刚接手一个FastAPI项目&#x…...

Home Assistant本地LLM集成指南:隐私与响应速度的双重提升

1. 项目概述:让智能家居的“大脑”真正本地化如果你正在使用Home Assistant(HA)来构建自己的智能家居系统,并且对其中那些需要调用云端API的“智能”功能(比如语音助手对话、意图理解)感到一丝不安——无论…...

OpenClaw 2.6.6 部署避坑与高效使用详解

OpenClaw 2.6.6 Windows 一站式部署教程|本地 AI 智能体搭建与使用全指南 OpenClaw(小龙虾)是一款能够在本地环境运行的 AI 智能操作工具,依托自然语言交互能力,可实现文件管理、办公自动化、浏览器操控、系统维护等多…...

视觉语言模型多步推理评估:V-REX基准解析

1. 项目背景与核心价值 视觉语言模型(Vision-Language Models, VLMs)近年来在单步感知任务上表现出色,但在需要多步推理的复杂场景中仍面临挑战。V-REX基准的提出,正是为了填补这一评估空白。传统基准测试往往停留在"看图说话…...