You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用普通浏览器Cookie爬虫遇检测失效,求自动化解决方案

问题:自动绕过coches.net的机器人检测并更新Cookie

我用Python的pyppeteer写了一个爬取coches.net的脚本,但网站每隔几分钟就会把我识别为机器人。目前唯一能绕过检测的方法是从常规浏览器提取Cookie导入脚本,但这些Cookie几分钟就失效,得手动重新提取导入。有没有办法自动化这个过程或者其他解决方案?

我试过让脚本自动更新Cookie,但只有常规浏览器的Cookie才有效。也考虑过网站检测到我时用Selenium提取Cookie,但就算用非无头模式和undetected-chromedriver,还是会被检测到。

我的代码

import asyncio
import random
import json
import traceback
from pyppeteer import launch
from pyppeteer_stealth import stealth


async def puppeteer_cochesnet_scraper(start_url):
    print("Starting coches.net scrap...")

    browser = await launch(headless=True, executablePath='C:/Program Files/chrome-win/chrome.exe')
    context = await browser.createIncognitoBrowserContext()
    page = await context.newPage()

    with open('cookies_cochesnet.json', 'r') as f:
        cookies = json.load(f)

    await page.setCookie(*cookies)

    await page.setUserAgent(
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36')

    await page.setViewport({'width': 1280, 'height': 800})
    await page.setExtraHTTPHeaders({'Accept-Language': 'es-ES'})

    await page.evaluateOnNewDocument(
        'navigator.geolocation.getCurrentPosition = function(success) {'
        'success({coords: {latitude: 41.55049678876526, longitude: 2.447197735379941}});}'
    )

    await stealth(page)

    try:
        await page.goto(start_url, {'waitUntil': 'networkidle2'})
        await asyncio.sleep(random.uniform(2, 5))

    except Exception as ex:
        print(f"Exception while navigating to URL: \n{ex}\nPassing URL...")
        print(f"Traceback details:\n{traceback.print_exc()}")

    finally:
        cookies = await page.cookies()
        with open("cookies_cochesnet.json", 'w') as f:
            json.dump(cookies, f)
        await browser.close()

解决方案

1. 复用常规浏览器的用户数据目录

直接让pyppeteer挂载你日常使用的Chrome用户数据目录,脚本会自动继承常规浏览器的会话(包括已认证Cookie、缓存和真实指纹),无需手动提取Cookie:

browser = await launch(
    headless=False,  # 先以非无头模式测试,后续可尝试优化参数后切换无头
    executablePath='C:/Program Files/chrome-win/chrome.exe',
    userDataDir='C:/Users/你的用户名/AppData/Local/Google/Chrome/User Data'  # 替换为你的Chrome用户数据路径
)

注意:使用该方法时需确保常规Chrome未启动,否则会触发进程冲突。如需同时使用,可复制一份用户数据目录作为脚本专用。

2. 强化浏览器指纹伪装

在现有pyppeteer_stealth基础上,补充更多抗检测参数:

browser = await launch(
    headless=True,
    executablePath='C:/Program Files/chrome-win/chrome.exe',
    args=[
        '--no-sandbox',
        '--disable-setuid-sandbox',
        '--disable-webgl',
        '--disable-dev-shm-usage',
        '--disable-accelerated-2d-canvas',
        '--disable-gpu',
        '--start-maximized',
        '--window-size=1280,800'
    ]
)

同时在页面初始化时覆盖Canvas指纹:

await page.evaluateOnNewDocument("""
    HTMLCanvasElement.prototype.toDataURL = function() {
        return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==";
    };
""")

3. 模拟真实用户行为

网站会通过行为模式识别机器人,需补充更贴近真人的操作:

  • 扩大随机停留时间范围(5-15秒)
  • 添加鼠标移动、滚动、随机点击等操作:
# 模拟滚动页面
await page.evaluate('window.scrollTo(0, document.body.scrollHeight)')
await asyncio.sleep(random.uniform(1, 3))
# 模拟随机鼠标移动
await page.mouse.move(random.randint(0, 1280), random.randint(0, 800))
  • 避免连续批量请求,每次请求后添加随机间隔。

4. 代理IP轮换

如果你的IP被网站标记,轮换代理IP是有效手段。可结合代理池,在启动浏览器时指定代理:

browser = await launch(
    executablePath='C:/Program Files/chrome-win/chrome.exe',
    args=['--proxy-server=http://你的代理IP:端口']
)

5. 处理人机验证页面

若网站弹出验证码,可集成第三方打码服务自动识别,或在检测到验证页面时暂停脚本,手动完成验证后继续执行。


内容的提问来源于stack exchange,提问作者Viada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 14:57:04