inti
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user