python+selenium2.53.6学习(3)之图片上传
自动图片上传的几种方式
1. input框标准型,以百度网盘为例,上传的按钮是一个input标签,可以直接使用send_keys('绝对路径')
代码如下
# *-coding:utf-8-*- from selenium import webdriver import time #自动加载插件或配置信息,其中UserName指代主机名,需要替换 prifile_directory = 'C://Users//UserName//AppData//Roaming//Mozilla//Firefox//Profiles//6xhkg22s.default' profile = webdriver.FirefoxProfile(prifile_directory) driver = webdriver.Firefox(profile) # driver =webdriver.Firefox() #不加载配置项的话使用这个启动,但后续代码需要增加登录功能 driver.get('https://pan.baidu.com/') '''之前登录成功且设置自动登录,所以此处get url后为登录状态''' time.sleep(3) driver.refresh() #此处浏览器刷新是因为有一个添加卡包的弹出框,刷新后消失 time.sleep(5) driver.find_element_by_css_selector('#h5Input0').send_keys(u'C:\\Users\\Public\\Selenium2 Python自动化测试实战(第二版).pdf')
验证通过。其中注意到在注释中都有提及,可以上传图片、文件等,属于最基本的方式
2. 不是input框标准格式的,可以使用pyUserInput模块模拟键盘操作
# *-coding:utf-8-*- from selenium import webdriver import time from pykeyboard import PyKeyboard key = PyKeyboard() #自动加载插件或配置信息,其中UserName指代主机名,需要替换 prifile_directory = 'C://Users//liaga//AppData//Roaming//Mozilla//Firefox//Profiles//6xhkg22s.default' profile = webdriver.FirefoxProfile(prifile_directory) driver = webdriver.Firefox(profile) # driver =webdriver.Firefox() #不加载配置项的话使用这个启动,但后续代码需要增加登录功能 driver.get('https://pan.baidu.com/') time.sleep(3) driver.refresh() time.sleep(5) driver.find_element_by_css_selector('#h5Input0').click() time.sleep(3) # key.type_string('C:\Users\Public\Pictures\Sample Pictures\Lighthouse.jpg') #可以 key.type_string(u'C:\\Users\\Public\\Pictures\\Sample Pictures\\Selenium2 Python自动化测试实战(第二版).pdf') time.sleep(2) key.tap_key(key.enter_key
同样以百度云盘为例,但这里有一个问题就是如果路径中有中文,怎么上传都不行,暂时还没找到解决方法。
QQ邮箱上传图片代码如下
driver.get('https://mail.qq.com') time.sleep(10) driver.find_element_by_css_selector('#composebtn').click() print '1. send_message click' time.sleep(3) driver.switch_to.frame('mainFrame') time.sleep(3) driver.find_element_by_name("UploadFile").send_keys("D:\\1.png")
初次之外还有 sendKeys包、autoit,不过没有去尝试,这里就不介绍了。