#!/usr/bin/env python3 """ 斗鱼自动登录工具 - Python版 功能: 1. 自动登录斗鱼账号 2. 自动过极验滑块验证 3. 自动获取邮箱验证码 4. 批量获取Cookie """ import sys import argparse from pathlib import Path from loguru import logger from douyu import DouyuLogin, Config from utils import setup_logger, save_cookie, load_accounts def login_single(config: Config, account_index: int = 0) -> str: """ 单账号登录 Args: config: 配置对象 account_index: 账号索引 Returns: Cookie字符串 """ accounts = config.get_accounts() if account_index >= len(accounts): logger.error(f"账号索引 {account_index} 超出范围,共有 {len(accounts)} 个账号") return "" account = accounts[account_index] logger.info(f"登录账号: {account.username}") # 创建登录器 proxy = config.get_proxy() proxy_url = None proxy_api_url = None if proxy.enabled: if proxy.api_url: # 使用代理API proxy_api_url = proxy.api_url elif proxy.http or proxy.https: # 使用静态代理 proxy_url = { 'http': proxy.http or proxy.https, 'https': proxy.https or proxy.http, } # 获取极验配置 geetest_config = config.get_geetest_config() max_retries = geetest_config.get('max_retries', 5) loginer = DouyuLogin( account, proxy=proxy_url, proxy_api_url=proxy_api_url, max_geetest_retries=max_retries, ) # 执行登录 result = loginer.login() if result.success: # 保存Cookie cookie_dir = config.get_cookie_dir() save_cookie(account.username, result.cookie, cookie_dir) return result.cookie else: logger.error(f"登录失败: {result.message}") return "" def login_batch(config: Config) -> dict: """ 批量登录 Returns: {username: cookie} 字典 """ accounts = config.get_accounts() results = {} logger.info(f"开始批量登录,共 {len(accounts)} 个账号") for i, account in enumerate(accounts): logger.info(f"[{i+1}/{len(accounts)}] 登录账号: {account.username}") try: cookie = login_single(config, i) if cookie: results[account.username] = cookie logger.success(f"账号 {account.username} 登录成功") else: logger.error(f"账号 {account.username} 登录失败") except Exception as e: logger.error(f"账号 {account.username} 登录异常: {e}") # 统计结果 success_count = len(results) total_count = len(accounts) logger.info(f"批量登录完成: 成功 {success_count}/{total_count}") return results def main(): """主函数""" parser = argparse.ArgumentParser(description='斗鱼自动登录工具') parser.add_argument('-c', '--config', default='config.yaml', help='配置文件路径') parser.add_argument('-i', '--index', type=int, default=0, help='单账号登录时的账号索引') parser.add_argument('-b', '--batch', action='store_true', help='批量登录模式') parser.add_argument('-v', '--verbose', action='store_true', help='详细日志') args = parser.parse_args() # 配置日志 log_level = "DEBUG" if args.verbose else "INFO" setup_logger(level=log_level) # 加载配置 try: config = Config(args.config) except FileNotFoundError as e: logger.error(str(e)) sys.exit(1) # 执行登录 if args.batch: results = login_batch(config) print(f"\n登录结果: 成功 {len(results)} 个账号") else: cookie = login_single(config, args.index) if cookie: print(f"\n登录成功!") print(f"Cookie: {cookie[:50]}...") else: print("\n登录失败") sys.exit(1) if __name__ == '__main__': main()