最近有次在釘釘看直播,發現這個直播非常之精彩,於是情不自禁地想要為主播大佬連刷一波贊:
但我發現,手動連擊點贊速度十分不可觀。氣人的是,釘釘直播不能長按刷贊!這讓我很惱怒。心中滿懷的激動和興奮以及對大佬的崇高的敬意無法盡情表達,於是我一拍桌子,好,寫個指令碼來 刷贊 表示敬意!古有懷怒未發,休祲降於天
,今有難以點贊,拍桌寫程式碼
!
(我這一言難盡的文學素養……)
話不多說,馬上開始!
釘釘點贊程式
這個簡單的程式只需要用到一個庫:pyautogui
。
進入 cmd 命令列,安裝庫:
pip install pyautogui
然後在程式碼裡匯入庫:
import pyautogui as pg
接下來做一個設定,設定操作間隔時間:
pg.PAUSE = 0.01 # 設定操作間隔時間
這樣,程式每點選一次點贊按鈕,都會有 0.01 秒的間隔時間,防止因點選過快造成卡頓等問題。
點贊器 1.0版
首先我們要獲取點贊按鈕的座標,我們可以通過 position 方法獲取,我獲取到的座標是 (1568, 771):
print(pg.position()) # 列印滑鼠當前座標,返回一個 Point 物件:Point(1568, 771)
小 tip: 這個要怎麼搞呢?很多編輯器都有 編譯程式碼 快捷鍵(比如 IDLE 預設為F5
,Sublime Text 裡預設為Ctrl
+B
),那麼我們可以將游標移到目標位置,按下 F5,即可以執行這句程式碼,它會輸出游標此時的座標。或者我們也可以進入 IDLE 裡的互動模式,輸入這句程式碼後,將滑鼠移到目標,然後按下回車即可執行。
接下來要控制游標點選按鈕。pyautogui 庫實現點選操作的方法是 click:
pg.click(x, y)
- 傳入兩個引數:點選位置的橫座標和縱座標。橫座標、縱座標我們已經知道了(這裡是 1568, 771)。
接下來放上程式程式碼:
import pyautogui as pg
pg.PAUSE = 0.01 # 每個操作之間間隔0.01秒
#print(pg.position())
for i in range(500): # 迴圈點贊500次
pg.click(1568, 771) # 點選
print(i) # 列印迴圈次數
看看 1.0 版點贊器的效果:
(由於點贊很快,大拇指有時候會蹦不出來了,不過我們可以看到點贊量還是在蹭蹭上漲的)
點贊器 2.0版
愉快地瘋狂點贊後,很快我就發現一個嚴重的問題:點贊 難以暫停!就像下面這樣:
當我想要停止刷贊,去做做別的事情的時候,我發現滑鼠根本挪不開!一移開又被強制移回來,這樣體驗很不好。
特別是當我嘗試刷上萬個讚的時候,我等得花都謝了,人都要瘋掉了但是它還沒點完!這讓我意識到:我必須提供一個方法讓使用者中斷點贊!
於是我對程式碼進行了改進,增加了一個判斷:如果滑鼠座標不等於按鈕座標的話,就判定為滑鼠移開,自動跳出 for 迴圈,停止點贊。當然,在第一次迴圈,也就是第一次點選前,滑鼠還沒移過去呢,因此我們還得排除掉這種情況。看看最新程式碼:
import pyautogui as pg
#print(pg.position())
pg.PAUSE = 0.01 # 每個操作之間間隔0.01秒
for i in range(500):
if i and pg.position() != (1568, 771): # 判斷滑鼠是否離開
print('break')
break # 跳出迴圈,停止點贊
pg.click(1568, 771) # 點選
print(i) # 列印迴圈次數
然後這是最新效果:
可以看到,在滑鼠挪開之後,點贊就立刻停止了。不戳不戳。
點贊器 3.0版 ——大幅增速
我寫這玩意的初衷是:方便地給大佬點贊 和 提高點贊速度。既然現在點贊很方便了,那麼我就琢磨著把速度再提升一下。我將間隔時間 PAUSE 改為了 0.001,看看效果怎麼樣:
pg.PAUSE = 0.001 # 設定操作間隔時間
不錯,不錯,很快(快到已經卡住了),看看所用時間:
500個贊用了13秒。
我再試試多執行緒?
下面這個程式碼我匯入了threading
庫,開了兩個執行緒,試試效果怎樣:
import pyautogui as pg
from threading import Thread # 多執行緒庫
#print(pg.position())
pg.PAUSE = 0.01 # 每個操作之間間隔0.01秒
# 點贊函式
def run(n):
for i in range(250): # 由於兩個執行緒,因此把每個執行緒點贊數減一半
if i > 1 and pg.position() != (1568, 771):
print('break')
break
pg.click(1568, 771)
print(i)
# 兩個執行緒
t1 = Thread(target=run, args=('t1',))
t2 = Thread(target=run, args=('t2',))
# 執行緒開始
t1.start()
t2.start()
看一看開兩個執行緒的效果:
我們可以看到這已經非常快(卡到不行)了,用了多少時間?
好傢伙只需要 6 秒,時間直接減半!很棒很棒針不戳!
不過我覺得我還是更願意用回 2.0 版,因為更順暢一些,否則,連直播介面都是卡頓的 [流淚][流淚] 沒辦法,電腦配置太低 。
所以我建議大家,儘量別開多執行緒來點贊。尤其不要嘗試開 10000 個執行緒點 10000 個贊!那時候不知道你電腦還在不在……
——the End——
謝謝你的閱讀!關注作者,跟作者一起學Python!
2022/2/7