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

HoRain云--Selenium4文件上传下载终极指南

HoRain云小助手个人主页 个人专栏: 《Linux 系列教程》《c语言教程》⛺️生活的理想就是为了理想的生活!⛳️ 推荐前些天发现了一个超棒的服务器购买网站性价比超高大内存超划算忍不住分享一下给大家。点击跳转到网站。专栏介绍专栏名称专栏介绍《C语言》本专栏主要撰写C干货内容和编程技巧让大家从底层了解C把更多的知识由抽象到简单通俗易懂。《网络协议》本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘一起解密网络协议在运行中协议的基本运行机制《docker容器精解篇》全面深入解析 docker 容器从基础到进阶涵盖原理、操作、实践案例助您精通 docker。《linux系列》本专栏主要撰写Linux干货内容从基础到进阶知识由抽象到简单通俗易懂帮你从新手小白到扫地僧。《python 系列》本专栏着重撰写Python相关的干货内容与编程技巧助力大家从底层去认识Python将更多复杂的知识由抽象转化为简单易懂的内容。《试题库》本专栏主要是发布一些考试和练习题库涵盖软考、HCIE、HRCE、CCNA等目录⛳️ 推荐专栏介绍一、文件上传1. 基本的文件上传input 类型2. 处理隐藏的文件输入框3. 上传多个文件二、文件下载1. 配置 Chrome 浏览器下载2. 配置 Firefox 浏览器下载3. 等待文件下载完成三、完整示例示例 1文件上传完整流程示例 2文件下载完整流程四、注意事项和技巧我来详细介绍一下 Selenium 4 中文件上传和下载的实现方法。一、文件上传1. 基本的文件上传input 类型对于最常见的input typefile元素from selenium import webdriver from selenium.webdriver.common.by import By import time driver webdriver.Chrome() driver.get(https://example.com/upload) # 找到文件输入框 file_input driver.find_element(By.CSS_SELECTOR, input[typefile]) # 上传文件使用文件的绝对路径 file_input.send_keys(/path/to/your/file.txt)2. 处理隐藏的文件输入框from selenium.webdriver.common.action_chains import ActionChains # 如果文件输入框是隐藏的需要先点击触发按钮 upload_button driver.find_element(By.ID, upload-button) upload_button.click() # 或者通过 JavaScript 显示文件输入框 driver.execute_script(arguments[0].style.display block;, file_input) file_input.send_keys(/path/to/your/file.txt)3. 上传多个文件# 用分号分隔多个文件路径 file_paths /path/to/file1.txt;/path/to/file2.jpg;/path/to/file3.pdf file_input.send_keys(file_paths)二、文件下载1. 配置 Chrome 浏览器下载from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options chrome_options Options() # 设置下载路径 download_dir /path/to/download/folder prefs { download.default_directory: download_dir, download.prompt_for_download: False, download.directory_upgrade: True, safebrowsing.enabled: True } chrome_options.add_experimental_option(prefs, prefs) # 其他可能有用的选项 chrome_options.add_argument(--disable-gpu) chrome_options.add_argument(--no-sandbox) driver webdriver.Chrome(optionschrome_options)2. 配置 Firefox 浏览器下载from selenium import webdriver from selenium.webdriver.firefox.options import Options from selenium.webdriver.firefox.service import Service firefox_options Options() # 设置下载参数 firefox_options.set_preference(browser.download.folderList, 2) # 0桌面,1默认,2自定义 firefox_options.set_preference(browser.download.dir, /path/to/download/folder) firefox_options.set_preference(browser.download.useDownloadDir, True) firefox_options.set_preference(browser.helperApps.neverAsk.saveToDisk, application/pdf,application/zip,image/jpeg,text/plain) firefox_options.set_preference(pdfjs.disabled, True) # 禁用内置 PDF 查看器 driver webdriver.Firefox(optionsfirefox_options)3. 等待文件下载完成import os import time def wait_for_download_complete(download_dir, timeout30, check_interval1): 等待文件下载完成 end_time time.time() timeout while time.time() end_time: # 检查是否有 .crdownload 或 .part 临时文件 files os.listdir(download_dir) temp_files [f for f in files if f.endswith(.crdownload) or f.endswith(.part)] if not temp_files: # 检查是否有新文件 if files: return sorted([os.path.join(download_dir, f) for f in files], keyos.path.getmtime, reverseTrue)[0] time.sleep(check_interval) return None # 执行下载 driver.find_element(By.ID, download-button).click() # 等待下载完成 downloaded_file wait_for_download_complete(download_dir, timeout60) if downloaded_file: print(f文件已下载: {downloaded_file}) else: print(下载超时)三、完整示例示例 1文件上传完整流程from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import os # 设置 Chrome 选项 chrome_options webdriver.ChromeOptions() prefs { download.default_directory: os.path.abspath(downloads), download.prompt_for_download: False } chrome_options.add_experimental_option(prefs, prefs) driver webdriver.Chrome(optionschrome_options) wait WebDriverWait(driver, 10) try: # 访问上传页面 driver.get(https://testpages.herokuapp.com/styled/file-upload-test.html) # 上传文件 file_input wait.until(EC.presence_of_element_located((By.ID, fileinput))) file_input.send_keys(os.path.abspath(test_file.txt)) # 选择文件类型 driver.find_element(By.ID, itsafile).click() # 点击上传按钮 driver.find_element(By.CSS_SELECTOR, input[typesubmit]).click() # 验证上传成功 success_msg wait.until(EC.presence_of_element_located((By.ID, uploadedfilename))) print(f上传成功: {success_msg.text}) finally: driver.quit()示例 2文件下载完整流程from selenium import webdriver from selenium.webdriver.common.by import By import os import time # 创建下载目录 download_dir os.path.abspath(downloads) os.makedirs(download_dir, exist_okTrue) # 配置浏览器 chrome_options webdriver.ChromeOptions() prefs { download.default_directory: download_dir, download.prompt_for_download: False, plugins.always_open_pdf_externally: True # 对于 PDF 文件 } chrome_options.add_experimental_option(prefs, prefs) driver webdriver.Chrome(optionschrome_options) try: # 访问下载页面 driver.get(https://the-internet.herokuapp.com/download) # 找到并点击下载链接 download_links driver.find_elements(By.CSS_SELECTOR, .example a) for link in download_links[:3]: # 下载前三个文件 filename link.text print(f正在下载: {filename}) link.click() # 等待下载 time.sleep(2) # 检查文件是否已下载 file_path os.path.join(download_dir, filename) if os.path.exists(file_path): file_size os.path.getsize(file_path) print(f下载完成: {filename} ({file_size} bytes)) else: print(f文件未找到: {filename}) finally: driver.quit()四、注意事项和技巧路径问题# 使用绝对路径 import os file_path os.path.abspath(data/test.txt) file_input.send_keys(file_path)处理弹窗警告# 某些浏览器可能有安全警告 chrome_options.add_argument(--disable-web-security) chrome_options.add_argument(--allow-running-insecure-content)文件类型处理# 设置不询问保存的文件类型 mime_types application/pdf,application/vnd.ms-excel,text/csv,image/png chrome_options.add_experimental_option(prefs, { download.default_directory: download_dir, plugins.always_open_pdf_externally: True, profile.default_content_settings.popups: 0, download.prompt_for_download: False, safebrowsing.enabled: False })Headless 模式下载chrome_options.add_argument(--headlessnew) # 注意某些网站可能在 headless 模式下行为不同重命名下载文件import shutil import time # 下载后重命名文件 original_file wait_for_download_complete(download_dir) if original_file: new_name renamed_file.pdf new_path os.path.join(download_dir, new_name) shutil.move(original_file, new_path)这些方法应该能帮助你在 Selenium 4 中处理文件上传和下载操作。记得根据实际情况调整超时时间和路径配置。❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧

相关文章:

HoRain云--Selenium4文件上传下载终极指南

🎬 HoRain云小助手:个人主页 🔥 个人专栏: 《Linux 系列教程》《c语言教程》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!…...

[技术解析] 差异图引导:破解无人机集群微小目标检测的“消失”难题

1. 无人机集群检测的痛点:为什么小目标会"消失"? 当你用无人机监控一片区域时,最头疼的莫过于屏幕上那些比蚂蚁还小的黑点——它们可能是入侵的无人机,也可能是需要追踪的野生动物。但传统算法处理这些目标时&#xff0…...

企业微信消息推送API实战:5分钟搞定可信IP与域名配置(含避坑指南)

企业微信消息推送API实战:5分钟搞定可信IP与域名配置(含避坑指南) 当企业微信成为越来越多组织的协同办公中枢,其消息推送API的价值也日益凸显。想象一下:每天早晨9点,销售团队自动收到前日业绩简报&#…...

揭秘银行核心系统C++内存池配置:如何将GC停顿从200ms压至8μs?

第一章:银行核心系统内存管理的金融级挑战银行核心系统是金融基础设施的中枢,其内存管理不仅关乎性能,更直系交易一致性、资金安全与监管合规。毫秒级延迟抖动可能引发跨行清算超时,未释放的内存泄漏可在高并发批量代发场景下数小…...

紧急预警:GCC 14.2默认禁用C++27新异常策略,3行代码立即启用并规避ABI断裂风险

第一章:GCC 14.2异常策略变更的底层动因与影响全景GCC 14.2 引入了对 C 异常处理机制的实质性策略调整,核心动因在于缓解长期存在的二进制兼容性风险与运行时开销矛盾。传统 DWARF-based 零成本异常(zero-cost exception)在跨编译…...

5步解锁全球化内容生产:MoneyPrinterTurbo多语言视频创作全指南

5步解锁全球化内容生产:MoneyPrinterTurbo多语言视频创作全指南 【免费下载链接】MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频 Generate short videos with one click using AI LLM. 项目地址: https://gitcode.com/GitHub_Trending/mo/MoneyP…...

微信小程序连接大模型:百川2-13B赋能智能客服小程序开发

微信小程序连接大模型:百川2-13B赋能智能客服小程序开发 最近在做一个宠物用品商城的小程序,老板提了个需求,想给用户加个24小时在线的智能客服,能回答一些关于宠物喂养、商品咨询的常见问题。一开始想用传统的规则问答&#xff…...

CAPL诊断脚本避坑指南:diagSetPrimitiveData和diagSetPrimitiveByte到底怎么选?

CAPL诊断脚本避坑指南:diagSetPrimitiveData和diagSetPrimitiveByte到底怎么选? 在汽车电子诊断测试领域,CAPL脚本的高效编写直接关系到测试覆盖率和执行效率。许多中级开发者在处理大数据块传输或多帧诊断请求时,常常陷入diagSet…...

实战案例:用HY-MT1.5-1.8B为网站实现多语言自动翻译

实战案例:用HY-MT1.5-1.8B为网站实现多语言自动翻译 1. 项目背景与需求分析 在全球化时代,网站多语言支持已成为基本需求。传统解决方案面临三大痛点: 成本高昂:专业人工翻译每千字费用通常在200-500元,大型网站维护…...

别让格式拖垮论文!Paperxie AI 一键盘活你的毕业定稿

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AIPPThttps://www.paperxie.cn/format/typesettinghttps://www.paperxie.cn/format/typesetting 凌晨两点的宿舍,键盘敲击声断断续续,桌前的本科生盯着屏幕上的论文文档叹气 —— 内…...

Realistic Vision V5.1 虚拟摄影棚结合传统软件:生成素材导入PS进行后期合成

Realistic Vision V5.1 虚拟摄影棚结合传统软件:生成素材导入PS进行后期合成 你有没有遇到过这样的场景:脑子里有一个绝佳的创意画面,但要么找不到合适的模特和场景,要么拍摄成本高得吓人,要么就是后期修图修到天昏地…...

Java 21虚拟线程实战:从基础创建到高并发场景调优

1. Java 21虚拟线程入门:从零开始掌握轻量级并发 第一次听说Java 21的虚拟线程时,我正被一个高并发服务的性能问题折磨得焦头烂额。当时我们的支付网关在促销期间每秒要处理上万笔交易,传统的线程池模型让服务器资源捉襟见肘。直到尝试了虚拟…...

NCM文件解密工具:三步解锁网易云音乐加密音频

NCM文件解密工具:三步解锁网易云音乐加密音频 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的歌曲无法在其他播放器上播放而烦恼吗?你是否遇到过精心收藏的音乐只能在特定软件中聆听的…...

IEEE Trans系列期刊投稿指南:如何高效命中CCF-B类1区Top期刊(附最新录用案例)

IEEE Trans系列期刊高效投稿策略:从选题到录用的全流程实战指南 在学术研究领域,IEEE Transactions系列期刊始终代表着工程技术学科的最高水准。对于国内高校教师、科研人员及博士生而言,成功在CCF-B类1区Top期刊发表论文,不仅意味…...

终极指南:3步掌握CefFlashBrowser,让经典Flash内容重获新生

终极指南:3步掌握CefFlashBrowser,让经典Flash内容重获新生 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 你是否还在为无法播放那些经典的Flash游戏和动画而烦恼…...

Keychron机械键盘选购指南:红轴双模如何提升程序员生产力

1. 为什么程序员需要一把Keychron红轴双模键盘 作为一个每天要和键盘亲密接触8小时以上的程序员,我深刻体会到一把好键盘对工作效率的影响。之前用过青轴、茶轴、黑轴等各种机械键盘,直到遇到Keychron的红轴双模版本,才真正找到了"本命键…...

告别重复造轮子:用快马生成高效配对模块提升开发效率

在开发智能硬件或物联网项目时,设备配对功能几乎是每个项目都绕不开的基础模块。但每次从零开始实现蓝牙、Wi-Fi等设备的配对逻辑时,总免不了要重复处理扫描过滤、状态管理、错误重试这些"轮子"。最近尝试用InsCode(快马)平台生成标准化配对模…...

Music Tag Web:一站式智能音乐标签管理解决方案

Music Tag Web:一站式智能音乐标签管理解决方案 【免费下载链接】music-tag-web 音乐标签编辑器,可编辑本地音乐文件的元数据(Editable local music file metadata.) 项目地址: https://gitcode.com/gh_mirrors/mu/music-tag-we…...

敏捷测试实践:两周一个迭代的质量保障

在软件快速交付的时代,以两周为一个迭代周期的敏捷开发模式已成为行业主流。对于测试从业者而言,这既是挑战也是机遇。传统的“瀑布式”测试在漫长的周期后介入的模式已彻底失效,质量保障活动必须无缝融入高速运转的迭代流水线,从…...

HCIP IP-VLAN 实验报告

一、实验拓扑二、实验思路1、完成二层vlan的划分,实现二层隔离 2、三层IP配置 3、DHCP配置按照要求在拓扑图上标注了一下三、测试1、划分接口情况(display port vlan active)SW1SW2SW32、IP 配置情况 (display ip interface brief)R13、DHCPR1池塘配置(display ip p…...

手把手教你用VSCode和ST-Link V2给ODrive V3.6编译烧录056固件(附避坑指南)

从零开始:ODrive V3.6固件编译与烧录全流程实战指南 当你第一次拿到ODrive V3.6这款高性能电机驱动板时,可能会被它强大的功能所吸引,同时也可能对如何开始使用感到些许迷茫。本文将带你一步步完成从环境搭建到固件烧录的全过程,…...

开源PDF工具clawPDF:高效办公的终极解决方案

开源PDF工具clawPDF:高效办公的终极解决方案 【免费下载链接】clawPDF Open Source Virtual (Network) Printer for Windows that allows you to create PDFs, OCR text, and print images, with advanced features usually available only in enterprise solutions…...

Django 与 FastAPI 架构对比:学习路径指南

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

基于Arduino-ESP32的智慧社区车牌识别门禁系统:从边缘计算到场景落地

基于Arduino-ESP32的智慧社区车牌识别门禁系统:从边缘计算到场景落地 【免费下载链接】arduino-esp32 Arduino core for the ESP32 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 问题发现:传统门禁系统的技术瓶颈与边缘计算机…...

华为CE12808/S9700交换机istack/CSS堆叠主备倒换实战指南与常见问题解析

1. 华为交换机堆叠技术基础认知 第一次接触华为CE12808和S9700交换机的堆叠功能时,我被istack和CSS这两个专业术语搞得有点懵。后来在实际项目中反复折腾才发现,这其实就是华为针对不同系列交换机设计的两种堆叠技术方案。简单来说,istack主要…...

课题申请:如何在评审专家的“黄金三分钟”内锁定胜局?

基金申报的战场硝烟弥漫,每一位科研人员都深知,一份标书的命运往往掌握在评审专家的手中。然而,现实情况是,评审工作极其繁重,专家们需要在短时间内审阅大量本子。据统计,评审专家在立项依据部分的停留时间…...

艺术二维码生成工具实战指南:从技术实现到商业价值挖掘

艺术二维码生成工具实战指南:从技术实现到商业价值挖掘 【免费下载链接】control_v1p_sd15_qrcode_monster 项目地址: https://ai.gitcode.com/hf_mirrors/monster-labs/control_v1p_sd15_qrcode_monster 核心要点 解决传统二维码设计与功能性矛盾的完整技…...

普通人如何杀入AI赛道?(附岗位薪资与避坑指南)AI转行必看!

AI几乎成为了打工人的必修课。和大家交流过程中,最常见的一些问题:“现在转行AI还来得及吗?”、“我不懂代码,能做AI产品经理吗?”、“以及怎么转行做AI?”。 答案是:不仅来得及,而且…...

深耕作物模型底层逻辑!DSSAT物候算法、光合物质分配与土壤碳氮循环机制深度解析

在精准农业与智慧育种快速发展的当下,深入解析作物生长发育机理、实现产量与环境的精准模拟,已成为农学科研与农业管理决策的核心需求。DSSAT模型作为全球应用最广泛的作物生长模拟系统,凭借其涵盖27种主要作物的完备模块体系与成熟的算法架构…...

用Go搞定微信扫码登录:一个后端接口+一个回调,附完整可运行代码

极简Go实现微信扫码登录:两个接口搞定全流程 每次看到新项目要接入微信登录就头疼?文档翻来覆去看不明白?其实用Go实现微信扫码登录,核心代码不超过200行。今天我们就用最粗暴的方式,把微信OAuth2.0登录简化为两个接口…...