(pythonQQ群管理)通过selenium 自动批量删除QQ群成员
看完本文你將可以
- 通過selenium 自動批量刪除QQ群成員
- 借鑒代碼獲取所有群成員的QQ號、昵稱、備注等信息
一年一度錄取季,新生群又雙叒叕要滿了,眼看群里兩千多人的坑位已經不多了,這時候作為一個資深的 管理員/群主自然要開始重新建一個群清理那些潛水摸魚的群友啦!
一般的群管理就是在pc端qq進入成員管理頁面,然后一個個的點擊刪除。
想快一點的就要進入網頁端高級管理中進行條件篩選然后刪除。
上面這兩種方法對正常情況已經夠用了
但是總感覺不是很適合,比如說不能篩選出來進群就從沒有說話的(通常這樣的要等到好幾個月才能在網頁端管理頁面篩選出來)、也要自己一個個的點,非常費手不方便。于是就想到了通過網頁操控網頁端的管理頁面來達到自動化篩選并選中的目的。
原材料:
驅動不會找的寶看下面:
? Chrome瀏覽器驅動:chromedriver
? Firefox瀏覽器驅動:geckodriver
? Edge瀏覽器驅動:MicrosoftWebDriver
? IE瀏覽器驅動:IEDriverServer
? Opera瀏覽器驅動:operadriver
? PhantomJS瀏覽器驅動:phantomjs
注意要下載和你瀏覽器相同版本號的驅動,不然會報錯!
如我的微軟的Edge瀏覽器
然后訪問上面的鏈接下載對應版本就行啦
下載和你瀏覽器相符的驅動就行了(如win 64位下x64的,應該沒有32位的電腦了吧),將驅動隨便放什么位置都可以,你自己找得到路徑就行。。。。一般放在源碼目錄
開搞
首先通過qq的pc客戶端進入網頁端高級群管理頁面,然后復制鏈接備用
鏈接像這種https://qun.qq.com/member.html#gid=<群號> 或者直接把你們的群號放上面也可以,不過用電腦登錄qq后續比較好授權然后復制下面代碼:
#!usr/bin/python3 # -*- coding: utf-8 -*- # @Time : 2021/7/22 0:35 # @Author : Fandes # @FileName: 清理群成員.py # @Software: PyCharm import threading import time from pynput import keyboard from selenium import webdrivertips = "手動登錄后,(設置其他篩選條件)按alt+s可以自動下滑加載全部成員頁面(也可以自己劃下去)," \"加載完頁面后,按alt+z篩選(沒有加載的頁面將不會處理),會先篩選出所有符合條件的人," \"然后以20/批量選中并彈出刪除按鈕(qq只允許同一批量刪除最多20人)" \"手動確認后按F4鍵繼續選中下一批...一一確認即可" \"然后手動確認刪除" print(tips) browser = webdriver.Edge(executable_path="msedgedriver.exe") # 需要下載瀏覽器驅動!現在是微軟Edge瀏覽器的驅動!!!,executable_path里面是你上面下載的驅動程序的路徑 browser.get('上面復制的你的群管理鏈接') num = 0 n = 8 # 32個線程,根據電腦性能來.. obj = []class Checkthread(threading.Thread):""" 線程類,人數太多時不開多線程選中會很慢,可以到改上面線程數n為1對比一下就知道了"""def __init__(self, cids):super().__init__()self.cids = cidsdef run(self):global objglobal numfor e in self.cids:tds = e.find_elements_by_tag_name("td")if tds[-2].text == tds[-4].text: # 入群時間和最后發言時間相同name = e.find_element_by_class_name("group-card").textprint("入群時間{}和最后發言時間{}相同,{}/{}".format(tds[-2].text, tds[-4].text, name, tds[-7].text))# if "21" in name or "20" in name or "19" in name or "18" in name or "17" in name or "16" in name or "15" in name:#篩選名片年級# continueobj.append(e)num += 1returndef checked(obj): # 勾選,使用js來勾選比直接使用selenium的元素定位要快得多(而且可以并行處理)browser.execute_script("arguments[0].setAttribute(arguments[1],arguments[2])",obj.find_element_by_class_name("check-input"), "checked", 1)def listen(): # 快捷鍵設置print("listen")def on_search(): # 開始查找所有符合條件的人并創建線程池處理print('<alt>+z pressed')global numnum = 0els = browser.find_elements_by_class_name("mb")l = len(els)threads = []for i in range(n): # 平均分配檢測量thread = Checkthread(els[(i * l) // n:((i + 1) * l) // n])thread.start()print("{}->{}線程啟動".format((i * l) // n, ((i + 1) * l) // n))threads.append(thread)for thread in threads:thread.join() # 線程等待print("共有{}人符合條件,開始以20/批量選中".format(num))i = 0for e in obj:if i == 0:e.find_element_by_class_name("check-input").click()else:checked(e)i += 1print("{}.選中{}".format(i, e.find_element_by_class_name("group-card").text))def on_press(k):if k == keyboard.Key.f4:kbl.stop() # 按鍵監聽停止print("繼續")if i == 20 or e == obj[-1]:print("手動確認后按F4鍵繼續") # 手動確認刪除比較安全browser.find_element_by_class_name("del-member").click()kbl = keyboard.Listener(on_press=on_press)kbl.start()kbl.join()i = 0def on_end(): # 滾動到底部print("scroll to end")i = 1while True:check_height = browser.execute_script("return document.body.scrollHeight;")for r in range(5):time.sleep(0.1)browser.execute_script("window.scrollBy(0,1000)")print("滾動中...")time.sleep(0.3)check_height1 = browser.execute_script("return document.body.scrollHeight;")print(str(check_height) + '**************' + str(check_height1))if check_height == check_height1:breakhotkey = keyboard.GlobalHotKeys({'<alt>+z': on_search,'<alt>+s': on_end,})hotkey.start()hotkey.wait()hotkey.join()print("end")listen()注意填充你的群管理鏈接和瀏覽器驅動路徑就可以開始運行了!
運行之后電腦如果登錄了qq可以直接點擊頭像授權,或者用手機qq掃碼登錄
進入頁面后按下alt+s鍵自動往下滾(看上面源碼),或者自己手動往下滾動加載完。
然后按下alt+z根據條件篩選,源碼里的篩選條件是篩選入群時間和最后發言時間相同的人(即進群沒說話的人),也可以自己設其他條件,如篩選群名片是不是符合條件啊這些(源碼注釋里有一個篩選年級的例子)
等都篩選完之后就會自動分20/批彈出窗口讓你確認刪除,因為qq每次只能刪除20個人,所以一次只會選中二十人,點擊刪除后按下F4鍵會自動再選出要踢掉的20個人,然后彈窗確認刪除。。。直到刪完符合條件的人。。
結束!
本文對應GitHub項目鏈接
總結
以上是生活随笔為你收集整理的(pythonQQ群管理)通过selenium 自动批量删除QQ群成员的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java报错空指针异常_夯实基础:认识一
- 下一篇: python网络刷学时_python实践