別人都在認真聽課,我埋頭寫Python為主播瘋狂點點點點點贊!

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

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

image

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

(我這一言難盡的文學素養……)

image

話不多說,馬上開始!

釘釘點贊程式

這個簡單的程式只需要用到一個庫: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 版點贊器的效果:

image

(由於點贊很快,大拇指有時候會蹦不出來了,不過我們可以看到點贊量還是在蹭蹭上漲的)

點贊器 2.0版

愉快地瘋狂點贊後,很快我就發現一個嚴重的問題:點贊 難以暫停!就像下面這樣:
image

當我想要停止刷贊,去做做別的事情的時候,我發現滑鼠根本挪不開!一移開又被強制移回來,這樣體驗很不好。

特別是當我嘗試刷上萬個讚的時候,我等得花都謝了,人都要瘋掉了但是它還沒點完!這讓我意識到:我必須提供一個方法讓使用者中斷點贊!

於是我對程式碼進行了改進,增加了一個判斷:如果滑鼠座標不等於按鈕座標的話,就判定為滑鼠移開,自動跳出 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) # 列印迴圈次數

然後這是最新效果:

image

可以看到,在滑鼠挪開之後,點贊就立刻停止了。不戳不戳。

點贊器 3.0版 ——大幅增速

我寫這玩意的初衷是:方便地給大佬點贊 和 提高點贊速度。既然現在點贊很方便了,那麼我就琢磨著把速度再提升一下。我將間隔時間 PAUSE 改為了 0.001,看看效果怎麼樣:

pg.PAUSE = 0.001 # 設定操作間隔時間

image

不錯,不錯,很快(快到已經卡住了),看看所用時間:

image

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()

看一看開兩個執行緒的效果:

image

我們可以看到這已經非常快(卡到不行)了,用了多少時間?

image

好傢伙只需要 6 秒,時間直接減半!很棒很棒針不戳!

不過我覺得我還是更願意用回 2.0 版,因為更順暢一些,否則,連直播介面都是卡頓的 [流淚][流淚] 沒辦法,電腦配置太低

所以我建議大家,儘量別開多執行緒來點贊。尤其不要嘗試開 10000 個執行緒點 10000 個贊!那時候不知道你電腦還在不在……


——the End——

謝謝你的閱讀!關注作者,跟作者一起學Python!

2022/2/7

相關文章