最近有次在釘釘看直播,發現這個直播非常之精彩,于是情不自禁地想要為主播大佬連刷一波贊:

但我發現,手動連擊點贊速度十分不可觀,氣人的是,釘釘直播不能長按刷贊!這讓我很惱怒,心中滿懷的激動和興奮以及對大佬的崇高的敬意無法盡情表達,于是我一拍桌子,好,寫個腳本來 刷贊 表示敬意!古有懷怒未發,休祲降于天,今有難以點贊,拍桌寫代碼!
~(我這一言難盡的文學素養……)~

話不多說,馬上開始!
釘釘點贊程式
這個簡單的程式只需要用到一個庫: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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/423452.html
標籤:其他
