本文主要讲解,在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/ 选择合适自己的版本
比如 pyHook‑1.5.1‑cp27‑cp27m‑win32.whl 代表 pyHook的1.5.1版本 适用于python2.7版本 windows32位
pyHook‑1.5.1‑cp27‑cp27m‑win_amd64.whl 代表 pyHook的1.5.1版本 适用于python2.7版本 windows64位
下载好后,可以在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上的测试,这个问题,以后再细说吧
我走的很慢,但从不后退