PyAutoGUI,輕鬆搞定圖片上傳!
最近用vuepress建了個博客,音樂的背景圖片需要網絡地址。 還有博客自動複用的摘要圖片也需地址
開始用的阿里雲的免費對象存儲oss,但又是登錄又是設置讀寫權限的,稀碎的操作令人疲憊。 能不能簡單點,自動上傳,並且馬上能得到文件的網絡地址。
於是開始探索輕量級的方案,手動給自己搞一個,一鍵複製開箱即用的的上傳頁面: 把文件傳到自己的雲服務器上,傳完後自帶文件地址和copy按鈕,流程頓時清爽了許多。
接下來的問題是,圖片準備好了,十幾張,怎麼傳更輕鬆點?這時背景音樂響起“王牌飛行員pyautogui請求出戰”。優秀,機械重複的操作(如刷新網頁、搶票、某些小遊戲等)無疑是你的拿手好戲。
實時獲取鼠標的當前座標
這點很重要,因為所有的點擊操作都基於座標,就像selenium的操作基於xpath路徑一樣:
import time, os import pyautogui as pag try: while True: #print('Press Ctrl-C to end') x, y = pag.position() #返回鼠標的座標 print('Position : (%s, %s)' % (x, y)) # 打印座標 time.sleep(1) #每個1s中打印一次 , 並執行清屏 os.system('cls') #執行系統清屏指令 except KeyboardInterrupt: print('end')
輸出如下,鼠標放在哪就會顯示哪個地方的x,y座標:
Position : (937, 668) Position : (1320, 689) Position : (836, 579) Position : (669, 585)
開始上傳了
上傳的操作頁面我已建好:
http://ssw.fit/upload
獲取到鼠標座標就好辦了,一路點擊,瘋狂輸出。selenium還有驗證碼、反爬蟲等限制,這個你自己的電腦,還不是想點哪就點哪。 先點擊“選擇文件”按鈕,
import pyautogui pyautogui.click(307, 227) time.sleep(2.5) # 彈出對話框後,點擊路徑那一欄,目的是為下一步粘貼路徑 pyautogui.click(993, 332) time.sleep(1.5)
typerwrite鍵入文件路徑
每台電腦的文件路徑不一樣,讓pyautogui的typerwrite輸入圖片文件夾的路徑,不加時間參數,輸入速度飛快
# 鍵入圖片路徑 pyautogui.typewrite('C:/Users/0717/Pictures/blog/upload') # 按回車鍵 pyautogui.hotkey('enter') time.sleep(1)
雙擊選中圖片
圖片的位置是固定的,所以可以取前5或前10張圖片的座標。下次再上傳多張圖的話,先清空文件夾,把圖片拷貝到文件夾就好了
pyautogui.doubleClick(x,y)
點擊“上傳”按鈕
上傳需要時間,sleep一會
pyautogui.click(304, 278) #上傳需要時間,預算等多久 if x == 847: #847是第一張圖片的x座標,因為我上傳的第一張是gif動圖,文件大,上傳多等幾秒 time.sleep(11) else: time.sleep(2.5)
點擊”copy”按鈕
圖片上傳完後會自動生成copy按鈕,點擊它直接複製文件的網絡地址
pyautogui.click(304, 278)
熱鍵ctrl+v,回車,網頁訪問圖片
pyautogui.hotkey('ctrl','v') time.sleep(0.5) pyautogui.hotkey('enter')
每張照片傳完再自動粘貼地址和網頁瀏覽,看看剛上傳的圖片多漂亮: 所以,腳本結束前,讓我們欣賞美圖3秒:
time.sleep(3)
點擊瀏覽器的返回按鈕
最後一步,欣賞完,返回主頁面進入下一張圖片的上傳流程!
pyautogui.click(32, 67) time.sleep(2)
完整腳本
總結一下,這裏用到的pyautogui操作:
- 單擊
click
- 雙擊
doubleClick
- 輸入文字
typewrite
- 熱鍵組合
hotkey('ctrl','v')
,熱鍵回車hotkey('enter')
import time import pyautogui def auto_upload(x,y,file_path): # 點擊”選擇文件“按鈕 pyautogui.click(307, 227) time.sleep(2.5) # 彈出對話框後,點擊路徑那一欄,目的是為下一步粘貼路徑 pyautogui.click(993, 332) time.sleep(1.5) # 鍵入圖片路徑 pyautogui.typewrite(file_path) # 按回車鍵 pyautogui.hotkey('enter') time.sleep(1) # 雙擊圖片 pyautogui.doubleClick(x,y) # 等文件出現 time.sleep(6) # 點擊“上傳”按鈕 pyautogui.click(304, 278) #等幾秒傳完 if x == 847: #847是第一張圖片的x座標,因為我上傳的第一張是gif動圖,文件大,上傳多等幾秒 time.sleep(11) else: time.sleep(2.5) # 點擊“copy”按鈕 pyautogui.click(297, 545) time.sleep(1) # 點擊瀏覽器的地址欄 pyautogui.click(410, 66) # 模擬鍵盤點擊ctrl+v,然後按回車鍵 pyautogui.hotkey('ctrl','v') time.sleep(0.5) pyautogui.hotkey('enter') #欣賞美女3秒 time.sleep(3) # 點擊瀏覽器的返回按鈕 pyautogui.click(32, 67) time.sleep(2) #文件的x,y座標 file_list = [(847, 489),(965, 490),(1136, 493),(1271, 504),(1391, 498)] [ auto_upload(f[0],f[1],'C:/Users/0717/Pictures/blog/upload') for f in file_list]
運行過程
上傳2張圖片,整個腳本運行起來是這樣的:
最後一個問題
上傳了好幾張,都到哪去了?這裏可以看到啦: http://ssw.fit/free/
好了,這就是今天分享的全部內容,我們下次再見~