多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ## **4.13 上传文件** 上传文件是比较常见的 Web 功能之一,但 WebDriver 并没有提供专门用于上传的方法,实现文件上传的关键在于思路。 在 Web 页面中,文件上传操作一般需要单击“上传”按钮后打开本地 Windows 窗口,从窗口中选择本地文件进行上传。因为 WebDriver 无法操作 Windows 控件,所以对于初学者来说,一般思路会卡在如何识别 Windows 控件这个问题上。 <br /> 在 Web 页面中一般通过以下两种方式实现文件上传。 * 普通上传:将本地文件路径作为一个值放在 input 标签中,通过 form 表单将这个 值提交给服务器。 * 插件上传:一般是指基于 Flash、JavaScript 或 Ajax 等技术实现的上传功能。 对于通过 input 标签实现的上传功能,可以将其看作一个输入框,即通过 send_keys()指定本地文件路径的方式实现文件上传。 ``` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>上传表单</title> <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> </head> <body> <div class="jumbotron"> <form class="form-inline" role="form"> <div class="form-group"> <label class="sr-only" for="name"></label> <input type="text" class="form-control" id="name" placeholder="请输入名字"> </div> <div class="form-group"> <label class="sr-only" for="inputfile">文件输入</label> <input type="file" id="inputfile"> </div> <button type="submit" class="btn btn-default">提交</button> </form> </div> </body> </html> ``` 通过浏览器打开 upfile.html 文件,效果如图 4-6 所示。 ![](https://img.kancloud.cn/92/d4/92d482209a542e1b86ce56c380290c54_548x140.png) ``` import os from selenium import webdriver file_path = os.path.abspath("./files/") driver = webdriver.Chrome() upload_page = "file:///" + file_path + "files/upload_file.html" driver.get(upload_page) # 定位上传按钮,添加本地文件 driver.find_element_by_id("file").send_keys(file_path + "test.txt") ``` 这里测试的页面(upfile.html)和上传的文件(test.txt)位于与当前程序同目录的 files/目录下。 通过这种方式上传,就避免了操作 Windows 控件。如果能找到上传的 input 标签,那么基本可以通过 send_keys()方法输入一个本地文件路径实现上传。