【selenium学习 -6】文件上传操作的两种方式
本文主要讲解,在selenium自动化中,实现文件上传的两种方式。
本章节实验的HTML代码:
<html> <form action="http://baidu.com" target="" id="uploadForm" enctype="multipart/form-data"></form> <input id="file" type="file" name="file" /> <input type="submit" name="submit" id="submit" value="upload" /> </form> </html>
第一种方式是,使用send_keys来实现文件的上传
<input type="file">可以先定位到该元素,然后直接将文件的路径作为send_keys的参数
from selenium import webdriver import time if __name__ == ‘__main__‘: driver = webdriver.Chrome() driver.get(r"file:///E://Project//Selenium//upload.html") driver.maximize_window() ele =driver.find_element_by_id("file") ele.send_keys(r"E:\Project\Selenium\test.jpg") #此步骤中直接将文件的路径作为send_keys的参数传递 time.sleep(3) driver.find_element_by_id("submit").click()
第二种方式是,点开Windows的窗口,使用 PyUserInput 库进行全局的鼠标键盘操作。
1.第一步需要安装PyUserInput,可以通过pip install PyUserInput直接安装,但是在安装过程中,提示需要首先安装PyHook。
PyHook只能离线安装,进入https://www.lfd.uci.edu/~gohlke/pythonlibs/ 选择合适自己的版本
比如
下载好后,可以在cmd中,输入以下内容安装
pip install pyhook-xxx-xxx.whl路径
2.安装pyhook后,再进行PyUserInput便可顺利完成。测试代码如下。
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import time #PyMouse和PyKeyboard的使用,导入以下,而不是导入PyUserInput from pymouse import PyMouse from pykeyboard import PyKeyboard if __name__ == ‘__main__‘: mouse = PyMouse() key =PyKeyboard() driver = webdriver.Chrome() driver.get(r"file:///E://Project//Selenium//upload.html") driver.maximize_window() ele =driver.find_element_by_id("file") ActionChains(driver).click(ele).perform() time.sleep(3) #点开Windows窗口后,光标就会自动在windows的输入栏内,可以直接进行全局输入 key.type_string(r"E:\Project\Selenium\test.jpg") time.sleep(5) #输入后,再按回车 key.press_key(key.enter_key)
总结:因为web的代码无法操作Windows的窗口,所以衍生出了两种方式,一种直接调API,一种进行系统层面的全局操作。当然,能用第一种尽量用第一种,方便简单。如果实在无法,也可以使用第二种方式
第二种方式,因为是在全局进行操作,所以也可以应用在其他C/S上的测试,这个问题,以后再细说吧