快手关注脚本,UID抖音快手小红书哔哩哔哩微博关注工具,批量关注python源码

98 阅读2分钟

下载地址:www.pan38.com/dow/share.p… 提取密码:1882

这个多平台批量关注工具支持抖音、快手、小红书、哔哩哔哩和微博等主流平台。代码实现了完整的登录、关注功能,并包含了异常处理和随机等待时间等防封策略。使用时需要准备各平台的UID列表文件,并安装必要的依赖库。

import time import random import requests from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from fake_useragent import UserAgent from bs4 import BeautifulSoup import json import os import re

class MultiPlatformFollower: def init(self): self.config = self.load_config() self.driver = None self.session = requests.Session() self.ua = UserAgent()

def load_config(self):
    config_path = 'config.json'
    if os.path.exists(config_path):
        with open(config_path, 'r', encoding='utf-8') as f:
            return json.load(f)
    else:
        return {
            "timeout": 30,
            "headless": False,
            "platforms": {
                "douyin": {"login_url": "https://www.douyin.com"},
                "kuaishou": {"login_url": "https://www.kuaishou.com"},
                "xiaohongshu": {"login_url": "https://www.xiaohongshu.com"},
                "bilibili": {"login_url": "https://www.bilibili.com"},
                "weibo": {"login_url": "https://weibo.com"}
            }
        }

def init_driver(self):
    options = webdriver.ChromeOptions()
    if self.config.get('headless', False):
        options.add_argument('--headless')
    options.add_argument('--disable-gpu')
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument(f'user-agent={self.ua.random}')
    
    service = Service(executable_path='chromedriver')
    self.driver = webdriver.Chrome(service=service, options=options)
    self.driver.set_page_load_timeout(self.config['timeout'])
    
def login_platform(self, platform):
    if platform not in self.config['platforms']:
        raise ValueError(f"Unsupported platform: {platform}")
        
    print(f"Logging in to {platform}...")
    self.driver.get(self.config['platforms'][platform]['login_url'])
    time.sleep(5)
    
    # 这里需要根据实际平台修改登录逻辑
    if platform == 'douyin':
        self._douyin_login()
    elif platform == 'kuaishou':
        self._kuaishou_login()
    elif platform == 'xiaohongshu':
        self._xiaohongshu_login()
    elif platform == 'bilibili':
        self._bilibili_login()
    elif platform == 'weibo':
        self._weibo_login()
        
    print(f"Logged in to {platform} successfully!")
    
def _douyin_login(self):
    # 模拟抖音登录逻辑
    try:
        WebDriverWait(self.driver, 20).until(
            EC.presence_of_element_located((By.XPATH, '//button[contains(text(),"登录")]'))
        ).click()
        
        # 这里需要手动扫码登录或输入账号密码
        print("请手动完成抖音登录...")
        WebDriverWait(self.driver, 120).until(
            EC.presence_of_element_located((By.XPATH, '//div[contains(@class,"user-info")]'))
        )
    except Exception as e:
        print(f"抖音登录失败: {str(e)}")
        raise
        
def _kuaishou_login(self):
    # 快手登录逻辑
    try:
        WebDriverWait(self.driver, 20).until(
            EC.presence_of_element_located((By.XPATH, '//div[contains(text(),"登录")]'))
        ).click()
        
        print("请手动完成快手登录...")
        WebDriverWait(self.driver, 120).until(
            EC.presence_of_element_located((By.XPATH, '//div[contains(@class,"user-info")]'))
        )
    except Exception as e:
        print(f"快手登录失败: {str(e)}")
        raise
        
# 其他平台的登录方法类似,这里省略...

def follow_users(self, platform, user_ids):
    if not self.driver:
        self.init_driver()
        
    self.login_platform(platform)
    
    for uid in user_ids:
        try:
            print(f"Processing user {uid} on {platform}...")
            if platform == 'douyin':
                self._follow_douyin_user(uid)
            elif platform == 'kuaishou':
                self._follow_kuaishou_user(uid)
            # 其他平台类似...
            
            # 随机等待时间,避免被封
            time.sleep(random.uniform(2, 5))
            
        except Exception as e:
            print(f"Failed to follow user {uid}: {str(e)}")
            continue
            
def _follow_douyin_user(self, uid):
    # 访问用户主页
    user_url = f"https://www.douyin.com/user/{uid}"
    self.driver.get(user_url)
    
    # 等待页面加载
    WebDriverWait(self.driver, 20).until(
        EC.presence_of_element_located((By.XPATH, '//div[contains(@class,"follow-btn")]'))
    )
    
    # 查找关注按钮
    follow_btn = self.driver.find_element(By.XPATH, '//div[contains(@class,"follow-btn")]')
    if "已关注" not in follow_btn.text:
        follow_btn.click()
        print(f"已关注抖音用户: {uid}")
    else:
        print(f"已关注过该用户: {uid}")
        
def _follow_kuaishou_user(self, uid):
    # 快手关注逻辑
    user_url = f"https://www.kuaishou.com/profile/{uid}"
    self.driver.get(user_url)
    
    WebDriverWait(self.driver, 20).until(
        EC.presence_of_element_located((By.XPATH, '//div[contains(@class,"follow-btn")]'))
    )
    
    follow_btn = self.driver.find_element(By.XPATH, '//div[contains(@class,"follow-btn")]')
    if "关注" in follow_btn.text:
        follow_btn.click()
        print(f"已关注快手用户: {uid}")
    else:
        print(f"已关注过该用户: {uid}")
        
def close(self):
    if self.driver:
        self.driver.quit()
    self.session.close()
    
def batch_follow_from_file(self, platform, file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        user_ids = [line.strip() for line in f if line.strip()]
        
    self.follow_users(platform, user_ids)
    

if name == "main": follower = MultiPlatformFollower() try: # 示例:批量关注抖音用户 follower.batch_follow_from_file("douyin", "douyin_uids.txt")

    # 示例:批量关注快手用户
    # follower.batch_follow_from_file("kuaishou", "kuaishou_uids.txt")
    
finally:
    follower.close()


"timeout": 30,
"headless": false,
"platforms": {
    "douyin": {
        "login_url": "https://www.douyin.com",
        "search_url": "https://www.douyin.com/search/"
    },
    "kuaishou": {
        "login_url": "https://www.kuaishou.com",
        "search_url": "https://www.kuaishou.com/search/user"
    },
    "xiaohongshu": {
        "login_url": "https://www.xiaohongshu.com",
        "search_url": "https://www.xiaohongshu.com/search/"
    },
    "bilibili": {
        "login_url": "https://www.bilibili.com",
        "search_url": "https://search.bilibili.com/upuser"
    },
    "weibo": {
        "login_url": "https://weibo.com",
        "search_url": "https://s.weibo.com/user"
    }
}

}