增强:添加批量注册功能和支持文件
This commit is contained in:
196
batch_registration_example.py
Normal file
196
batch_registration_example.py
Normal file
@@ -0,0 +1,196 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import time
|
||||
import logging
|
||||
import random
|
||||
import string
|
||||
import json
|
||||
import concurrent.futures
|
||||
import argparse
|
||||
from email_api_client import EmailApiClient
|
||||
|
||||
# 配置日志
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
||||
)
|
||||
logger = logging.getLogger("BatchRegistration")
|
||||
|
||||
def generate_random_username(length=8):
|
||||
"""生成随机用户名"""
|
||||
letters = string.ascii_lowercase + string.digits
|
||||
return ''.join(random.choice(letters) for _ in range(length))
|
||||
|
||||
def register_account(client, domain, username=None):
|
||||
"""
|
||||
模拟注册账号流程
|
||||
|
||||
参数:
|
||||
client: EmailApiClient实例
|
||||
domain: 邮箱域名
|
||||
username: 指定用户名,不指定则随机生成
|
||||
|
||||
返回:
|
||||
注册结果字典
|
||||
"""
|
||||
# 生成或使用提供的用户名
|
||||
username = username or generate_random_username()
|
||||
email_address = f"{username}@{domain}"
|
||||
|
||||
logger.info(f"开始注册账号: {email_address}")
|
||||
|
||||
# 模拟注册操作
|
||||
logger.info(f"模拟向注册服务发送注册请求...")
|
||||
# 这里是模拟,实际中应该调用真实的注册API
|
||||
time.sleep(1) # 模拟API调用延迟
|
||||
|
||||
# 等待验证邮件
|
||||
logger.info(f"等待验证邮件...")
|
||||
start_time = time.time()
|
||||
email = client.wait_for_email(
|
||||
email_address,
|
||||
timeout=30, # 30秒超时
|
||||
subject="验证", # 查找主题包含"验证"的邮件
|
||||
keyword="验证码" # 内容包含"验证码"的邮件
|
||||
)
|
||||
|
||||
wait_time = time.time() - start_time
|
||||
|
||||
if email:
|
||||
# 提取验证码
|
||||
verification_code = client.extract_verification_code(email)
|
||||
|
||||
# 模拟验证过程
|
||||
if verification_code:
|
||||
logger.info(f"提取到验证码: {verification_code},正在验证...")
|
||||
# 模拟提交验证码
|
||||
time.sleep(0.5) # 模拟API调用延迟
|
||||
|
||||
return {
|
||||
'success': True,
|
||||
'email_address': email_address,
|
||||
'verification_code': verification_code,
|
||||
'wait_time': wait_time,
|
||||
'message': '注册成功'
|
||||
}
|
||||
else:
|
||||
logger.warning(f"未能提取验证码")
|
||||
return {
|
||||
'success': False,
|
||||
'email_address': email_address,
|
||||
'wait_time': wait_time,
|
||||
'message': '未能提取验证码'
|
||||
}
|
||||
else:
|
||||
logger.warning(f"未收到验证邮件")
|
||||
return {
|
||||
'success': False,
|
||||
'email_address': email_address,
|
||||
'wait_time': wait_time,
|
||||
'message': '未收到验证邮件'
|
||||
}
|
||||
|
||||
def batch_register(domain, count, concurrent=2):
|
||||
"""
|
||||
批量注册账号
|
||||
|
||||
参数:
|
||||
domain: 邮箱域名
|
||||
count: 注册数量
|
||||
concurrent: 并发数
|
||||
|
||||
返回:
|
||||
注册结果列表
|
||||
"""
|
||||
logger.info(f"开始批量注册 {count} 个账号,域名: {domain},并发数: {concurrent}")
|
||||
|
||||
# 创建API客户端
|
||||
client = EmailApiClient()
|
||||
|
||||
# 检查系统状态
|
||||
status = client.check_system_status()
|
||||
if not status.get('success', False):
|
||||
logger.error(f"邮件系统状态异常: {status}")
|
||||
return []
|
||||
|
||||
# 生成用户名列表
|
||||
usernames = [generate_random_username() for _ in range(count)]
|
||||
|
||||
results = []
|
||||
|
||||
# 使用线程池并发注册
|
||||
if concurrent > 1:
|
||||
with concurrent.futures.ThreadPoolExecutor(max_workers=concurrent) as executor:
|
||||
# 提交任务
|
||||
future_to_username = {
|
||||
executor.submit(register_account, client, domain, username): username
|
||||
for username in usernames
|
||||
}
|
||||
|
||||
# 获取结果
|
||||
for future in concurrent.futures.as_completed(future_to_username):
|
||||
username = future_to_username[future]
|
||||
try:
|
||||
result = future.result()
|
||||
results.append(result)
|
||||
logger.info(f"账号 {username}@{domain} 注册完成: {result['success']}")
|
||||
except Exception as e:
|
||||
logger.error(f"账号 {username}@{domain} 注册出错: {str(e)}")
|
||||
results.append({
|
||||
'success': False,
|
||||
'email_address': f"{username}@{domain}",
|
||||
'message': f'注册过程出错: {str(e)}'
|
||||
})
|
||||
else:
|
||||
# 串行注册
|
||||
for username in usernames:
|
||||
try:
|
||||
result = register_account(client, domain, username)
|
||||
results.append(result)
|
||||
logger.info(f"账号 {username}@{domain} 注册完成: {result['success']}")
|
||||
except Exception as e:
|
||||
logger.error(f"账号 {username}@{domain} 注册出错: {str(e)}")
|
||||
results.append({
|
||||
'success': False,
|
||||
'email_address': f"{username}@{domain}",
|
||||
'message': f'注册过程出错: {str(e)}'
|
||||
})
|
||||
|
||||
# 统计结果
|
||||
success_count = sum(1 for r in results if r.get('success', False))
|
||||
fail_count = len(results) - success_count
|
||||
|
||||
logger.info(f"批量注册完成: 成功 {success_count} 个, 失败 {fail_count} 个")
|
||||
|
||||
return results
|
||||
|
||||
def save_results(results, filename):
|
||||
"""将结果保存到文件"""
|
||||
with open(filename, 'w', encoding='utf-8') as f:
|
||||
json.dump(results, f, ensure_ascii=False, indent=2)
|
||||
logger.info(f"结果已保存到文件: {filename}")
|
||||
|
||||
def main():
|
||||
"""主函数"""
|
||||
parser = argparse.ArgumentParser(description='批量注册账号示例')
|
||||
parser.add_argument('--domain', type=str, default='nosqli.com', help='邮箱域名')
|
||||
parser.add_argument('--count', type=int, default=5, help='注册数量')
|
||||
parser.add_argument('--concurrent', type=int, default=2, help='并发数')
|
||||
parser.add_argument('--output', type=str, default='registration_results.json', help='结果输出文件')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# 执行批量注册
|
||||
results = batch_register(args.domain, args.count, args.concurrent)
|
||||
|
||||
# 保存结果
|
||||
if results:
|
||||
save_results(results, args.output)
|
||||
|
||||
# 退出代码
|
||||
success_count = sum(1 for r in results if r.get('success', False))
|
||||
return 0 if success_count == args.count else 1
|
||||
|
||||
if __name__ == "__main__":
|
||||
exit(main())
|
||||
Reference in New Issue
Block a user