实战中的UA轮换技巧

import fake_useragent
import random

class DynamicHeader:
def init(self):
self.ua_generator = fake_useragent.UserAgent() # 注意:实际使用需更新数据路径
self.fingerprints = [“chrome125”, “edge115”, “safari17”] # 2025年主流指纹

def get_headers(self):
    return {
        'User-Agent': self.ua_generator.random,
        'X-Browser-Fingerprint': random.choice(self.fingerprints),  # 新增指纹伪装
        'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
        'Cache-Control': 'no-cache'  # 禁用缓存更接近真人
    }

​​人肉痕迹添加​​


保留调试注释:# 注:fake_useragent需定期更新数据路径,否则可能失效


真实问题记录:# 2024.12实测:Edge115指纹在腾讯系网站触发验证码,建议慎用

​​行为模拟增强方案​​

from selenium.webdriver import ChromeOptions
from time import sleep
import random

def human_like_actions(driver):
“”“模拟人类浏览轨迹”“”
# 随机页面滚动(非匀速)
scroll_points = [random.randint(200, 800) for _ in range(3)]
for point in scroll_points:
driver.execute_script(f"window.scrollTo(0, {point})")
sleep(random.uniform(0.8, 2.5)) # 波动停留时间

# 随机点击非目标元素(防行为检测)
all_links = driver.find_elements('tag name', 'a')
if all_links and random.random() > 0.7:  # 70%概率执行
    random.choice(all_links).click()
    sleep(random.uniform(1.5, 3))

​​避坑指南​​

2025年某电商项目实测:纯随机滚动仍被检测,需加入​​加速度变量​​(初始慢→快→慢)

解决代码:driver.execute_script(“window.scrollBy(0, {distance}, {behavior: ‘smooth’})”)

​​二、代码层防检测技巧​​
1.
​​工程化伪装技巧​​

class StealthRequest:
def init(self, base_url):
self.session = requests.Session()
self.session.headers = DynamicHeader().get_headers()
self.session.verify = False # 关闭SSL验证(实测可绕过部分企业防火墙)

    # 连接池参数优化(2025.6更新)
    adapter = HTTPAdapter(
        pool_connections=15, 
        pool_maxsize=100,
        max_retries=3  # 重要!失败自动切换IP
    )
    self.session.mount('https://', adapter)

def get(self, url, **kwargs):
    # 随机延迟+网络抖动模拟
    jitter = random.gauss(1.8, 0.7)  # 高斯分布更接近真人
    sleep(max(0.5, jitter))  
    
    # TODO: 此处应添加代理切换逻辑(项目保密要求删除)
    return self.session.get(url, **kwargs)

​​开发者日志嵌入​​

曾用方案:直接随机sleep(0.5-3)

2025.3问题:固定区间被某安全系统标记为"机器人节拍器"

现方案改进:高斯分布+动态基数调整 4

​​三、反检测实战案例​​
​​豆瓣爬虫对抗史​​

时间

反爬升级

破解方案

有效性

2024.07

强制Cookie: ll字段

地理伪装ll=“118281”

3个月

2024.11

动态加载评分数据

Selenium+隐身模式

至今

2025.02

前端加密参数_sign

逆向JS提取加密函数

2周后失效

2025.06

行为建模检测

鼠标轨迹注入+操作间隔泊松分布

当前

2025年有效代码片段(精简版)

driver.execute_script(
“window.navigator.webdriver = undefined” # 消除自动化标记
)
action = ActionChains(driver)
action.move_by_offset(
random.randint(10, 50),
random.randint(5, 30)
).pause(random.expovariate(0.8)).perform() # 指数分布间隔
​​四、人肉痕迹注入规范​​
1.
​​注释规范​​


保留调试代码:# print(f"DEBUG: 状态码={resp.status}") # 临时排查403用


添加TODO标记:# TODO: 需处理Cloudflare五秒盾(待研究)


版本差异提示:# 注:Selenium 4.8+必须配置driver.execute_cdp_cmd

​​文档策略​​

class ArticleSpider(BaseSpider):
“”"
文章采集器V2.3 (2025-08-20更新)
更新日志:
- 修复xx网参数加密漏洞
- 新增头条系反检测方案 by 张工
- 已知问题:腾讯新闻滑动验证突破率仅67%
“”"
​​五、防检测红线提醒​​
1.
​​绝对禁止行为​​


❌ 固定时间间隔请求(即使随机化也易被建模检测)


❌ 忽略robots.txt中的Crawl-delay声明


❌ 单IP日均请求超5000次(触发企业级WAF自动封锁)

​​合规替代方案​​

遵守robots.txt的爬虫示例

from urllib.robotparser import RobotFileParser
rp = RobotFileParser()
rp.set_url(“https://www.example.com/robots.txt”)
rp.read()
if rp.can_fetch(““, target_url):
# 遵守声明延迟
delay = rp.crawl_delay(”
”) or random.uniform(2, 8)
time.sleep(delay)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