下载地址:https://www.pan38.com/share.php?code=JCnzE 提取密码:7789

使用Selenium自动化QQ加群流程的基本原理,包含登录、搜索群号和加入群聊等功能模块。实际使用时需要注意:1.QQ网页端可能有反自动化机制 2.频繁操作可能导致账号异常 3.需要处理各种验证情况。建议仅用于学习自动化测试技术。

代码语言:txt复制

import time

import random

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.common.keys import Keys

from selenium.webdriver.chrome.options import Options

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

class QQAutoJoiner:

def __init__(self):

self.chrome_options = Options()

self.chrome_options.add_argument("--disable-notifications")

self.chrome_options.add_argument("--disable-infobars")

self.driver = webdriver.Chrome(options=self.chrome_options)

self.wait = WebDriverWait(self.driver, 20)

def login(self, qq_number, password):

self.driver.get("https://qun.qq.com/")

login_frame = self.wait.until(

EC.presence_of_element_located((By.ID, "login_frame"))

)

self.driver.switch_to.frame(login_frame)

# 切换到账号密码登录

self.wait.until(

EC.element_to_be_clickable((By.ID, "switcher_plogin"))

).click()

# 输入账号密码

self.wait.until(

EC.presence_of_element_located((By.ID, "u"))

).send_keys(qq_number)

self.wait.until(

EC.presence_of_element_located((By.ID, "p"))

).send_keys(password)

# 点击登录

self.wait.until(

EC.element_to_be_clickable((By.ID, "login_button"))

).click()

# 等待登录完成

time.sleep(5)

def join_group(self, group_number):

try:

# 切换到主框架

self.driver.switch_to.default_content()

# 点击加群按钮

join_btn = self.wait.until(

EC.element_to_be_clickable((By.CSS_SELECTOR, ".header-join-group"))

)

join_btn.click()

# 输入群号

group_input = self.wait.until(

EC.presence_of_element_located((By.CSS_SELECTOR, "input.group-number-input"))

)

group_input.clear()

group_input.send_keys(group_number)

time.sleep(1)

# 点击搜索

search_btn = self.wait.until(

EC.element_to_be_clickable((By.CSS_SELECTOR, ".search-group-btn"))

)

search_btn.click()

time.sleep(2)

# 点击加入群聊

join_btn = self.wait.until(

EC.element_to_be_clickable((By.CSS_SELECTOR, ".join-group-btn"))

)

join_btn.click()

time.sleep(2)

# 处理验证问题(如果有)

try:

verify_input = self.driver.find_element(By.CSS_SELECTOR, ".verify-input")

if verify_input:

answer = input("请输入验证问题的答案: ")

verify_input.send_keys(answer)

confirm_btn = self.driver.find_element(By.CSS_SELECTOR, ".verify-confirm")

confirm_btn.click()

time.sleep(2)

except:

pass

return True

except Exception as e:

print(f"加群失败: {str(e)}")

return False

def batch_join(self, group_list, delay=10):

success_count = 0

for group in group_list:

print(f"正在尝试加入群 {group}...")

if self.join_group(group):

success_count += 1

print(f"成功加入群 {group}")

else:

print(f"加入群 {group} 失败")

# 随机延迟

sleep_time = delay + random.randint(-3, 3)

print(f"等待 {sleep_time} 秒后继续...")

time.sleep(sleep_time)

print(f"操作完成,成功加入 {success_count}/{len(group_list)} 个群")

def close(self):

self.driver.quit()

if __name__ == "__main__":

# 使用示例

bot = QQAutoJoiner()

try:

bot.login("你的QQ号", "你的QQ密码")

# 要加入的群列表

groups_to_join = [

"12345678",

"87654321",

"11223344"

]

bot.batch_join(groups_to_join)

finally:

bot.close()