Files
live-hub-py/main.py
T
2026-06-21 21:56:56 +08:00

135 lines
3.5 KiB
Python

#!/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
if proxy.enabled:
proxy_url = {
'http': proxy.http or proxy.https,
'https': proxy.https or proxy.http,
}
loginer = DouyuLogin(account, proxy=proxy_url)
# 执行登录
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()