如何通过 Docker、Python & 代理安装和使用 FlareSolverr

Cloudflare 在许多爬虫看到页面之前就将其拦截。当普通的 HTTP 客户端不断收到挑战页面而不是真实内容时,FlareSolverr 是人们会选择的工具之一。
本指南面向那些已经了解 抓取基础知识 但从未搭建过 FlareSolverr。你将了解它的作用、如何安装、如何调用它的 API,以及它会在哪些地方遇到问题。
我们还会涉及代理。FlareSolverr 解决了浏览器挑战,但那个浏览器背后的 IP 仍然非常重要。
什么是 FlareSolverr?
FlareSolverr 是一款开源代理服务器,专为绕过 Cloudflare 和 DDoS-Guard 防护而打造。它位于你的爬虫与目标网站之间,并对外提供一个看起来很像普通 HTTP 请求的 REST API。
在底层,它通过 Selenium 使用一个反检测驱动来驱动一个真实的 Chrome 浏览器。这一点很重要,因为 Cloudflare 的检查关注的是浏览器行为,而不仅仅是请求头。
典型的使用场景包括:
- 抓取网站 受 Cloudflare 的托管挑战或 JS 挑战保护
- 获取一个 clearance cookie,以便之后在轻量级 HTTP 客户端中复用
- 自动访问那些会拦截 requests 或 httpx 等普通请求库的网站
温馨提示: FlareSolverr 是一个代理层,而不是一个完整的爬虫框架。你仍然需要编写自己的爬取逻辑。FlareSolverr 只是在挑战被解决之后把 HTML 交给你。
FlareSolverr 的工作原理
一旦看到整个流程展开,就会发现它其实很简单直接。
- 传入请求。 你的脚本会向 FlareSolverr 的本地 API 发送一个带有目标 URL 的 POST 请求。
- 浏览器启动。 FlareSolverr 会打开一个 Chrome 实例(或复用某个活动会话中的实例)。
- Cloudflare 挑战。 浏览器导航到该 URL,并在 Cloudflare 运行检查期间等待。
- 已签发的 cookie。 挑战通过后,Cloudflare 会在浏览器中设置一个通行 cookie。
- 会话处理。 如果你使用了会话,浏览器及其 cookie 会保持存活状态以便复用。
- 返回的 HTML。 FlareSolverr 会返回最终的页面 HTML、请求头、cookie 以及它所使用的 user agent。
最后这一点很重要。如果你在另一个 HTTP 客户端中复用这些 cookie,你需要匹配 FlareSolverr 所报告的用户代理(user agent),否则 Cloudflare 会再次抛出挑战。
什么时候应该使用 FlareSolverr?
FlareSolverr 并不适合每一项抓取任务。它比纯 HTTP 客户端更慢也更重,因为它会为每个请求或会话运行一个完整的浏览器。
| 适合场景 | 不适合 |
| 位于 Cloudflare JavaScript 或托管质询(Managed Challenge)之后的网站 | 完全没有任何机器人防护的站点 |
| 中低量的抓取任务 | 每分钟需要数千次请求的大批量抓取 |
| 获取 Cloudflare 通行 cookie 以便在后续请求中复用 | 受 hCaptcha 或 reCAPTCHA 等高强度 CAPTCHA 保护的网站 |
| 偶尔访问受保护的页面或顽固的 API 端点 | 实时或对延迟敏感的工作流程 |
对于大规模抓取任务,更轻量的方案(轮换代理 再加上一个轻量的 HTTP 客户端,仅在遇到验证挑战的请求时才回退到 FlareSolverr)通常比把所有流量都通过浏览器路由表现更好。
安装 FlareSolverr
Docker 是推荐的安装方式。该镜像已经捆绑了浏览器,因此你可以省去一长串依赖链。
Docker
这会拉取镜像、开放 8191 端口,并在容器崩溃或主机重启时自动重启容器。
Docker Compose
运行 docker compose up -d 到同一个文件夹中来启动它。一旦你添加更多环境变量,就值得使用 Compose,因为它把你的配置保存在一个文件里,而不是一条冗长的 CLI 命令。
验证安装
安装成功后会返回一个包含以下内容的 JSON 对象: 解决方案 字段,其中包含页面 HTML、状态码和 cookie。如果你遇到连接错误,请检查端口 8191 是否确实已映射且未被防火墙拦截。
关键配置选项
| 可变 | 它的作用 |
| LOG_LEVEL | 控制日志记录的详细程度。将其设置为 调试 在排查问题时。 |
| PROXY_URL | 为所有请求设置一个默认代理,除非为单个请求或会话指定了不同的代理。 |
| PROXY_USERNAME / PROXY_PASSWORD | 定义与在以下位置配置的默认代理搭配使用的身份验证凭据 PROXY_URL. |
| TZ | 设置浏览器的时区以及日志中的时间戳。将其与您的代理位置相匹配有助于生成更一致的浏览器指纹。 |
| HEADLESS | 默认以无头模式运行浏览器。仅在本地调试且需要查看浏览器窗口时才将其禁用。 |
| TEST_URL | 指定 FlareSolverr 在启动时检查的 URL,以验证浏览器是否正常工作。如果默认 URL 在你所在地区被屏蔽,请更改它。 |
使用 FlareSolverr API
FlareSolverr 只暴露一个端点, /v1,然后你通过 cmd 请求正文中的字段。
GET 请求
POST 请求
添加一个 postData 字段,格式为 application/x-www-form-urlencoded
Python 示例
响应会返回渲染后的 HTML、Cloudflare 设置的 cookie,以及浏览器使用的确切用户代理字符串。如果你打算用另一个 HTTP 客户端发起后续请求,请把这三者一并保留。
注意: 如果你复用 clearance cookie 时搭配了不匹配的 user agent,Cloudflare 会再次显示验证挑战。务必让该 cookie 与所报告的 user agent 保持配对。
管理会话
每一个不带会话的请求都会启动一个全新的浏览器,破解挑战,然后再丢弃这个浏览器。这样是行得通的,但如果你反复访问同一个网站,就会既慢又浪费。
会话会在多次请求之间保持同一个浏览器实例处于活动状态,因此你只需解决一次挑战即可反复复用。
创建会话
复用会话
销毁会话
使用完会话后务必将其销毁。空闲的浏览器仍会占用内存,同时运行过多会话会拖慢甚至导致主机崩溃。
将代理与 FlareSolverr 配合使用
FlareSolverr 解决的是挑战中的浏览器一侧。它对该浏览器背后的 IP 信誉毫无作用,而 Cloudflare 在决定是否显示挑战时,会极为看重 IP 信誉。
一个有爬虫流量历史的数据中心 IP 无论浏览器表现得多好都会不断遭到挑战。而一个干净的真实用户 IP 被放行的几率要高得多。
| 代理类型 | IP来源 | 最适合 |
| 数据中心 | 托管服务商和云数据中心 | 高速度、低成本,且目标网站几乎没有或完全没有反爬虫防护 |
| 住宅代理 | 真实的家庭互联网连接 | 具有严格机器人检测的网站、受 Cloudflare 保护的站点,以及大规模网页抓取 |
| ISP(互联网服务提供商) (静态住宅) | 托管在专用基础设施上的 ISP 分配 IP | 需要具备住宅级信任度的稳定 IP 地址的长时间运行会话 |
| 移动代理 | 移动运营商网络(4G/5G) | 移动优先的平台、社交媒体自动化,以及信任真实移动用户所共享 IP 的网站 |
你可以为每个请求或每个会话设置代理,使用 代理 字段, 并在 URL 中包含协议方案:
这时就需要一家代理服务商,比如 NodeMaven 能带来实实在在的差别。NodeMaven 提供一个庞大的 3000万+ 住宅 IP 覆盖 190+ 个国家。每个 IP 都会经过实时质量筛选,帮助确保您在抓取会话中获得干净、高信任度的 IP。
对于 FlareSolverr 用户来说,有两个功能尤其实用。 粘性会话 让你可以将同一个 IP 保持长达 24小时,从而可以轻松地在多个请求之间保持一致的身份标识。你还可以按以下方式定向选择代理: 国家/地区、城市或 邮政编码,让你的流量与预期的访客位置相匹配,从而降低因地理位置而被封锁的概率。
常见的 FlareSolverr 错误及修复方法
| 错误 | 可能的原因 | 如何修复 |
| 超时 / 验证挑战未通过 | 该 maxTimeout 值过低,或者 Cloudflare 挑战的耗时比预期更长。 | 增大 maxTimeout 值。检查主机的 CPU 和内存使用情况,确保 FlareSolverr 有足够的资源。 |
| 403 Forbidden | 代理 IP 的信誉不佳,或者网站启用了更严格的反机器人防护。 | 切换到一个干净的住宅代理,并确认你运行的是最新版本的 FlareSolverr。 |
| 503 Service Unavailable | FlareSolverr 容器过载、正在重启,或暂时不可用。 | 减少并发会话的数量,并查看容器日志中的错误。 |
| 浏览器崩溃 | 主机内存不足,或者同时运行的浏览器实例过多。 | 限制并行会话数量,并为容器分配更多的 RAM 或 CPU 资源。 |
| 会话已过期 | 该会话已被删除、已超时,或浏览器进程意外停止。 | 创建一个新会话,并添加重试逻辑,以便从过期会话中自动恢复。 |
| 代理身份验证失败 | 代理用户名或密码不正确,或者该请求不支持当前的代理配置。 | 验证你的代理凭据,如有需要,在创建会话时配置代理,而不是在单个请求上配置。 |
FlareSolverr 的局限性
FlareSolverr 确实非常有用,但我们也有必要坦诚地谈谈它的不足之处。
- CAPTCHAs:FlareSolverr 无法独立解决 hCaptcha、reCAPTCHA 或 Cloudflare Turnstile 等 CAPTCHA。它能检测到 CAPTCHA 提示,但如果没有外部解算器就无法通过,而内置的解算器支持一直不太可靠。
- 浏览器指纹识别:高级反机器人系统关注的远不止 Cloudflare 挑战,而且隐身浏览器也不会永远隐形。
- TLS 指纹识别:有些检测发生在 TLS 握手层面,这超出了 FlareSolverr 所能控制的范围。
- 内存占用:每个活动会话都是一个真实的 Chrome 进程。十个会话就意味着同时运行十个浏览器。
- 可扩展性:由于内存开销,FlareSolverr 无法像基于 HTTP 的轻量级爬虫那样进行扩展。
最佳实践
- 复用会话 而不是在每一个请求上都去破解挑战。
- 轮换 IP 以应对高并发任务,这样就不会有单一地址承担全部流量。
- 使用住宅代理 在 Cloudflare 配置严格的网站上,因为 IP 信誉决定了你被验证挑战的频率。
- 设置真实的请求头 并让 FlareSolverr 报告的 user agent 传递到后续的所有请求中。
- 调优并发数 以匹配主机可用的 RAM。并行浏览器少一些,胜过频繁崩溃。
- 调整超时时间 这取决于目标站点的验证挑战通常有多慢。
- 匹配代理位置 与站点预期的流量相匹配,尤其是对于地理位置敏感的平台。
FlareSolverr 替代方案
| 工具 | 最佳适用场景 |
| FlareSolverr | 你需要一个免费、开源的解决方案来解决 Cloudflare 验证挑战,并且乐于自行管理基础设施。 |
| Playwright | 你希望完全掌控浏览器自动化,并且愿意自行构建隐身和反爬虫逻辑。 |
| Puppeteer | 你在 Node.js 环境中开发,需要直接控制 Chromium 浏览器。 |
| Nodriver | 你更喜欢一个轻量、现代、专为不被检测的浏览器自动化而设计的 Python 库。 |
| ZenRows | 你需要一个托管式抓取 API,帮你处理浏览器渲染、代理和反机器人绕过。 |
| ScrapFly | 你需要一个内置反爬虫处理、浏览器渲染和结构化数据提取的抓取 API。 |
FlareSolverr 在成本上占优,因为它免费且可自托管。ZenRows 和 ScrapFly 等托管服务费用更高,但省去了自行运行浏览器基础设施的维护负担。
结论
FlareSolverr 能很好地处理 Cloudflare 挑战的浏览器端,尤其适用于中低量级的抓取以及对顽固端点的一次性访问。它并非为解决 CAPTCHA 而设计,对于超大批量任务也不是最轻量的选择。
FlareSolverr 背后的 IP 与工具本身同样重要。将它与一个干净的住宅代理池、在需要连续性的场景使用粘性会话、以及合理的并发限制搭配使用,会比在被标记的数据中心 IP 上运行它走得更远。
如果无论你怎么尝试,Cloudflare 的验证挑战都反复出现,那么在断定 FlareSolverr 出了问题之前,先检查一下你代理的信誉。真正的问题通常就藏在那里。



