10个代理并发抢鞋:SneakerBotTutorials多线程架构与Driver管理深度解析
2026/8/26 15:44:37 网站建设 项目流程

10个代理并发抢鞋:SneakerBotTutorials多线程架构与Driver管理深度解析

【免费下载链接】SneakerBotTutorialsOpen Source SneakerBot created as a supplement to my "Creating a Sneaker Bot in Python" Youtube Series项目地址: https://gitcode.com/gh_mirrors/sn/SneakerBotTutorials

SneakerBotTutorials 是一款开源球鞋机器人(Sneaker Bot)项目,配套 YouTube 系列教程"Creating a Sneaker Bot in Python",核心玩法就是用Python 多线程 + 代理并发,让 10 个无头浏览器同时访问发售页面抢鞋。本文带你拆解它的多线程架构、Driver(浏览器实例)管理逻辑,以及代理测试筛选流程。

为什么抢鞋机器人必须"多线程 + 代理"

热门球鞋(比如 Yeezy 350 V2)开售时,单一 IP 的浏览器会被页面直接限流或风控,手动刷新更是毫无胜算。SneakerBotTutorials 的思路是:

  • 🌐每个代理 IP 一个浏览器实例,用不同出口 IP 分散访问;
  • 🧵每个代理一条 Python 线程,10 个代理就是 10 路并发,同时刷新目标页面;
  • 📸 每个代理自动保存一张截图,方便事后核对每个 IP 到底跑没跑通。

项目结构与一键安装步骤

仓库克隆下来之后,核心文件很少,结构非常清晰:

git clone https://gitcode.com/gh_mirrors/sn/SneakerBotTutorials cd SneakerBotTutorials pip install -r requirements.txt

依赖见 requirements.txt:Flask(Web 控制台)、selenium(浏览器驱动)、requests、beautifulsoup4。

文件作用
main.py机器人核心:bot类、Driver 管理、线程并发
app.pyFlask Web 控制台:代理测试、启动/跳转浏览器
proxy_tests.py代理配置函数的单元测试
RandomHeaders.py随机 User-Agent,降低指纹特征
testingCookies.py无头浏览器 Cookie 迁移实验
oldBot/早期单线程版本(Part1~Part3),适合对照学习

多线程架构拆解:一个代理一条线程

整个项目的并发核心就一句话——列表推导式批量建线程,先全部 start,再全部 join。main.py 中的startAllDrivers()是代表性实现:

threads = [threading.Thread(target=self.startDriver, args=(proxy,)) for proxy in self.proxyList] for thread in threads: thread.start() for thread in threads: thread.join()

同样的模式在项目中共出现 3 处,分别对应抢鞋流程的 3 个阶段:

  1. 并发启动:startAllDrivers() —— 每个代理一条线程,各自开一个 PhantomJS 无头浏览器并访问目标 URL;
  2. 并发跳转:sendAllToURL() —— 所有已打开的 Driver 同时刷新到同一个发售页,10 路并发抢刷新;
  3. 并发蹲点:grabSS() 在 main.py 中为每个代理开线程,死循环盯住 Splash 页,一旦标题变化就截图、导出 Cookie 并切换到可视化 Firefox 窗口人工接管。

💡 早期的 oldBot/Part3.py 里还有ThreadNumber{}的命名线程写法,对比阅读能直观看到"从单线程轮询"到"全代理并发"的演进过程。

Driver 管理:bot 类如何"记住"每一个浏览器

main.py 中的bot类是整个 Driver 管理的中心,初始化时维护 4 个关键列表:

  • driverList:所有活着的 Selenium 实例,元素为{'driver': driver, 'proxy': proxy}
  • driverInfo:每个 Driver 的完整档案(proxy / driver / url / useragent),供 Web 面板展示;
  • successProxies:成功启动的代理(白名单);
  • failedProxies:启动失败的代理(黑名单),后续测试页会显示"差了几个代理"。

