📖 知识点
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(路径)绕过系统弹框,直接注入文件路径完成上传- 文件路径要写完整路径,且文件确实存在
⚠️ 易错提醒
- 定位上传控件要写
input[type='file'],别漏- 文件路径必须真实存在,否则无效
- 部分网站上传后会等待服务器处理,可稍等再验证
⚔️ Kata 实战任务
任务需求:
- 导入 ChromiumPage
- 访问一个含上传控件的练习页(如
https://the-internet.herokuapp.com/upload) - 用
page.ele("input[type='file']")定位上传控件 - 准备一个本地测试文件(可先创建一个 txt)
- 用
get_file(文件路径)把文件递送进去 - 打印上传完成提示
参考代码
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,上传已触发
🧠 思考题
get_file()相比手动操作,最大的便利是什么?为什么不需要系统弹框?- 如果上传控件不是
input[type='file'],还有哪些可能的定位写法?
行者孙Python