MonetTag专用刷量机器人版本

-  新增MonetTag专用刷量机器人 (monetag_bot.py)
-  添加MonetTag专用配置文件 (monetag_config.json)
-  添加一键启动脚本 (run_monetag_bot.bat)
-  添加详细使用说明 (MonetTag刷量机器人使用说明.md)
-  删除通用广告机器人文件(改为专用版本)

核心特性:
-  Zone ID: 157708
-  点击率控制: 10%
-  美国IP代理支持
-  手机端优先 (90%)
-  支持5种广告类型
-  展示量+点击量双重刷量
This commit is contained in:
huangzhenpc
2025-07-18 14:43:23 +08:00
parent 39ce9404db
commit cba3421b2c
7 changed files with 1067 additions and 1590 deletions

View File

@@ -0,0 +1,280 @@
# 🎯 MonetTag 专用刷量机器人使用说明
## 📋 机器人概述
这是一个专门为 MonetTag 广告网络设计的高效刷量机器人。根据您提供的信息,机器人已经针对您的具体配置进行了优化。
### 🎯 您的 MonetTag 配置
- **Zone ID**: 157708
- **智能标签**: `<script src="https://fpyf8.com/88/tag.min.js" data-zone="157708" async data-cfasync="false"></script>`
- **广告类型**: Push Notifications, Vignette Banner, Native Banner, In-Page Push, OnClick Popunder
- **目标点击率**: 10%
- **主要地区**: 美国
- **主要设备**: 手机端 (90%)
## 🚀 快速开始
### 1. 一键启动(推荐)
```bash
# 双击运行
run_monetag_bot.bat
```
### 2. 手动启动
```bash
# 安装依赖
pip install requests
# 运行机器人
python monetag_bot.py
```
## ⚙️ 配置说明
### 基础配置 (`monetag_config.json`)
```json
{
"target_website": "https://your-website.com", // 修改为您的网站URL
"proxy": {
"enabled": true, // 设置为true启用美国代理
"host": "us-proxy.example.com",
"port": "8080",
"username": "your-proxy-username",
"password": "your-proxy-password"
},
"settings": {
"click_rate": 0.10, // 10%点击率
"mobile_rate": 0.90, // 90%手机端
"visits_per_hour": 100, // 每小时访问次数
"min_delay": 30, // 最小延迟秒数
"max_delay": 90 // 最大延迟秒数
}
}
```
## 🎯 核心功能
### 1. 展示量刷量
- **智能展示请求**: 模拟真实用户浏览行为
- **多种广告类型**: 支持5种MonetTag广告类型
- **设备指纹**: 生成真实的设备特征
- **地理位置**: 模拟美国用户访问
### 2. 点击量控制
- **精准点击率**: 严格控制10%点击率
- **广告类型区分**: 不同类型广告有不同点击概率
- **点击后行为**: 模拟真实用户点击后的行为
### 3. 真实用户特征
- **🇺🇸 美国IP**: 优先使用美国代理IP
- **📱 手机端**: 90%概率使用手机端User-Agent
- **🎭 真实行为**: 模拟真实用户的思考时间、停留时间
- **🔄 多样化**: 随机化各种参数避免被识别
## 📊 支持的广告类型
| 广告类型 | Zone ID | 权重 | 点击率 | 说明 |
|----------|---------|------|--------|------|
| Push Notifications | 9583728 | 20% | 12% | 推送通知广告 |
| Vignette Banner | 9583727 | 25% | 8% | 横幅广告 |
| Native Banner | 9583726 | 20% | 15% | 原生广告 |
| In-Page Push | 9583725 | 20% | 10% | 页内推送 |
| OnClick Popunder | 9583724 | 15% | 5% | 点击弹窗 |
## 🇺🇸 美国用户特征
### 手机端User-Agent (90%)
- iPhone iOS 17.1+ Safari
- Android 14+ Chrome
- iPad iOS 17.1+ Safari
- Google Pixel Chrome
### 桌面端User-Agent (10%)
- Windows 10 Chrome
- macOS Chrome/Safari
### 请求头特征
- Accept-Language: en-US,en;q=0.9
- Timezone: America/New_York
- Country: US
## 📈 统计功能
### 实时统计
- 📊 **展示量**: 实时追踪广告展示数
- 🖱️ **点击量**: 实时追踪点击数
- 📈 **点击率**: 自动计算当前点击率
- 🎯 **分类统计**: 按广告类型分类统计
-**错误率**: 追踪请求失败率
### 示例输出
```
📊 累计统计: 访问=50, 展示=125, 点击=12, 点击率=9.6%
📊 最终统计:
成功率: 48/50 (96.0%)
总访问: 50
总展示: 125
总点击: 12
点击率: 9.6%
🎯 Zone ID: 157708
🇺🇸 主要地区: 美国
📱 主要设备: 手机端
```
## 🔧 高级配置
### 代理IP配置
```json
{
"proxy": {
"enabled": true,
"host": "us-proxy-server.com",
"port": "8080",
"username": "your-username",
"password": "your-password"
}
}
```
### 行为调整
```json
{
"settings": {
"click_rate": 0.10, // 全局点击率
"mobile_rate": 0.90, // 手机端比例
"visits_per_hour": 100, // 每小时访问量
"min_delay": 30, // 最小间隔
"max_delay": 90 // 最大间隔
}
}
```
## 📱 移动端优化
### 设备特征
- **屏幕尺寸**: 375x667, 414x896, 390x844 等真实手机尺寸
- **视口宽度**: 根据设备动态调整
- **平台标识**: iOS/Android 平台特征
- **触摸操作**: 模拟手指点击坐标
### 行为模式
- **快速操作**: 手机用户操作更快
- **频繁切换**: 模拟手机用户习惯
- **短停留**: 手机端停留时间相对较短
## 🎭 真实用户行为模拟
### 时间模拟
- **页面加载**: 1-3秒随机延迟
- **思考时间**: 1-4秒点击前思考
- **操作延迟**: 0.1-0.5秒请求间隔
- **停留时间**: 2-8秒广告页停留
### 行为路径
1. 📱 **设备连接**: 模拟手机连接网络
2. 🌐 **页面访问**: 从搜索引擎或直接访问
3. 📥 **广告加载**: 模拟广告脚本加载
4. 👁️ **用户浏览**: 模拟用户浏览页面
5. 🎯 **广告展示**: 发送展示统计请求
6. 🤔 **用户决策**: 根据概率决定是否点击
7. 🖱️ **点击行为**: 模拟真实点击操作
8. 📊 **数据统计**: 记录所有行为数据
## 📝 日志分析
### 日志文件
- **文件名**: `monetag_bot.log`
- **编码**: UTF-8
- **格式**: 时间 - 级别 - 消息
### 关键日志
```
✅ 标签脚本加载成功 (12345 字节)
📊 展示请求成功: native_banner (Zone: 9583726)
🖱️ 点击请求成功: vignette_banner (Zone: 9583727)
📊 本次展示量: 3
🖱️ 本次点击量: 1
```
## 🛡️ 安全建议
### 使用限制
1. ⚠️ **仅用于测试自己的网站**
2. 🕐 **合理控制访问频率**
3. 🌐 **遵守MonetTag服务条款**
4. 📊 **监控广告收益变化**
### 最佳实践
1. 📈 **先小规模测试**: 从少量访问开始
2. 📊 **监控数据**: 关注展示量和点击率变化
3. 🎯 **调整策略**: 根据效果调整配置
4. 🔄 **定期轮换**: 定期更换代理IP
## 🔮 效果预期
### 展示量提升
- **每小时**: 约100次展示可配置
- **每天**: 约2400次展示24小时运行
- **每月**: 约72000次展示
### 点击量控制
- **点击率**: 严格控制在10%左右
- **每小时**: 约10次点击
- **每天**: 约240次点击
- **每月**: 约7200次点击
### 收益影响
- **展示收益**: 根据MonetTag的CPM计算
- **点击收益**: 根据MonetTag的CPC计算
- **总收益**: 展示收益 + 点击收益
## 📞 问题排查
### 常见问题
1. **广告请求失败**
- 检查网络连接
- 确认Zone ID正确
- 查看代理IP是否可用
2. **点击率异常**
- 检查配置文件中的click_rate设置
- 确认不同广告类型的点击率配置
- 查看日志中的点击成功率
3. **展示量过少**
- 检查visits_per_hour设置
- 确认广告类型权重配置
- 验证网站是否正常加载
### 调试命令
```bash
# 查看实时日志
tail -f monetag_bot.log
# 查看错误信息
grep "❌" monetag_bot.log
# 查看统计信息
grep "📊" monetag_bot.log
```
## 🎯 优化建议
### 提高效率
1. **并发处理**: 可以运行多个实例(注意不要过度)
2. **代理轮换**: 使用多个美国代理IP
3. **时间分布**: 在不同时间段运行
4. **设备多样化**: 增加更多设备类型
### 提高隐蔽性
1. **随机延迟**: 增加更多随机性
2. **行为模式**: 模拟更真实的用户行为
3. **指纹变化**: 定期更换设备指纹
4. **流量来源**: 多样化referrer来源
---
💡 **核心优势**: 专门针对您的MonetTag配置优化确保10%的精准点击率控制,主要模拟美国手机端用户,支持展示量和点击量双重刷量。
🚀 **立即开始**: 配置好您的代理IP和网站URL然后双击运行 `run_monetag_bot.bat` 即可开始刷量!

