環境準備html
python3.6python
PyCharm 2017.1.3web
Windows環境瀏覽器
框架搭建app
selenium3.6框架
安裝方法:ide
pip install selenium工具
實現步驟:spa
1、步驟分析.net
一、選擇「帳號密碼登陸」
二、用戶名、密碼輸入,登陸
三、文件上傳
注:本文主要介紹利用selenium包下的webdriver加載Firefox瀏覽器。
2、元素捕捉
利用火狐瀏覽器firebug插件複製控件的XPATH路徑,注:Python3.6對應Firefox版本40.x,暫不支持最新版本50.x。
一、點擊「帳號密碼登陸」,獲取其源文件
效果圖以下:
點擊右鍵,複製Xpath路徑:/html/body/div[1]/div[3]/div[6]/div/div[6]/div[2]/a
登陸按鈕和文件上傳同上,獲取其相應的Xpath路徑
代碼:
1 #選擇帳號密碼登陸 2 driver.find_element_by_xpath('/html/body/div[1]/div[3]/div[6]/div/div[6]/div[2]/a').click() 3 # 登陸 4 driver.find_element_by_xpath('/html/body/div[1]/div[3]/div[6]/div/div[3]/form/p[5]/input').send_keys('username') 5 driver.find_element_by_xpath('/html/body/div[1]/div[3]/div[6]/div/div[3]/form/p[6]/input').send_keys('password') 6 driver.find_element_by_xpath('/html/body/div[1]/div[3]/div[6]/div/div[3]/form/p[9]/input').click()
二、登陸成功後,點擊文件上傳,彈出文件對話框
「上傳」的Xpath路徑爲://*[@id="h5Input0"]
代碼:
1 #上傳 2 driver.find_element_by_xpath('//*[@id="h5Input0"]').click()
點擊上傳按鈕,彈出文件對話框
3、AutoIT編寫腳本實現上傳文件
webdriver沒法對文件直接進行操做,因此須要藉助AutoIT來實現文件上傳
AutoIT下載地址:https://www.autoitscript.com/site
安裝AutoIt以後,打開AutoIt Window Info(x64)
四、獲取文件上傳窗口的控件信息:
打開autoit工具以後,用鼠標將Finder Tool的圖標拖到要識別的控件上
五、編寫AutoIt腳本,實現文件上傳
;ControlFocus("title", "text", controlID) Edit1=Edit instance 1
ControlFocus("文件上傳", "","Edit1")
;Wait 10 seconds for the Upload window to appear
WinWait("[CLASS:#32770]", "",10)
;Set the File name thext on the Edit field
ControlSetText("文件上傳", "", "Edit1", "D:\test.txt")
Sleep(2000)
;Click on the Open button
ControlClick("文件上傳", "", "Button1");
3. 將文件保存upfile.au3
4. 使用compile script to exe將上述AutoIt腳本編譯爲exe文件供python腳本調用
六、最後,使用Python腳本調用AutoIT腳本
1 #點擊上傳,打開上傳文件窗口 2 driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[2]/div[2]/div[2]/a[1]/form/input').click() 3 4 #使用autoit腳本自動上傳文件 5 #須要導入python的os庫文件: import os 6 os.system("D:/upfile.exe")
完整代碼以下:
1 import os 2 from selenium import webdriver 3 import time 4 class Connect(): 5 def __init__(self,UserName,PassWord,URL): 6 self.UserName = UserName 7 self.PassWord = PassWord 8 self.URL = URL 9 def connect(self): 10 self.driver = webdriver.Firefox() 11 self.driver.get(self.URL) 12 self.driver.find_element_by_xpath('/html/body/div[1]/div[3]/div[6]/div/div[6]/div[2]/a').click() 13 self.driver.find_element_by_xpath('/html/body/div[1]/div[3]/div[6]/div/div[3]/form/p[5]/input').send_keys(self.UserName) 14 self.driver.find_element_by_xpath('/html/body/div[1]/div[3]/div[6]/div/div[3]/form/p[6]/input').send_keys(self.PassWord) 15 self.driver.find_element_by_xpath('/html/body/div[1]/div[3]/div[6]/div/div[3]/form/p[9]/input').click() 16 #設置思考時間 17 time.sleep(30) 18 sreach_window = self.driver.current_window_handle # 此行代碼用來定位當前頁面 19 self.driver.find_element_by_xpath('//*[@id="h5Input0"]').click() 20 os.system(r"C:\Users\zg\Desktop\upfile.exe") 21 Connect(UserName,PassWord,URL).upload()
本文參考文章:http://blog.csdn.net/justheretobe/article/details/50939021