🛡️ Cloudflare 挑战学习环境

一个用于学习「反检测浏览器 ↔ Cloudflare 挑战」交互机制的 Hugging Face 项目

⚠️ 仅限你自己拥有 / 已授权的站点使用

这是什么

本项目演示如何用真实 Chromium + playwright-stealth 反检测补丁 打开一个页面,观察 Cloudflare 的 JS 挑战(managed challenge)能否在浏览器中自动解除。 你可以通过对比「启用 / 关闭 stealth」来理解反检测补丁到底修补了哪些指纹 (navigator.webdriver、WebGL、字体、时区等)。

⚠️ 关于“完整运行版”与 PRO 限制

本静态站点可免费部署,但真正能跑 Chromium 的“运行版”需要 Hugging Face PRO 订阅。 HF 当前规则:免费账号只能托管 Static Space(纯静态网页),而 Docker / Gradio 等带运行时、 跑在 cpu-basic 上的 Space 需要 PRO。账号未开通 PRO 时,创建会被拒绝(HTTP 402)。

一旦你开通 PRO,把下方完整源码按步骤推上去即可获得可交互的运行版 (输入 URL → 等待挑战执行 → 看状态 / 标题 / 截图)。

📦 完整源码(运行版)

Dockerfile

FROM python:3.11-slim
WORKDIR /app
RUN apt-get update && apt-get install -y --no-install-recommends \
    curl wget gnupg ca-certificates fonts-liberation libnss3 \
    libatk-bridge2.0-0 libgtk-3-0 libgbm1 libasound2 \
    && rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
RUN playwright install --with-deps chromium
COPY . .
EXPOSE 7860
ENV GRADIO_SERVER_PORT=7860
ENV GRADIO_SERVER_NAME=0.0.0.0
CMD ["python", "app.py"]

requirements.txt

gradio==4.44.1
playwright==1.47.0
playwright-stealth==0.1.5

app.py(核心逻辑节选)

from playwright.sync_api import sync_playwright
from playwright_stealth import stealth_sync

def run(url, wait, use_stealth):
    with sync_playwright() as p:
        browser = p.chromium.launch(
            headless=True,
            args=["--disable-blink-features=AutomationControlled",
                  "--no-sandbox", "--disable-dev-shm-usage"],
        )
        ctx = browser.new_context(
            user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                       "AppleWebKit/537.36 (KHTML, like Gecko) "
                       "Chrome/124.0.0.0 Safari/537.36",
            viewport={"width": 1280, "height": 800}, locale="en-US",
        )
        if use_stealth:
            stealth_sync(ctx)   # 修补 webdriver/webgl/fonts 等指纹
        page = ctx.new_page()
        page.goto(url, wait_until="domcontentloaded", timeout=30000)
        time.sleep(wait)       # 等待 CF 的 JS 挑战执行/解除
        # 再读取 title / 正文,判断是否仍在挑战页
        browser.close()

完整 app.py(含 Gradio 界面与 CF 挑战检测)见仓库文件。

🚀 开通 PRO 后的一键部署步骤

  1. 在 huggingface.co/pro 开通 PRO 订阅。
  2. 本地安装并登录 CLI:
    pip install -U "huggingface_hub[cli]" 然后 huggingface-cli login
  3. 克隆本 Space 仓库,把 hf-cf-space/ 里的 4 个文件(Dockerfile / app.py / requirements.txt / README.md)放进仓库根目录。
  4. 提交并推送:
    git add -A && git commit -m "cf lab" && git push
  5. 打开 Space 页面,等待 Docker 构建完成(含 Chromium,约几分钟),即可使用。

💡 对“自有站点”的更优解(推荐先看)

诚实说明:Cloudflare 的 Turnstile 强验证(“Verify you are human”) 单靠 stealth 通常不稳定,往往需要干净住宅 IP 或你自己的验证服务,没有“万能过 CF”的方案。