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


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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM