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

如何配置Apify实现代理轮询式请求以规避429错误?

解决PlaywrightCrawler代理轮询问题的配置调整

你的问题核心是默认的session池与代理分配逻辑未实现轮询,导致同一代理被连续调用触发429拦截。下面是具体的配置调整方案:

关键调整点

  • 给SessionPool配置固定数量的session,每个session绑定唯一代理,确保轮询分配
  • 限制每个session的最大请求次数,避免单个代理连续请求过多
  • 启用session的轮询分配策略

修改后的完整配置代码

const collector = new Apify.PlaywrightCrawler({
    requestQueue,
    proxyConfiguration,
    useSessionPool: true,
    persistCookiesPerSession: true,
    // 配置SessionPool实现代理轮询
    sessionPoolOptions: {
        // session数量设为代理总数,确保每个代理对应一个独立session
        maxPoolSize: 10, // 你的代理数组长度
        // 按顺序轮询分配session,而非随机选取
        sessionRotation: 'round-robin',
        // 限制每个session的最大请求次数,避免同一代理连续请求触发反爬
        maxUsageCount: 3, // 可根据网站反爬强度调整,比如每个代理最多连续发3次请求就切换
    },
    launchContext: {
        launchOptions: {
            headless: true,
        }
    },
    maxConcurrency: 4, // 并发数建议不超过session总数,确保轮询逻辑有效
    handlePageFunction: handleFunctionCollection,
    handleFailedRequestFunction: async ({ request, session }) => {
        console.log(`Request ${request.url} failed too many times.`);
        // 遇到429时标记对应session(代理)为无效,自动切换其他代理
        if (request.statusCode === 429 && session) {
            session.markBad();
        }
    },
});

额外优化提示

  • 若代理数量为10、并发数设为5,round-robin策略会依次从session池取前5个代理,完成后轮询到下一组,避免单个代理持续占用并发资源
  • 确保proxyConfiguration正确加载了全部代理,比如通过Apify.createProxyConfiguration({ proxyUrls: ['proxy1', 'proxy2', ...] })创建

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:35:03