news 2026/6/9 21:37:31

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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执行能力,构建健壮的自动化流程。在实际项目中,还应考虑添加进度显示、结果验证和错误恢复等功能,提升用户体验和系统可靠性。

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

27.useFetch

React useFetch 钩子:如何优雅地处理网络请求? 在 React 应用开发中,处理网络请求是一个常见而重要的任务。虽然 JavaScript 的 fetch API 提供了一种现代化的方式来进行网络请求,但在 React 组件中使用它可能会变得复杂。useFetch 钩子提供了一种声明式的方法来处理网络请…

作者头像 李华
网站建设 2026/6/5 19:34:03

HIV-1 TAT Protein Peptide;Tyr-Gly-Arg-Lys-Lys-Arg-Arg-Gln-Arg-Arg-Arg

一、基础性质英文名称&#xff1a;HIV-1 TAT Protein Peptide&#xff1b;TAT (47-57) Peptide&#xff1b;Cell-Penetrating Peptide TAT&#xff1b;YGRKKRRQRRR peptide中文名称&#xff1a;HIV-1 TAT 蛋白肽段&#xff1b;TAT 细胞穿透肽&#xff1b;11 肽阳离子穿透域多肽…

作者头像 李华
网站建设 2026/6/5 15:48:44

2026最新!10个降AI率工具测评,本科生必备

2026最新&#xff01;10个降AI率工具测评&#xff0c;本科生必备 论文降AI率工具测评&#xff1a;为何需要专业工具&#xff1f;评测维度揭秘 随着高校和科研机构对AIGC内容检测技术的不断升级&#xff0c;传统的“换词改句”方式已难以满足降AI率的需求。许多本科生在撰写论文…

作者头像 李华
网站建设 2026/6/5 14:32:07

Z-Image-Turbo光线控制技巧:阳光、阴影与氛围营造

Z-Image-Turbo光线控制技巧&#xff1a;阳光、阴影与氛围营造 光线在AI图像生成中的核心作用 在AI图像生成领域&#xff0c;光线不仅是视觉呈现的基础元素&#xff0c;更是决定画面情绪、空间层次和真实感的关键因素。阿里通义Z-Image-Turbo WebUI作为一款高效能的图像快速生成…

作者头像 李华
网站建设 2026/6/5 21:07:46

M2FP模型在工业检测中的应用:工人安全监控系统

M2FP模型在工业检测中的应用&#xff1a;工人安全监控系统 &#x1f9e9; M2FP 多人人体解析服务&#xff1a;技术核心与工业价值 在智能制造与工业4.0的浪潮下&#xff0c;工厂安全管理正从“事后追责”向“事前预警、事中干预”的智能化模式演进。其中&#xff0c;基于视觉…

作者头像 李华
网站建设 2026/6/9 16:51:47

揭秘7款免费AI论文工具:润色+提原创,导师不会说的秘密

90%的学生还在为论文降重、润色、赶deadline熬夜爆肝&#xff0c;却不知道有些工具能让这个过程轻松90%。导师们或许用过&#xff0c;但绝不会在明面上告诉你。今天&#xff0c;我们就来揭开这层“学术信息差”的面纱。 你是否也曾面临这样的困境&#xff1a;对着空白的文档发呆…

作者头像 李华