Python使用DrissionPage上传文件:从基础到实战指南

在自动化测试和网页爬虫开发中,文件上传是一个常见需求。本文将详细介绍如何使用Python的DrissionPage库实现高效稳定的文件上传操作,涵盖基础原理、核心方法和实战案例。

一、DrissionPage上传文件的核心原理

DrissionPage是一个基于Selenium和Requests的混合驱动库,它简化了浏览器自动化操作。网页中的文件上传通常通过两种方式实现:

  1. 直接操作隐藏的input元素
    大多数网页使用<input type="file">元素实现上传功能,即使前端用美观的按钮覆盖,底层仍依赖该元素。

  2. 处理JavaScript动态生成的上传组件
    部分复杂网页使用JS动态创建上传控件,需要特殊处理。

二、基础文件上传实现

1. 最简上传示例

fromDrissionPageimportChromiumPage# 初始化浏览器page=ChromiumPage()page.get('https://example.com/upload')# 替换为实际上传页面# 直接定位file input并上传file_input=page.e('input[type="file"]')# CSS选择器file_input.send_keys(r'C:\test\sample.jpg')# 发送文件路径

2. 完整流程封装

defupload_file(page,url,file_path):""" 通用文件上传函数 :param page: DrissionPage对象 :param url: 上传页面URL :param file_path: 本地文件路径 :return: 是否上传成功 """try:page.get(url)# 等待上传元素加载(显式等待更可靠)upload_input=page.wait('@input[type="file"]',timeout=10)upload_input.send_keys(file_path)returnTrueexceptExceptionase:print(f"上传失败:{str(e)}")returnFalse

三、实战案例:批量上传图片并处理结果

以下是一个完整的实战案例,实现批量上传图片到百度AI平台并处理识别结果:

importosimportreimporttimeimportrandomfromDrissionPageimportChromiumPage# 配置参数TARGET_DIR=r'G:\验证码项目\抖音九宫格语义点选验证码\图片\temp改名文件夹/'SOURCE_DIR=r'G:\验证码项目\抖音九宫格语义点选验证码\图片\3裁剪后的图片\' UPLOAD_URL='https://chat.baidu.com/search'defprocess_images():# 初始化浏览器page=ChromiumPage()# 确保目标目录存在os.makedirs(TARGET_DIR,exist_ok=True)# 获取所有图片image_files=[fforfinos.listdir(SOURCE_DIR)iff.lower().endswith(('.jpg','.png'))]forimg_nameinimage_files:img_path=os.path.join(SOURCE_DIR,img_name)try:# 上传流程page.get(UPLOAD_URL)# 点击上传按钮(根据实际页面结构调整)upload_btn=page.ele('xpath://div[contains(@class,"upload-btn")]')upload_btn.click()# 操作隐藏的file inputfile_input=page.ele('input[type="file"]')file_input.send_keys(img_path)# 填写表单(示例)textarea=page.ele('textarea[id="chat-textarea"]')textarea.input("请识别图片中的内容,用【】标注结果")# 提交submit_btn=page.ele('img[class*="submit-button"]')submit_btn.click()# 等待结果(根据实际页面调整等待条件)time.sleep(5)# 提取识别结果result_div=page.ele('div[class*="marklang"]')result_text=result_div.textprint(f"识别结果:{result_text}")# 解析结果matches=re.findall(r'【(.*?)】',result_text)ifmatches:# 生成新文件名new_name=f"{matches[0]}_{int(time.time()*1000)}_{random.randint(1000,9999)}.jpg"new_path=os.path.join(TARGET_DIR,new_name)# 移动文件(先删除已存在的同名文件)ifos.path.exists(new_path):os.remove(new_path)os.rename(img_path,new_path)print(f"文件已重命名为:{new_name}")exceptExceptionase:print(f"处理图片{img_name}时出错:{str(e)}")continueif__name__=='__main__':process_images()

四、高级技巧与注意事项

1. 处理动态加载的上传组件

对于使用JavaScript动态生成的上传组件,可以尝试:

# 方法1:先点击触发按钮再操作inputtrigger_btn=page.ele('button[data-action="upload"]')trigger_btn.click()file_input=page.ele('input[type="file"]')# 现在应该可见file_input.send_keys(file_path)# 方法2:直接执行JS触发点击page.run_js('document.querySelector("input[type=file]").click()')

2. 多文件上传

# 支持多选的上传(需页面允许)file_input=page.ele('input[type="file"][multiple]')file_input.send_keys([r'C:\test\file1.jpg',r'C:\test\file2.png'])

3. 等待策略优化

# 更可靠的等待方式fromDrissionPage.commonimportWait# 等待元素出现(最多10秒)upload_input=Wait(page).until(lambdap:p.ele('input[type="file"]'))# 或者使用显式等待page.wait('@input[type="file"]',timeout=10)