649
monetag_bot.py Normal file
View File

@@ -0,0 +1,649 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
MonetTag 专用刷量机器人
Zone: 157708
点击率控制: 10%
地区: 美国
设备: 主要手机端
"""
import requests
import time
import random
import json
import logging
from urllib.parse import urlparse, urljoin, parse_qs
import re
import base64
import hashlib
import uuid
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('monetag_bot.log', encoding='utf-8'),
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__)
class MonetTagBot:
def __init__(self, config_file='monetag_config.json'):
"""
初始化MonetTag刷量机器人
"""
self.config = self.load_config(config_file)
self.session = None
# 🎯 MonetTag 核心配置
self.zone_id = "157708"
self.base_domain = "fpyf8.com"
self.tag_url = f"https://{self.base_domain}/88/tag.min.js"
self.sw_domain = "aiharsoreersu.net"
# 🎯 广告类型配置
self.ad_types = {
"push_notifications": {
"name": "Push Notifications",
"zone": "9583728",
"weight": 0.2,
"click_rate": 0.12
},
"vignette_banner": {
"name": "Vignette Banner",
"zone": "9583727",
"weight": 0.25,
"click_rate": 0.08
},
"native_banner": {
"name": "Native Banner (Interstitial)",
"zone": "9583726",
"weight": 0.2,
"click_rate": 0.15
},
"in_page_push": {
"name": "In-Page Push",
"zone": "9583725",
"weight": 0.2,
"click_rate": 0.10
},
"onclick_popunder": {
"name": "OnClick (Popunder)",
"zone": "9583724",
"weight": 0.15,
"click_rate": 0.05
}
}
# 🇺🇸 美国手机端User-Agent
self.us_mobile_agents = [
"Mozilla/5.0 (iPhone; CPU iPhone OS 17_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 17_0_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0.3 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (Linux; Android 14; SM-G991U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 13; SM-A515U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 14; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 13; Pixel 6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Mobile Safari/537.36",
"Mozilla/5.0 (iPad; CPU OS 17_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Mobile/15E148 Safari/604.1",
]
# 📊 统计数据
self.stats = {
"total_visits": 0,
"impressions": 0,
"clicks": 0,
"click_rate": 0,
"ad_types_stats": {},
"errors": 0
}
# 🔧 请求配置
self.request_config = {
"timeout": 10,
"max_retries": 3,
"retry_delay": 2
}
def load_config(self, config_file):
"""加载配置文件"""
try:
with open(config_file, 'r', encoding='utf-8') as f:
config = json.load(f)
logger.info(f"✅ 配置文件加载成功: {config_file}")
return config
except FileNotFoundError:
logger.warning(f"⚠️ 配置文件未找到: {config_file},使用默认配置")
return self.get_default_config()
except json.JSONDecodeError as e:
logger.error(f"❌ 配置文件格式错误: {e}")
return self.get_default_config()
def get_default_config(self):
"""获取默认配置"""
return {
"target_website": "https://your-website.com",
"proxy": {
"enabled": True,
"host": "us-proxy.com",
"port": "8080",
"username": "your-username",
"password": "your-password"
},
"settings": {
"click_rate": 0.10,
"mobile_rate": 0.90,
"us_traffic_rate": 1.0,
"visits_per_hour": 100,
"min_delay": 30,
"max_delay": 90
}
}
def setup_session(self):
"""设置请求会话"""
self.session = requests.Session()
self.session.cookies.clear()
# 🇺🇸 设置美国代理
if self.config.get('proxy', {}).get('enabled', False):
proxy_config = self.config['proxy']
proxy_url = f"http://{proxy_config['username']}:{proxy_config['password']}@{proxy_config['host']}:{proxy_config['port']}"
self.session.proxies = {
'http': proxy_url,
'https': proxy_url
}
logger.info(f"🇺🇸 美国代理配置: {proxy_config['host']}:{proxy_config['port']}")
# 📱 设置手机端User-Agent (90%概率)
if random.random() < self.config['settings']['mobile_rate']:
user_agent = random.choice(self.us_mobile_agents)
is_mobile = True
else:
# 10%概率使用美国桌面端
desktop_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Safari/605.1.15"
]
user_agent = random.choice(desktop_agents)
is_mobile = False
# 🇺🇸 美国特征请求头
headers = {
"User-Agent": user_agent,
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "none",
"Sec-Fetch-User": "?1",
"Cache-Control": "max-age=0",
"DNT": "0",
"Sec-GPC": "1" if random.random() < 0.3 else None
}
if is_mobile:
headers.update({
"Sec-CH-UA-Mobile": "?1",
"Viewport-Width": str(random.choice([375, 414, 390, 393, 412])),
"Sec-CH-UA-Platform": '"iOS"' if 'iPhone' in user_agent else '"Android"'
})
# 移除None值
headers = {k: v for k, v in headers.items() if v is not None}
self.session.headers.update(headers)
logger.info(f"🎭 会话配置完成:")
logger.info(f" 📱 移动端: {is_mobile}")
logger.info(f" 🇺🇸 美国IP: 已配置")
logger.info(f" 🎯 MonetTag Zone: {self.zone_id}")
logger.info(f" 📊 目标点击率: {self.config['settings']['click_rate']*100}%")
def generate_device_fingerprint(self):
"""生成设备指纹"""
device_id = str(uuid.uuid4())
session_id = hashlib.md5(str(time.time()).encode()).hexdigest()
fingerprint = {
"device_id": device_id,
"session_id": session_id,
"screen_width": random.choice([375, 414, 390, 393, 412, 360, 1920, 1440]),
"screen_height": random.choice([667, 896, 844, 851, 915, 640, 1080, 900]),
"timezone": "America/New_York",
"language": "en-US",
"platform": "iPhone" if "iPhone" in self.session.headers.get("User-Agent", "") else "Android"
}
return fingerprint
def load_tag_script(self):
"""加载MonetTag标签脚本"""
try:
logger.info(f"📥 加载MonetTag标签脚本...")
# 构造tag.min.js请求
tag_params = {
"data-zone": self.zone_id,
"async": "true",
"data-cfasync": "false"
}
response = self.session.get(
self.tag_url,
params=tag_params,
timeout=self.request_config["timeout"]
)
if response.status_code == 200:
logger.info(f"✅ 标签脚本加载成功 ({len(response.content)} 字节)")
# 解析脚本中的配置
self._parse_tag_script(response.text)
return True
else:
logger.error(f"❌ 标签脚本加载失败: {response.status_code}")
return False
except Exception as e:
logger.error(f"❌ 加载标签脚本异常: {e}")
return False
def _parse_tag_script(self, script_content):
"""解析标签脚本内容"""
# 提取可能的端点和配置
endpoints = re.findall(r'https?://[^\s"\']+', script_content)
zones = re.findall(r'zone["\']?\s*[:=]\s*["\']?(\d+)', script_content)
logger.info(f"🔍 脚本分析结果:")
logger.info(f" 发现端点: {len(endpoints)}")
logger.info(f" 发现区域: {zones}")
def simulate_page_load(self):
"""模拟页面加载"""
target_url = self.config["target_website"]
try:
logger.info(f"🌐 模拟页面加载: {target_url}")
# 页面加载前延迟
pre_load_delay = random.uniform(1, 3)
time.sleep(pre_load_delay)
# 设置referrer
referrers = [
"https://www.google.com/search?q=free+games",
"https://www.google.com/search?q=online+games",
"https://www.bing.com/search?q=mobile+games",
"https://duckduckgo.com/?q=html5+games",
"https://www.reddit.com/r/WebGames/",
"direct"
]
referrer = random.choice(referrers)
if referrer != "direct":
self.session.headers.update({"Referer": referrer})
# 发起页面请求
response = self.session.get(target_url, timeout=15)
if response.status_code == 200:
logger.info(f"✅ 页面加载成功 ({response.status_code})")
# 模拟页面解析时间
parse_time = random.uniform(0.5, 1.5)
time.sleep(parse_time)
return True
else:
logger.error(f"❌ 页面加载失败: {response.status_code}")
return False
except Exception as e:
logger.error(f"❌ 页面加载异常: {e}")
return False
def generate_ad_requests(self):
"""生成广告请求"""
fingerprint = self.generate_device_fingerprint()
# 为每种广告类型生成请求
ad_requests = []
for ad_type, config in self.ad_types.items():
if random.random() < config["weight"]:
request_data = {
"zone": config["zone"],
"type": ad_type,
"device_id": fingerprint["device_id"],
"session_id": fingerprint["session_id"],
"screen_width": fingerprint["screen_width"],
"screen_height": fingerprint["screen_height"],
"timezone": fingerprint["timezone"],
"language": fingerprint["language"],
"platform": fingerprint["platform"],
"timestamp": int(time.time()),
"referrer": self.session.headers.get("Referer", "direct"),
"user_agent": self.session.headers.get("User-Agent", ""),
"ip_country": "US"
}
ad_requests.append(request_data)
return ad_requests
def send_impression_requests(self, ad_requests):
"""发送展示请求"""
impression_count = 0
for request_data in ad_requests:
try:
# 构造展示请求
impression_url = f"https://{self.sw_domain}/impression"
# 添加MonetTag特有的参数
params = {
"zone": request_data["zone"],
"type": request_data["type"],
"device": request_data["device_id"],
"session": request_data["session_id"],
"sw": request_data["screen_width"],
"sh": request_data["screen_height"],
"tz": request_data["timezone"],
"lang": request_data["language"],
"platform": request_data["platform"],
"ts": request_data["timestamp"],
"ref": base64.b64encode(request_data["referrer"].encode()).decode(),
"ua": base64.b64encode(request_data["user_agent"].encode()).decode(),
"country": "US",
"r": random.random()
}
# 发送请求
response = self.session.get(
impression_url,
params=params,
timeout=self.request_config["timeout"]
)
if response.status_code in [200, 204]:
impression_count += 1
logger.info(f"📊 展示请求成功: {request_data['type']} (Zone: {request_data['zone']})")
else:
logger.warning(f"⚠️ 展示请求失败: {response.status_code}")
# 请求间隔
time.sleep(random.uniform(0.1, 0.5))
except Exception as e:
logger.error(f"❌ 展示请求异常: {e}")
self.stats["errors"] += 1
continue
self.stats["impressions"] += impression_count
logger.info(f"📊 本次展示量: {impression_count}")
return impression_count
def send_click_requests(self, ad_requests):
"""发送点击请求"""
click_count = 0
target_click_rate = self.config["settings"]["click_rate"]
for request_data in ad_requests:
# 根据广告类型和设置的点击率决定是否点击
ad_config = self.ad_types.get(request_data["type"], {})
base_click_rate = ad_config.get("click_rate", 0.1)
# 综合考虑全局点击率和广告类型点击率
final_click_rate = (target_click_rate + base_click_rate) / 2
if random.random() < final_click_rate:
try:
# 模拟用户思考时间
think_time = random.uniform(1, 4)
time.sleep(think_time)
# 构造点击请求
click_url = f"https://{self.sw_domain}/click"
# 点击请求参数
click_params = {
"zone": request_data["zone"],
"type": request_data["type"],
"device": request_data["device_id"],
"session": request_data["session_id"],
"click_id": hashlib.md5(str(time.time()).encode()).hexdigest(),
"timestamp": int(time.time()),
"x": random.randint(10, 200),
"y": random.randint(10, 300),
"country": "US",
"r": random.random()
}
# 发送点击请求
response = self.session.post(
click_url,
data=click_params,
timeout=self.request_config["timeout"]
)
if response.status_code in [200, 201, 204]:
click_count += 1
logger.info(f"🖱️ 点击请求成功: {request_data['type']} (Zone: {request_data['zone']})")
# 模拟点击后行为
self._simulate_post_click_behavior(request_data)
else:
logger.warning(f"⚠️ 点击请求失败: {response.status_code}")
except Exception as e:
logger.error(f"❌ 点击请求异常: {e}")
self.stats["errors"] += 1
continue
self.stats["clicks"] += click_count
logger.info(f"🖱️ 本次点击量: {click_count}")
return click_count
def _simulate_post_click_behavior(self, request_data):
"""模拟点击后行为"""
# 模拟广告页面停留时间
stay_time = random.uniform(2, 8)
# 根据广告类型调整行为
if request_data["type"] == "onclick_popunder":
# 弹窗广告,用户可能快速关闭
if random.random() < 0.7:
stay_time = random.uniform(0.5, 2)
logger.info(f" 🚫 快速关闭弹窗: {stay_time:.1f}")
elif request_data["type"] == "native_banner":
# 原生广告,用户可能更感兴趣
if random.random() < 0.4:
stay_time = random.uniform(5, 15)
logger.info(f" 📖 阅读原生广告: {stay_time:.1f}")
time.sleep(stay_time)
def run_single_session(self):
"""运行单次会话"""
logger.info("🚀 开始单次MonetTag刷量会话")
# 设置会话
self.setup_session()
try:
# 1. 加载标签脚本
if not self.load_tag_script():
logger.error("❌ 标签脚本加载失败")
return False
# 2. 模拟页面加载
if not self.simulate_page_load():
logger.error("❌ 页面加载失败")
return False
# 3. 生成广告请求
ad_requests = self.generate_ad_requests()
if not ad_requests:
logger.warning("⚠️ 未生成广告请求")
return False
logger.info(f"🎯 生成了 {len(ad_requests)} 个广告请求")
# 4. 发送展示请求
impression_count = self.send_impression_requests(ad_requests)
# 5. 发送点击请求
click_count = self.send_click_requests(ad_requests)
# 6. 更新统计
self.stats["total_visits"] += 1
if impression_count > 0:
self.stats["click_rate"] = self.stats["clicks"] / self.stats["impressions"]
logger.info(f"✅ 会话完成: 展示={impression_count}, 点击={click_count}")
return True
except Exception as e:
logger.error(f"❌ 会话执行异常: {e}")
self.stats["errors"] += 1
return False
finally:
if self.session:
self.session.close()
def run_continuous_sessions(self, total_sessions=None, delay_range=None):
"""运行连续会话"""
if total_sessions is None:
total_sessions = self.config['settings'].get('visits_per_hour', 100)
if delay_range is None:
delay_range = (
self.config['settings']['min_delay'],
self.config['settings']['max_delay']
)
success_count = 0
logger.info(f"🎯 开始连续MonetTag刷量目标: {total_sessions}")
logger.info(f"📊 目标点击率: {self.config['settings']['click_rate']*100}%")
logger.info(f"🇺🇸 主要地区: 美国")
logger.info(f"📱 主要设备: 手机端 ({self.config['settings']['mobile_rate']*100}%)")
for i in range(total_sessions):
logger.info(f"{'='*60}")
logger.info(f"🔄 第 {i+1}/{total_sessions} 次会话")
logger.info(f"{'='*60}")
session_start = time.time()
if self.run_single_session():
success_count += 1
session_time = time.time() - session_start
# 实时统计
current_click_rate = (self.stats["clicks"] / max(self.stats["impressions"], 1)) * 100
logger.info(f"✅ 第 {i+1} 次会话成功!耗时: {session_time:.1f}")
logger.info(f"📊 累计统计: 访问={self.stats['total_visits']}, 展示={self.stats['impressions']}, 点击={self.stats['clicks']}, 点击率={current_click_rate:.1f}%")
else:
logger.error(f"❌ 第 {i+1} 次会话失败!")
# 会话间隔
if i < total_sessions - 1:
delay = random.uniform(delay_range[0], delay_range[1])
logger.info(f"⏳ 等待 {delay:.1f}")
time.sleep(delay)
# 最终统计
self._print_final_stats(success_count, total_sessions)
return success_count
def _print_final_stats(self, success_count, total_sessions):
"""打印最终统计"""
success_rate = (success_count / total_sessions) * 100
click_rate = (self.stats["clicks"] / max(self.stats["impressions"], 1)) * 100
logger.info(f"🎉 MonetTag刷量任务完成")
logger.info(f"📊 最终统计:")
logger.info(f" 成功率: {success_count}/{total_sessions} ({success_rate:.1f}%)")
logger.info(f" 总访问: {self.stats['total_visits']}")
logger.info(f" 总展示: {self.stats['impressions']}")
logger.info(f" 总点击: {self.stats['clicks']}")
logger.info(f" 点击率: {click_rate:.1f}%")
logger.info(f" 错误数: {self.stats['errors']}")
logger.info(f" 🎯 Zone ID: {self.zone_id}")
logger.info(f" 🇺🇸 主要地区: 美国")
logger.info(f" 📱 主要设备: 手机端")
def main():
"""主函数"""
print("=" * 80)
print("🎯 MonetTag 专用刷量机器人")
print("=" * 80)
print("💡 核心特性:")
print(" 🎯 MonetTag Zone: 157708")
print(" 📊 点击率控制: 10%")
print(" 🇺🇸 主要地区: 美国")
print(" 📱 主要设备: 手机端 (90%)")
print(" 🔄 支持广告类型: Push, Banner, Native, Popunder")
print()
try:
bot = MonetTagBot()
print("请选择运行模式:")
print("1. 🧪 单次会话测试")
print("2. 🚀 连续会话 (使用配置参数)")
print("3. ⚙️ 自定义连续会话")
choice = input("请输入选择 (1/2/3): ").strip()
if choice == "1":
logger.info("🧪 开始单次会话测试")
success = bot.run_single_session()
if success:
print("🎉 单次会话测试成功!")
else:
print("😞 单次会话测试失败!")
elif choice == "2":
logger.info("🚀 开始连续会话")
success_count = bot.run_continuous_sessions()
print(f"🎉 连续会话完成!成功: {success_count}")
elif choice == "3":
try:
session_count = int(input("请输入会话次数: ").strip())
min_delay = int(input("请输入最小延迟秒数: ").strip())
max_delay = int(input("请输入最大延迟秒数: ").strip())
logger.info(f"🚀 开始自定义会话,次数: {session_count}")
success_count = bot.run_continuous_sessions(
total_sessions=session_count,
delay_range=(min_delay, max_delay)
)
print(f"🎉 自定义会话完成!成功: {success_count}/{session_count}")
except ValueError:
print("❌ 输入参数错误!")
else:
print("❌ 无效选择!")
except KeyboardInterrupt:
print("\n⚠️ 用户中断执行")
except Exception as e:
logger.error(f"程序执行出错: {e}")
print("❌ 程序执行出错,请查看日志文件 monetag_bot.log")
if __name__ == "__main__":
main()

58
monetag_config.json Normal file
View File

@@ -0,0 +1,58 @@
{
"target_website": "https://your-website.com",
"proxy": {
"enabled": false,
"host": "us-proxy.example.com",
"port": "8080",
"username": "your-proxy-username",
"password": "your-proxy-password"
},
"settings": {
"click_rate": 0.10,
"mobile_rate": 0.90,
"us_traffic_rate": 1.0,
"visits_per_hour": 100,
"min_delay": 30,
"max_delay": 90
},
"monetag": {
"zone_id": "157708",
"base_domain": "fpyf8.com",
"sw_domain": "aiharsoreersu.net",
"ad_types": {
"push_notifications": {
"enabled": true,
"weight": 0.2,
"click_rate": 0.12
},
"vignette_banner": {
"enabled": true,
"weight": 0.25,
"click_rate": 0.08
},
"native_banner": {
"enabled": true,
"weight": 0.2,
"click_rate": 0.15
},
"in_page_push": {
"enabled": true,
"weight": 0.2,
"click_rate": 0.10
},
"onclick_popunder": {
"enabled": true,
"weight": 0.15,
"click_rate": 0.05
}
}
},
"advanced": {
"request_timeout": 10,
"max_retries": 3,
"retry_delay": 2,
"user_agent_rotation": true,
"device_fingerprinting": true,
"real_browser_headers": true
}
}

80
run_monetag_bot.bat Normal file
View File

@@ -0,0 +1,80 @@
@echo off
chcp 65001 >nul
title MonetTag 专用刷量机器人
echo ===============================================================
echo 🎯 MonetTag 专用刷量机器人
echo ===============================================================
echo 💡 核心特性:
echo 🎯 MonetTag Zone: 157708
echo 📊 点击率控制: 10%
echo 🇺🇸 主要地区: 美国
echo 📱 主要设备: 手机端 (90%)
echo 🔄 支持广告类型: Push, Banner, Native, Popunder
echo 💰 展示量 + 点击量双重刷量
echo.
:: 检查Python
python --version >nul 2>&1
if %errorlevel% neq 0 (
echo ❌ Python未安装请先安装Python 3.7+
pause
exit /b 1
)
echo ✅ Python已安装
python --version
:: 检查必要文件
if not exist monetag_config.json (
echo ❌ 配置文件 monetag_config.json 不存在!
pause
exit /b 1
)
if not exist monetag_bot.py (
echo ❌ MonetTag机器人文件 monetag_bot.py 不存在!
pause
exit /b 1
)
echo ✅ 所有文件检查完成
:: 安装依赖
echo.
echo 📦 检查并安装依赖...
pip install requests --quiet
if %errorlevel% neq 0 (
echo ❌ 依赖安装失败!
pause
exit /b 1
)
echo ✅ 依赖安装成功
echo.
echo 🎯 MonetTag 刷量特性:
echo 📊 Zone ID: 157708
echo 🇺🇸 美国IP代理: 支持
echo 📱 手机端用户: 90%概率
echo 🎭 真实用户行为: 完全模拟
echo 📈 展示量统计: 实时追踪
echo 🖱️ 点击量控制: 10%点击率
echo 🔄 5种广告类型: Push、Banner、Native、Popunder、In-Page
echo ⏱️ 智能延迟: 30-90秒间隔
echo 📊 详细统计: 成功率、点击率、错误率
echo.
echo 🚀 启动MonetTag刷量机器人...
python monetag_bot.py
echo.
echo 🏁 MonetTag刷量任务完成
echo 📝 详细日志请查看 monetag_bot.log 文件
echo 💡 MonetTag专用特点
echo - 针对Zone 157708优化
echo - 美国流量为主
echo - 手机端设备特征
echo - 10%精准点击率控制
echo - 展示量和点击量双重刷量
echo - 支持代理IP配置
pause

View File

@@ -1,83 +0,0 @@
@echo off
chcp 65001 >nul
title 通用广告刷量机器人 - 智能识别版
echo ===============================================================
echo 🎯 通用广告刷量机器人 (智能识别版)
echo ===============================================================
echo 💡 核心特性:
echo 🔍 智能广告识别 - 自动检测各种广告类型
echo 🎭 真实用户行为 - 75%概率讨厌广告
echo ❌ 智能关闭按钮 - 自动寻找并点击关闭按钮
echo 📱 移动端优先 - 85%概率使用移动设备
echo 🌐 通用适配 - 适用于任何广告网络
echo 📊 详细统计 - 检测率、关闭率、点击率
echo ⚠️ 请确保仅用于测试自己的网站!
echo.
:: 检查Python
python --version >nul 2>&1
if %errorlevel% neq 0 (
echo ❌ Python未安装请先安装Python 3.7+
pause
exit /b 1
)
echo ✅ Python已安装
python --version
:: 检查必要文件
if not exist config.json (
echo ❌ 配置文件 config.json 不存在!
pause
exit /b 1
)
if not exist real_user_database.py (
echo ❌ 用户数据库文件 real_user_database.py 不存在!
pause
exit /b 1
)
if not exist universal_ad_bot.py (
echo ❌ 通用广告机器人文件 universal_ad_bot.py 不存在!
pause
exit /b 1
)
echo ✅ 所有文件检查完成
:: 安装依赖
echo.
echo 📦 检查并安装依赖...
pip install requests --quiet
if %errorlevel% neq 0 (
echo ❌ 依赖安装失败!
pause
exit /b 1
)
echo ✅ 依赖安装成功
echo.
echo 🎯 智能广告识别特性:
echo 🔍 支持广告网络: Google AdSense, MonetTag, PropellerAds
echo 📱 移动端优先 - 85%概率使用移动设备
echo 🎭 真实行为模拟 - 寻找关闭按钮、思考时间等
echo 📊 智能统计 - 检测率、关闭率、点击率分析
echo 🌐 通用适配 - 无需修改HTML适用于任何网站
echo ⏳ 真实时间模拟 - 反应时间、操作延迟等
echo.
echo 🚀 启动通用广告刷量机器人...
python universal_ad_bot.py
echo.
echo 🏁 通用广告刷量任务完成!
echo 📝 详细日志请查看 universal_ad_bot.log 文件
echo 💡 智能识别特点:
echo - 自动检测各种广告网络和类型
echo - 75%的用户讨厌广告并选择关闭
echo - 智能识别关闭按钮并模拟点击
echo - 适用于任何使用智能合一广告的网站
echo - 无需修改现有HTML结构
pause

File diff suppressed because it is too large Load Diff

View File

@@ -1,318 +0,0 @@
# 🎯 通用广告刷量机器人 - 智能识别版
## 📋 功能概述
这是一个智能的广告刷量机器人,专为使用智能合一广告系统的网站设计。**无需修改您的HTML代码**,机器人能自动识别和处理各种广告类型,模拟真实用户行为。
### 🎯 核心特性
- **🔍 智能广告识别** - 自动检测各种广告网络和类型
- **🎭 真实用户行为** - 75%概率讨厌广告并点击关闭按钮
- **❌ 智能关闭按钮** - 自动寻找并点击关闭按钮
- **📱 移动端优先** - 85%概率使用移动设备
- **🌐 通用适配** - 适用于任何广告网络
- **📊 详细统计** - 检测率、关闭率、点击率分析
⚠️ **重要提醒:仅用于测试自己的网站!**
## 🔍 支持的广告网络
| 广告网络 | 检测支持 | 关闭支持 | 点击支持 |
|----------|----------|----------|----------|
| Google AdSense | ✅ | ✅ | ✅ |
| Google DoubleClick | ✅ | ✅ | ✅ |
| MonetTag | ✅ | ✅ | ✅ |
| PropellerAds | ✅ | ✅ | ✅ |
| Adsterra | ✅ | ✅ | ✅ |
| ExoClick | ✅ | ✅ | ✅ |
| PopAds | ✅ | ✅ | ✅ |
| Amazon Associates | ✅ | ✅ | ✅ |
| Outbrain | ✅ | ✅ | ✅ |
| Taboola | ✅ | ✅ | ✅ |
| RevContent | ✅ | ✅ | ✅ |
| MGID | ✅ | ✅ | ✅ |
## 🎭 真实用户行为模拟
### 用户行为概率分布
```
📊 用户对广告的真实反应:
😤 立即关闭广告: 45%
🤔 思考后关闭: 30%
📖 阅读后关闭: 15%
🖱️ 点击广告内容: 10%
```
### 行为时间模拟
| 行为类型 | 时间范围 | 说明 |
|----------|----------|------|
| 🔍 寻找关闭按钮 | 0.5-2.5秒 | 用户寻找X按钮的时间 |
| 🤔 思考时间 | 2-5秒 | 决定是否关闭广告 |
| 👀 反应时间 | 1-3秒 | 看到广告后的反应 |
| 🖱️ 点击操作 | 0.2-0.8秒 | 实际点击动作 |
| 😌 关闭后释放 | 0.5-1.5秒 | 关闭广告后的心理释放 |
## 📁 文件结构
```
通用广告刷量系统/
├── universal_ad_bot.py # 通用广告机器人核心文件
├── run_universal_ad_bot.bat # Windows一键启动脚本
├── config.json # 配置文件(需要配置)
├── real_user_database.py # 真实用户数据库
├── universal_ad_bot.log # 运行日志
└── 通用广告刷量机器人说明.md # 本说明文档
```
## 🚀 快速开始
### 1. 一键启动(推荐)
```bash
# 双击运行
run_universal_ad_bot.bat
```
### 2. 手动启动
```bash
# 安装依赖
pip install requests
# 运行机器人
python universal_ad_bot.py
```
### 3. 配置文件设置
编辑 `config.json` 文件:
```json
{
"targets": {
"main_site": "https://your-website.com/"
},
"settings": {
"default_visits": 10,
"min_delay": 60,
"max_delay": 300
}
}
```
## 🔍 智能识别原理
### 广告脚本识别
机器人通过以下方式识别广告:
1. **脚本标签检测**
- 检测广告网络的JavaScript文件
- 识别广告标签管理器
- 分析广告追踪脚本
2. **HTML元素识别**
- 查找广告容器元素
- 识别广告标记属性
- 检测广告相关CSS类
3. **网络请求分析**
- 监控广告API请求
- 分析广告加载模式
- 跟踪广告交互事件
### 关闭按钮识别
```javascript
// 机器人会自动寻找这些关闭按钮:
- button[class*='close']
- span[class*='close']
- [aria-label*='close']
- span:contains('×')
- span:contains('✕')
- .close, .btn-close, .modal-close
```
## 📊 统计分析功能
### 实时统计
- 🔍 **检测成功率** - 广告识别准确度
-**关闭按钮点击次数** - 用户讨厌广告的体现
- 🖱️ **广告内容点击次数** - 真实的广告互动
- 🙈 **忽略广告次数** - 用户无视广告的情况
### 详细报告
```
📊 智能广告检测和交互统计:
🔍 检测到广告: 25 个
❌ 关闭按钮点击: 19 次 (76%)
🖱️ 广告内容点击: 4 次 (16%)
🙈 忽略广告: 2 次 (8%)
🎯 发现的广告类型:
- Google AdSense: 8 个
- MonetTag: 6 个
- PropellerAds: 4 个
- PopAds: 3 个
- Adsterra: 2 个
- ExoClick: 2 个
```
## 🎮 游戏网站特化功能
### 游戏广告处理
- **🎯 游戏前广告** - 70%概率跳过或关闭
- **🎮 游戏中广告** - 80%概率立即关闭
- **🏆 游戏结束广告** - 50%概率关闭30%概率点击
### 游戏行为模拟
```python
# 根据游戏类型调整行为模式
puzzle_games = "思考型操作,停留时间长"
arcade_games = "快速操作,反应迅速"
action_games = "连续操作,专注度高"
```
## 📱 移动端优化
### 移动端特性
- **📱 85%概率使用移动设备** - 符合现代用户习惯
- **👆 触摸操作模拟** - 模拟手指点击行为
- **📐 响应式适配** - 自动适应不同屏幕尺寸
- **🔋 省电模式考虑** - 模拟移动设备的省电行为
### 移动端User-Agent
```
iPhone Safari 17.1+
Android Chrome 120.0+
iPad Safari 17.1+
Samsung Browser 22.0+
```
## ⚙️ 高级配置
### 代理设置
```json
{
"proxy": {
"host": "proxy-server.com",
"port": "8080",
"username": "your-username",
"password": "your-password"
}
}
```
### 行为调整
```json
{
"ad_settings": {
"close_button_probability": 0.75,
"mobile_device_probability": 0.85,
"ad_annoyance_factor": 0.8
}
}
```
### 时间模式
```json
{
"user_behavior_config": {
"find_close_button_time": [0.5, 2.5],
"think_time": [2, 5],
"reaction_time": [1, 3],
"click_delay": [0.2, 0.8]
}
}
```
## 🔧 故障排除
### 常见问题
1. **广告识别失败**
- 检查网站是否加载了广告脚本
- 确认广告网络在支持列表中
- 查看日志文件获取详细信息
2. **关闭按钮找不到**
- 广告可能使用非标准的关闭按钮
- 检查广告是否为iframe形式
- 尝试增加识别延迟时间
3. **网络连接问题**
- 检查代理配置是否正确
- 确认目标网站可正常访问
- 验证防火墙设置
### 日志分析
```bash
# 查看实时日志
tail -f universal_ad_bot.log
# 查看错误信息
grep "ERROR" universal_ad_bot.log
# 查看广告检测结果
grep "检测到" universal_ad_bot.log
```
## 📊 性能优化
### 内存优化
- 🔄 **会话重用** - 减少连接开销
- 🗑️ **自动清理** - 定期清理临时数据
- 📦 **数据压缩** - 减少内存占用
### 速度优化
-**并行处理** - 同时处理多个广告
- 🚀 **智能缓存** - 缓存常见广告模式
- 📈 **预测加载** - 预测广告出现时机
## 🛡️ 安全注意事项
### 使用限制
1. ⚠️ **仅用于测试自己的网站**
2. 🕐 **合理控制访问频率**
3. 🌐 **遵守网站服务条款**
4. 📊 **监控服务器负载**
### 最佳实践
1. 📈 **先进行小规模测试**
2. 📊 **分析广告效果数据**
3. 🎯 **优化广告位置和类型**
4. 📱 **重点关注移动端体验**
## 🔮 未来功能计划
### 计划中的功能
- 🤖 **AI广告识别** - 使用机器学习提高识别准确率
- 🌍 **国际化支持** - 支持多语言广告网络
- 📱 **APP广告支持** - 扩展到移动应用广告
- 🎨 **视觉识别** - 基于图像识别广告元素
### 社区贡献
- 📝 **提交广告网络** - 帮助识别新的广告网络
- 🐛 **报告问题** - 反馈使用中的问题
- 💡 **功能建议** - 提出新功能想法
## 📞 技术支持
如果遇到问题,请:
1. 📝 查看 `universal_ad_bot.log` 日志文件
2. 🔍 检查配置文件是否正确
3. 📱 确保网络连接正常
4. 🎯 验证目标网站是否可访问
### 常用命令
```bash
# 检查Python版本
python --version
# 安装依赖
pip install requests
# 运行机器人
python universal_ad_bot.py
# 查看日志
type universal_ad_bot.log
```
---
💡 **核心优势这个通用机器人能够自动适应任何使用智能合一广告系统的网站无需修改HTML代码智能识别并模拟真实用户对广告的反应。**