前言
在平常工作中经常在浏览器上进行一系列的上传和下载操作,既然是在浏览器上进行的操作,那么上传和下载操作可以不可以通过selenium进行来完成呢?安静本篇内容就给大家解读下如何通过selenium进行上传和下载操作。
上传操作
通常我们网页上的上传分为input标签和非input标签,其中input标签直接可以通过webdriver中的方法send_keys方法进行直接输入需要上传文件地址,非input标签的话需要借助外部工具进行辅助我们完成上传操作。
input标签
安静先写input标签的HTML上传文件:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>跟着安静学测试</title> </head> <body> <form action="demo-form.php"> 选择图片: <input type="file" name="img" multiple> <input type="submit"> </form> </body> </html>
直接通过send_keys进行输入文件地址:
from selenium import webdriver import time driver = webdriver.Chrome() driver.get('E:\\web\\Upload.html') time.sleep(2) driver.find_element_by_name('img').send_keys('E:\\web\\123.jpg')
通过下方执行结果的动图可以看出来,我们已经成功进行对图片进行了上传操作。
非input标签
安静这里找到了一个关于非input标签的上传实例,然后通过pywinauto这个第三方库控制Windows控件进行完成上传操作。
pywinauto来控制Windows上的控件来做一些自动化操作的库。可以通过pip进行安装。先看具体代码,然后安静在进行解释代码中内容:
from selenium import webdriver import time import pywinauto driver = webdriver.Chrome() driver.get('https://www.jq22.com/yanshi17984') driver.switch_to.frame("iframe") driver.find_element_by_class_name('addImg').click() time.sleep(2) # 通过窗口打开 app = pywinauto.Desktop() # 通过弹框名称进入控件中 win = app['打开'] # 输入上传图片的地址 win['Edit'].type_keys(r'E:\web\123.jpg') #点击打开按钮 win['Button'].click()
进行执行代码后可以看到我们已经完成了对非input标签上传的操作。
其中代码中关于pywinauto的内容,大家可能对几个参数有问题,打开、Edit、Button是怎么来的?其实这里是通过工具进行查看Windows控件内容来得到的。
具体关于pywinauto方面内容,大家可以看下官方文档进行查看。
下载操作
下载操作其实和正常的点击下载操作一样的。这里安静通过加载chrome配置,来防止弹框的问题。
import time from selenium import webdriver path = r'C:\Users\xxxxx\AppData\Local\Google\Chrome\User Data1' options = webdriver.ChromeOptions() # 增加个人浏览器地址 options.add_argument('--user-data-dir='+path) driver = webdriver.Chrome(chrome_options=options) driver.get('https://www.baidu.com') driver.find_element_by_id('kw').send_keys('chrome') driver.find_element_by_id('su').click() time.sleep(2) driver.find_element_by_xpath('//*[@class="c-btn c-btn-primary OP_LOG_BTN pc-js-btn_n7kWx"]').click()
通过执行代码后,发现已经成功的将chrome浏览器下载下来了。
总结
安静这里通过两个小案例来简单的介绍了如何通过selenium进行对页面上完成上传和下载操作。希望对您有所帮助。
作者:测试安静