前言
不少小伙伴問非input標簽如何上傳文檔,這個本身就是一坑,無奈很多小伙伴非要跳坑里去,那就介紹一個非主流的上傳文件方法吧,用第三方庫SendKeys.
只支持python2環境
python3 的用 PyUserInput 看這篇 selenium+python自動化85-python3.6上SendKeys報錯用PyUserInput取代
一、SendKeys安裝
1.pip安裝SendKeys
>pip install SendKeys
2.在安裝的時候如果你出現上面保存,先別急着截圖貼群求大神,上面已經告訴解決辦法了:Get it from http://aka.ms/vcpython27
3.按上面給的地址下載文件,一路傻瓜式安裝就行
4.出現如下界面,說明安裝成功了
二、參考代碼
1.以下代碼在Chrom瀏覽器上是運行通過的,要先登錄博客園記住密碼,然后加載配置免登錄
2.chrome加載配置方法,只需改下面一個地方,username改成你電腦的名字(別用中文!!!)
'--user-data-dir=C:\Users\username\AppData\Local\Google\Chrome\User Data'
3.后面兩次回車,是因為搜狗輸入法,第一個回車是確認輸入,第二個是確定選中的文件
# coding:utf-8
from selenium import webdriver
import SendKeys
import time
# 加載Firefox配置
# profileDir = r'C:\Users\xxxAppData\Roaming\Mozilla\Firefox\Profiles\1x41j9of.default'
# profile = webdriver.FirefoxProfile(profileDir)
# driver = webdriver.Firefox(profile)
# 加載Chrome配置
option = webdriver.ChromeOptions()
option.add_argument('--user-data-dir=C:\Users\xxxAppData\Local\Google\Chrome\User Data')
driver = webdriver.Chrome(chrome_options=option)
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)
# 文件路徑
time.sleep(2)
driver.find_element_by_class_name("qq-upload-button").click()
# driver.find_element_by_name("file").click()
time.sleep(5)
# SendKeys方法輸入內容
SendKeys.SendKeys("D:\\test\\jie1\\blog\\12.png") # 發送文件地址
time.sleep(1)
SendKeys.SendKeys("{ENTER}") # 發送回車鍵
time.sleep(1)
SendKeys.SendKeys("{ENTER}") # 因為我的電腦是搜索輸入法,所以多看一次回車
# driver.quit()
(備注:這里Firefox上運行有個坑,第二次回車失效了,這個暫時沒想到好的解決辦法)