单个 Driver 的生命周期由 startDriver() 完成:

  1. 调用 createHeadlessBrowser() 创建 PhantomJS,通过--proxy=参数把代理注入浏览器;
  2. 访问目标 URL,成功则把 driver 追加进driverListsuccessProxies,并按static/{IP}.png格式截图存档;
  3. 失败(超时/无法访问)则立即close()释放资源,把该代理记入failedProxies,不影响其他线程继续跑。

这种"失败隔离"设计很关键:10 个代理里挂掉 2 个,剩下 8 路并发照常工作。而 app.py 的massTestProxies()还会在开打之前,用线程并发 ping 一遍所有代理,把每个代理的延迟(Ping)和连接时间记录进 templates/index.html 的面板表格。

📌 上图就是SS_FORMAT = "static/{0}.png"自动产出的截图:每个代理 IP 对应一张独立的浏览器信息页(见 main.py 的截图命名规则),10 个代理并发跑完,static 目录下就会多出 10 张同构截图,一眼就能确认哪些 IP 真的跑通了。

代理测试与筛选:先验证,再开打

抢鞋之前,代理质量决定成败。项目提供了三层验证手段:

  • verifyProxy():单代理连通性测试,能访问 Google 即返回True
  • configure_proxy_settings():把 IP/端口/账号密码规范成 requests 可用的代理字典,带鉴权的代理也能接入;
  • getPing():记录每个代理的响应延迟,延迟高的代理在并发刷新时会拖慢整体节奏。

proxy_tests.py 里的单元测试覆盖了三类场景:无鉴权代理、带账号密码代理、空参数返回None,是很好的代理配置参考。

实战:一键启动 10 路并发抢鞋

完整流程只需 3 步:

  1. 启动python app.py 139.59.169.81:8000 103.12.160.61:3128 ...,直接在命令行传 10 个IP:端口,也可以传.csv文件批量导入(见 app.py 入口逻辑);
  2. 启动浏览器:访问http://localhost:8000或 POST 到 /openDriver 路由,bot.startAllDrivers()会并发拉起全部代理浏览器;
  3. 统一跳转:在面板输入发售页地址,POST 到 /goToURL 触发sendAllToURL(),10 个 Driver 同时刷新同一页面。

⚠️ 小贴士:

  • 线程数 = 代理数,并发开浏览器是 CPU/内存大户,低配机器建议先 3~5 个代理练手;
  • 代理格式必须是IP:端口,main.py 支持用-R参数从文件读取;
  • 无头浏览器需要 PhantomJS 支持,Python 2.7 环境下运行(项目原始版本基于 Python 2)。

常见问题 FAQ

Q:10 个线程同时开浏览器,会不会把机器卡死?会。每条线程都要起一个完整的 PhantomJS 进程,建议观察内存占用,必要时减少并发数或分机部署。

Q:代理失效了怎么办?不用重启。failedProxies只记录启动失败项,/botInfo面板会实时显示有效代理与失败数量的差值(proxyDiff),换一份代理文件重跑即可。

Q:抢到鞋之后怎么接管?grabSS() 的设计是:无头浏览器蹲到 Splash 页通过后,自动把 Cookie 迁移到一个可视化 Firefox 窗口,人类接管完成付款。

总结

SneakerBotTutorials 用最朴素的"一代理一线程"模式,把代理并发、Driver 生命周期管理、失败隔离、截图审计四件事串成了一套完整的抢鞋流水线:多线程并发在 main.py 的三处线程池调用里,Driver 档案在bot类的四个列表中,代理筛选在 app.py 的 ping 测试里。读懂这套架构,你不仅能复刻一个抢鞋机器人,还能把它迁移到任何"高并发 + 多 IP 访问"的自动化场景。👟

【免费下载链接】SneakerBotTutorialsOpen Source SneakerBot created as a supplement to my "Creating a Sneaker Bot in Python" Youtube Series项目地址: https://gitcode.com/gh_mirrors/sn/SneakerBotTutorials

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询