女朋友讓我深夜十二點催她睡覺,我有Python我就不幹

你豪哥哥發表於2022-02-12

事情是這樣的:今天晚上,女朋友讓我十二點催她睡覺。
請新增圖片描述
不過,可是我實在太困了,熬不下去…… 是吧?女朋友哪有睡覺重要?
請新增圖片描述
但,女朋友的命令,我是不敢違抗的……
請新增圖片描述
但是睡覺也不能缺!

這時候我們該怎麼辦呢?是時候讓Python登場了!

Python登場

這次我們來做一個自動傳送微信的程式,在深夜十二點的時候給女朋友發去訊息,也算是盡了一個男朋友的義務了。

安裝和匯入

我們需要兩個模組:apschedulerpyautogui

快捷鍵 Windows+r 開啟執行控制框,輸入 cmd,進入命令列,輸入:

pip install apscheduler
pip install pyautogui

匯入:

import pyautogui
from datetime import datetime
from apscheduler.schedulers.blocking import BlockingScheduler # 阻塞當前程式的排程器
# blocking型別排程器會阻塞當前程式,若你想要後臺執行的排程器,可以使用以下程式碼:
# from apscheduler.schedulers.background import BackgroundScheduler

pyautogui

首先我們來實現自動傳送訊息

pyautogui 是一個非常強大的庫,可以操作滑鼠和鍵盤。我們將用它來完成自動操作電腦。

先來做一些基本設定:

pyautogui.PAUSE = 1 # 設定每一步操作的間隔(秒),可防止操作太快

然後我們登入微信,最小化。

接下來我們把滑鼠放到微信的工作列圖示上,執行以下語句,獲取此時游標的座標,返回一個Point物件:

print(pyautogui.position()) # 列印座標,Point(x=148, y=879)
icon_position = pyautogui.position() # Point(x=148, y=879)

開啟微信,選擇女朋友的回話視窗,將滑鼠放在輸入框上,同樣獲取游標座標,為了將焦點鎖定到輸入框以方便待會的輸入。
請新增圖片描述

print(pyautogui.position()) # 列印座標,Point(x=174, y=751)
entry_position = pyautogui.position() # Point(x=174, y=751)

接下來,控制程式依次點選這兩個點:

pyautogui.click(icon_position) # 預設左鍵單擊
# pyautogui.click(148, 879)
pyautogui.click(entry_position)
# pyautogui.click(174, 751)

開啟微信並鎖定焦點後,我們開始輸入文字。

輸入文字可以有兩種方式:

  • pyautogui.typewrite(['o', 'n', 'e', 'enter'])

    在方法中傳入一個列表,裡面每一元素都是單個字母或特殊按鍵

  • pyautogui.typewrite('You can type multiple letters in this way')

    傳入字串,但不能同時列印字母和特殊按鍵。

這兩種方式都不能直接輸入中文,所以只能依靠你的輸入法來輸入中文了。

pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第一個引數是輸入文字,第二個是輸入每個字元的間隔時間

為了使我們的操作更加 人模狗樣 像人的操作,我麼來加上移動滑鼠的程式碼:

pyautogui.moveTo(icon_position, duration=2) # duration為執行時長,可選
pyautogui.click(icon_position)
pyautogui.moveTo(entry_position, duration=2)
pyautogui.click(entry_position)
pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第二個引數為按下每一個字母的間隔,可選

看看效果:
請新增圖片描述
當然,若是你要輸入的內容實在很多,又嫌麻煩,可以通過複製貼上來實現:

import pyperclip

pyperclip.copy('正在進行發中文試驗,看到請忽略,更不要罵傻逼') # 複製
pyautogui.hotkey('ctrl', 'v') # 按下組合鍵的方法,ctrl+v貼上
pyautogui.press('enter') # 按下按鍵

請新增圖片描述
這樣,我們便完成了自動傳送微信訊息的功能了。

apscheduler

APScheduler 是一個Python庫,可實現延遲排程要執行Python程式碼的功能,可以只執行一次,也可以定期執行。可以隨時新增新任務或刪除舊任務。能夠十分方便地進行定時任務。

scheduler = BlockingScheduler() # 例項化一個排程器
scheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 新增任務
scheduler.start()

add_job 方法在這裡傳了 3 個引數,第一個為到時間後要執行的函式,第二個為觸發器的型別。這裡選用的是 date 觸發器,特定的時間點觸發,作業任務只會執行一次。第三個引數 run_date 就是執行的時間。在這前我已經把自動傳送訊息的程式碼封裝為了 main 函式,只需到時後呼叫即可。

完整程式碼

import pyautogui
import pyperclip
from datetime import datetime
from apscheduler.schedulers.blocking import BlockingScheduler

def main():
	pyautogui.PAUSE = 0

	icon_position = pyautogui.Point(x=148, y=879) # 工作列圖示位置
	entry_position = pyautogui.Point(x=174, y=751) # 輸入框位置

	pyautogui.moveTo(icon_position, duration=1) # duration為執行時長,可選
	pyautogui.click(icon_position)
	pyautogui.moveTo(entry_position, duration=0.7)
	pyautogui.click(entry_position)
	pyperclip.copy('快去睡覺')
	pyautogui.hotkey('ctrl', 'v')
	pyautogui.press('enter')
    pyperclip.copy('笨豬')
	pyautogui.hotkey('ctrl', 'v')
	pyautogui.press('enter')
    
scheduler = BlockingScheduler() # 例項化
scheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 新增任務
scheduler.start()

完成啦!現在可以去睡覺了。

結果

第二天早上起床,我被我媽媽罵了一頓,問我為什麼午夜12點的時候電腦還亮著,而且還在自己發微信!

不過,好在女朋友沒丟,我成功完成了女朋友的任務!
請新增圖片描述


-- the End --

好啦,這篇文章就到這裡了。以上就是我分享的全部內容,感謝閱讀!

打個小廣告:作者CSDN部落格主頁:
https://blog.csdn.net/weixin_52132159

相關文章