一个用于学习「反检测浏览器 ↔ Cloudflare 挑战」交互机制的 Hugging Face 项目
⚠️ 仅限你自己拥有 / 已授权的站点使用本项目演示如何用真实 Chromium + playwright-stealth 反检测补丁
打开一个页面,观察 Cloudflare 的 JS 挑战(managed challenge)能否在浏览器中自动解除。
你可以通过对比「启用 / 关闭 stealth」来理解反检测补丁到底修补了哪些指纹
(navigator.webdriver、WebGL、字体、时区等)。
cpu-basic 上的 Space 需要 PRO。账号未开通 PRO 时,创建会被拒绝(HTTP 402)。
一旦你开通 PRO,把下方完整源码按步骤推上去即可获得可交互的运行版 (输入 URL → 等待挑战执行 → 看状态 / 标题 / 截图)。
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"]
gradio==4.44.1 playwright==1.47.0 playwright-stealth==0.1.5
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 挑战检测)见仓库文件。
pip install -U "huggingface_hub[cli]" 然后 huggingface-cli loginhf-cf-space/ 里的 4 个文件(Dockerfile / app.py / requirements.txt / README.md)放进仓库根目录。git add -A && git commit -m "cf lab" && git push诚实说明:Cloudflare 的 Turnstile 强验证(“Verify you are human”) 单靠 stealth 通常不稳定,往往需要干净住宅 IP 或你自己的验证服务,没有“万能过 CF”的方案。