python+selenium 文件上傳


前言

文件上傳是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")


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM