File size: 1,232 Bytes
0364a21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import asyncio
import random
import logging
import config

logger = logging.getLogger(__name__)

async def micro_delay(action_type: str = "between_requests"):
    """
    提供细微的随机抖动延迟,以打破机器自动化死板均匀的请求间隔
    """
    if not config.STEALTH_MODE:
        return

    base_min = config.STEALTH_MIN_DELAY
    base_max = config.STEALTH_MAX_DELAY
    
    # 根据 action 稍微做一点权重偏移,避免全部都随机均匀分布
    if action_type == "click":
        # 点击提交按钮/页面跳转,时间可以稍微短点 
        delay = random.uniform(base_min, base_max * 0.8)
    elif action_type == "typing":
        # 敲击回车等
        delay = random.uniform(base_min * 0.5, base_max * 0.5)
    else:  # between_requests 
        # 网络连接/后台操作之间
        delay = random.uniform(base_min, base_max)

    # 进一步加一点基于正态分布的抖动限制,使它表现更接近人的生理方差
    # 这里通过限制下限来防低于0
    final_delay = max(0.01, random.gauss(delay, (base_max - base_min) * 0.2))
    
    logger.debug(f"Stealth jitter delay ({action_type}): {final_delay:.3f}s")
    await asyncio.sleep(final_delay)