融灵篇-Day28|物品递送咒:自动化文件上传魔法

0 次阅读 2026-10-20 16:52

📖 知识点

1. 上传文件的难点

网页上传,通常是点击 "选择文件" 按钮,弹出系统文件选择框,手动挑文件。自动化要解决的就是:不让系统弹框,直接把文件路径告诉网页。

2. 核心方法:ele.get_file () 设置文件

DrissionPage 用 元素.get_file(文件路径) 直接把文件 "喂" 给上传控件:

# 定位上传控件(file类型input)
upload_input = page.ele("input[type='file']")
# 直接把文件路径设置进去,触发上传
upload_input.get_file("/home/user/图片/头像.png")

get_file() 会绕过系统弹窗,直接把文件路径写入上传控件,然后网页自动上传。

3. 上传多个文件

部分控件支持多选,可传多个路径:

# 传多个文件(用|分隔,或传入列表,视版本而定)
upload_input.get_file("/path/1.png | /path/2.jpg")

完整示例

from DrissionPage import ChromiumPage

page = ChromiumPage()
page.get("含上传控件的网址")

# 物品递送咒:定位上传控件
upload_input = page.ele("input[type='file']")

# 直接把文件路径递送进去
upload_input.get_file("/home/user/测试文档.txt")
print("✅ 文件已递送,上传触发")

💡 理解

  • 上传控件就是 input[type='file'] 这类元素
  • get_file(路径) 绕过系统弹框,直接注入文件路径完成上传
  • 文件路径要写完整路径,且文件确实存在

⚠️ 易错提醒

  1. 定位上传控件要写 input[type='file'],别漏
  2. 文件路径必须真实存在,否则无效
  3. 部分网站上传后会等待服务器处理,可稍等再验证

⚔️ Kata 实战任务

任务需求:

  1. 导入 ChromiumPage
  2. 访问一个含上传控件的练习页(如 https://the-internet.herokuapp.com/upload)
  3. 用 page.ele("input[type='file']") 定位上传控件
  4. 准备一个本地测试文件(可先创建一个 txt)
  5. 用 get_file(文件路径) 把文件递送进去
  6. 打印上传完成提示

参考代码

from DrissionPage import ChromiumPage

page = ChromiumPage()
# 访问上传练习页
page.get("https://the-internet.herokuapp.com/upload")
print("🌐 已打开上传练习页")

# 物品递送咒:定位上传控件
upload_input = page.ele("input[type='file']")
print("🎯 已定位到上传控件")

# 递送文件(换成你本地的真实文件路径)
file_path = "/home/user/测试文档.txt"   # 请替换为实际存在的文件
upload_input.get_file(file_path)
print(f"✅ 已递送文件:{file_path},上传已触发")

运行输出(示意):

🌐 已打开上传练习页
🎯 已定位到上传控件
✅ 已递送文件:/home/user/测试文档.txt,上传已触发

🧠 思考题

  1. get_file() 相比手动操作,最大的便利是什么?为什么不需要系统弹框?
  2. 如果上传控件不是 input[type='file'],还有哪些可能的定位写法?