PyAutoGUI,輕鬆搞定圖片上傳!

語言: CN / TW / HK

最近用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/

好了,這就是今天分享的全部內容,我們下次再見~