4. 常见问题解决

  1. 文件路径问题

    • 始终使用绝对路径
    • Windows路径使用原始字符串(前缀r)或双反斜杠
  2. 元素定位失败

    • 检查元素是否在iframe中(需要先切换)
    • 确认页面是否完全加载
    • 尝试多种定位方式(CSS/XPath)
  3. 浏览器兼容性

    • 确保ChromeDriver版本与浏览器匹配
    • 考虑使用无头模式(options.set_headless()

五、性能优化建议

  1. 复用浏览器实例:避免频繁启动关闭浏览器
  2. 并行处理:使用多线程/多进程处理大量文件
  3. 异常重试机制:对失败操作自动重试
  4. 日志记录:详细记录上传过程和结果

六、总结

DrissionPage提供了简洁高效的文件上传实现方式,通过直接操作隐藏的<input type="file">元素,可以绕过复杂的前端交互逻辑。掌握本文介绍的核心方法和实战技巧后,您可以轻松实现各种文件上传自动化需求。

对于更复杂的场景,建议结合DrissionPage的等待机制、异常处理和JavaScript执行能力,构建健壮的自动化流程。在实际项目中,还应考虑添加进度显示、结果验证和错误恢复等功能,提升用户体验和系统可靠性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1129450.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nordic的nRF54L系列也推出单片机AI版nRF54LM20B,搭载Axon NPU的新型超低功耗无线SoC

https://www.nordicsemi.com/Nordic-news/2026/01/nRF54L-Series-SoC-with-NPU-and-Nordic-Edge-AI-Lab-make-on-device-intelligence-easily-accessible 搭载Axon NPU的新一代nRF54LM20B 2023年&#xff0c;Nordic收购了Atlazo及其Axon技术。nRF54LM20B SoC是nRF54L系列首款大…

深度学习入门:使用M2FP完成第一个分割项目

深度学习入门&#xff1a;使用M2FP完成第一个分割项目 &#x1f4cc; 为什么选择M2FP作为你的语义分割起点&#xff1f; 对于刚接触深度学习的开发者而言&#xff0c;图像分割是一个既吸引人又充满挑战的任务。尤其是多人人体解析——在一张图中精准识别多个个体的身体部位&a…

openspec开放标准参考:M2FP符合可解释AI设计原则

openspec开放标准参考&#xff1a;M2FP符合可解释AI设计原则 &#x1f9e9; M2FP 多人人体解析服务 (WebUI API) 项目背景与可解释AI的契合点 在人工智能系统日益深入视觉内容理解的今天&#xff0c;可解释性&#xff08;Explainability&#xff09; 成为衡量模型是否具备工程…

百度搜索关键词优化:M2FP人体解析相关词条排名上升

百度搜索关键词优化&#xff1a;M2FP人体解析相关词条排名上升 &#x1f4cc; 从技术落地到流量增长&#xff1a;M2FP多人人体解析服务的SEO实践启示 在AI模型日益普及的今天&#xff0c;一个优秀的深度学习项目不仅要具备工程稳定性和功能完整性&#xff0c;还需在信息分发层面…

M2FP在低光照条件下表现如何?实测结果显示鲁棒性强

M2FP在低光照条件下表现如何&#xff1f;实测结果显示鲁棒性强 &#x1f4d6; 项目简介&#xff1a;M2FP 多人人体解析服务 在计算机视觉领域&#xff0c;人体解析&#xff08;Human Parsing&#xff09; 是一项关键的细粒度语义分割任务&#xff0c;目标是将人体分解为多个语义…

为什么多人解析常出错?M2FP内置拼图算法让Mask合并更精准

为什么多人解析常出错&#xff1f;M2FP内置拼图算法让Mask合并更精准 &#x1f9e9; M2FP 多人人体解析服务&#xff1a;从离散Mask到完整语义图的工程突破 在当前计算机视觉领域&#xff0c;多人人体解析&#xff08;Multi-person Human Parsing&#xff09; 是一项极具挑战性…

除尘系统设计(源码+万字报告+讲解)(支持资料、图片参考_相关定制)

除尘系统设计 摘 要&#xff1a;作为一种高效气固分离设备&#xff0c;旋风除尘器在工业除尘系统中的应用非常广泛&#xff0c;而随着环保要求越来越严格&#xff0c;提高除尘设备效率&#xff0c;降低能耗&#xff0c;降低运行阻力成为研究的重点&#xff0c;利用含尘气流在设…

Kafka和RabbitMQ相比有什么优势?

Kafka和RabbitMQ都是流行的消息中间件系统&#xff0c;他们各自都有一些优势和适用场景。以下是Kafka相对于RabbitMQ的一些比较明显的优势&#xff1a;分布式架构&#xff1a;Kafka是为大规模分布式流处理而设计的&#xff0c;具有高度可伸缩性。RabbitMQ虽然也支持分布式架构&…

成功案例|如何进行岗位价值评估?——华恒智信助力某国有数智化中心薪酬改革实例

【客户行业】 人工智能、大数据、国有企业、技术服务、研发中心、数智化转型、高科技行业【问题类型】 岗位价值评估、薪酬体系设计、绩效考核体系搭建、宽带薪酬设计、核心人才激励方案、国有企业薪酬激励方案、人力资源体系诊断与优化【客户背景】某国有数智化中心是行业领头…

Z-Image-Turbo特殊教育应用:自闭症儿童沟通图像生成工具

Z-Image-Turbo特殊教育应用&#xff1a;自闭症儿童沟通图像生成工具 引言&#xff1a;技术赋能特殊教育的创新实践 在特殊教育领域&#xff0c;非语言沟通障碍是自闭症谱系障碍&#xff08;ASD&#xff09;儿童面临的核心挑战之一。许多孩子具备丰富的内心世界&#xff0c;却因…

对比测试:M2FP在微pe官网风格页面中仍保持高解析稳定性

对比测试&#xff1a;M2FP在微pe官网风格页面中仍保持高解析稳定性 &#x1f4cc; 引言&#xff1a;为何需要稳定的人体解析服务&#xff1f; 在当前AI视觉应用快速落地的背景下&#xff0c;多人人体解析&#xff08;Human Parsing&#xff09;已成为智能零售、虚拟试衣、安防…

虚拟主播制作全流程:M2FP关键角色

虚拟主播制作全流程&#xff1a;M2FP关键角色 在虚拟主播&#xff08;VTuber&#xff09;的制作流程中&#xff0c;精准的人体解析技术是实现高质量动捕驱动、形象合成与场景融合的核心前提。尤其是在多人互动直播、虚拟舞台演出等复杂场景下&#xff0c;系统需要准确识别每位角…

Z-Image-Turbo浮世绘风格日本风情图创作

Z-Image-Turbo浮世绘风格日本风情图创作 从AI图像生成到文化美学的融合&#xff1a;Z-Image-Turbo的艺术潜力 随着生成式AI技术的不断演进&#xff0c;图像生成模型已不再局限于“写实”或“抽象”的二元表达。阿里通义推出的 Z-Image-Turbo 模型凭借其高效的推理速度与高质量输…

ZYNQ入门指南:ARM+FPGA开发全解析

ZYNQ 基础知识ZYNQ是Xilinx&#xff08;现为AMD&#xff09;推出的一款可编程SoC&#xff08;System on Chip&#xff09;&#xff0c;结合了ARM处理器的处理能力和FPGA的灵活性。其核心架构分为处理系统&#xff08;PS&#xff09;和可编程逻辑&#xff08;PL&#xff09;两部…

使用M2FP开发智能姿势矫正应用

使用M2FP开发智能姿势矫正应用 &#x1f9e9; M2FP 多人人体解析服务&#xff1a;技术底座与核心能力 在智能健康、运动辅助和人机交互等前沿领域&#xff0c;精准的人体结构理解是实现高级功能的关键前提。传统的姿态估计算法&#xff08;如OpenPose&#xff09;虽然能提取关键…

没有 Mac 如何在 Windows 上创建 iOS 应用描述文件

在不少团队里&#xff0c;真正持有 Mac 的人并不多。 构建、调试、打包往往集中在 CI 或少数机器上&#xff0c;而证书、描述文件这些“苹果后台资源”&#xff0c;却需要被更多人共享和维护。 我最早也是在这种背景下&#xff0c;开始尝试在 Windows 环境完成描述文件的创建和…

M2FP支持Windows部署吗?官方镜像兼容主流操作系统

M2FP支持Windows部署吗&#xff1f;官方镜像兼容主流操作系统 &#x1f9e9; M2FP 多人人体解析服务 (WebUI API) 项目背景与核心价值 在计算机视觉领域&#xff0c;人体解析&#xff08;Human Parsing&#xff09; 是一项关键的细粒度语义分割任务&#xff0c;旨在将人体分…

如何用M2FP实现智能舞蹈编排系统?

如何用M2FP实现智能舞蹈编排系统&#xff1f; &#x1f9e9; M2FP 多人人体解析服务&#xff1a;构建智能舞蹈系统的视觉基石 在智能舞蹈编排系统中&#xff0c;精准理解舞者身体姿态与空间关系是核心前提。传统动作捕捉依赖昂贵设备或关键点检测模型&#xff0c;往往难以处理…

2026知网降AI工具深度测评

在2026年各高校明确将AIGC检测作为毕业门槛、知网算法全面升级的严峻背景下&#xff0c;选择一款真正有效的降AI工具&#xff0c;已直接关系到能否顺利毕业。本文将基于对主流工具的实测&#xff0c;深入剖析当前局面&#xff0c;并给出清晰的决策指南。 面对“比话降AI”宣称的…

Z-Image-Turbo常见问题汇总及解决方案手册

Z-Image-Turbo常见问题汇总及解决方案手册 阿里通义Z-Image-Turbo WebUI图像快速生成模型 二次开发构建by科哥 本文定位与阅读价值 随着AI图像生成技术的快速发展&#xff0c;阿里通义推出的 Z-Image-Turbo 模型凭借其高效的推理速度和高质量的图像输出&#xff0c;在开发者社…