前言
文件上傳是web頁面上很常見的一個功能,自動化成功中操作起來卻不是那么簡單。
一般分兩個場景:一種是input標簽,這種可以用selenium提供的send_keys()方法輕松解決;
另外一種非input標簽實現起來比較困難,可以借助autoit工具或者SendKeys第三方庫。
本篇以博客園的上傳圖片為案例,通過send_keys()方法解決文件上傳問題
一、識別上傳按鈕
1.點開博客園編輯器里的圖片上傳按鈕,彈出”上傳本地圖片”框。
2.用firebug查看按鈕屬性,這種上傳圖片按鈕有個很明顯的標識,它是一個input標簽,並且type屬性的值為file。
只要找到這兩個標識,我們就可以直接用send_keys()方法上傳文件了。
二、定位iframe
1.這里定位圖片上傳按鈕情況有點復雜,首先它是在iframe上(不懂iframe的看這篇:Selenium2+python自動化14-iframe)
2.這個iframe的id是動態的,且沒有name屬性,其它屬性也不是很明顯
3.通過搜索發現,這個頁面上有兩個iframe,需要定位的這個iframe是處於第二個位置
4.可以通過標簽定位所有的iframe標簽,然后取對應的第幾個就可以了。
三、文件上傳
1.先定位到文件上傳按鈕,直接調用send_keys()方法就可以實現啦
# coding:utf-8
from selenium import webdriver
import time
profileDir = r'C:\Users\Gloria\AppData\Roaming\Mozilla\Firefox\Profiles\1x41j9of.default'
profile = webdriver.FirefoxProfile(profileDir)
driver = webdriver.Firefox(profile)
driver.implicitly_wait(30)
driver.get("http://www.cnblogs.com/yoyoketang/")
driver.find_element_by_link_text("新隨筆").click()
time.sleep(3)
# 點開編輯器圖片
driver.find_element_by_css_selector("img.mceIcon").click()
time.sleep(3)
# 定位所有iframe,取第二個
iframe = driver.find_elements_by_tag_name('iframe')[1]
# 切換到iframe上
driver.switch_to_frame(iframe)
# 文件路徑
driver.find_element_by_name('file').send_keys(r"D:\test\xuexi\test\14.png")