360 Secure SkillHub
360 安全技能中心

Persistent Browser Scraper

通过 Playwright 的 launch_persistent_context 复用 main-identity 浏览器配置,以非无头模式访问 YouTube、GitHub、HuggingFace、Reddit、Kaggle、X/Twitter 等需要登录态的网站,按站点设置等待时间后提取页面纯文本;每次调用前需清理 SingletonLock,属模板式脚本技能。

ckncg
ckncg
热度 61.34
最近更新 2026-05-18 12:31:19
分类:搜索依赖:代码执行 / 联网浏览搜索 / 读写文件应用场景:研究 / 自动化脚本 / 社交媒体 / 数据处理

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add persistent-browser
Metadata
name
persistent-browser
version
1.0.0
description
用 Playwright 持久化上下文(main-identity)抓取需要登录态的网站(YouTube、GitHub、HuggingFace、Reddit、Kaggle、X/Twitter)。当用户要求外网搜索或指定这些网站时自动触发。
user-invocable
true

Persistent Browser Scraper

用 Playwright launch_persistent_context 读写 main-identity 配置文件的技能。

核心原理

user_data_dir = /home/kncao/.openclaw/browser-profiles/main-identity
headless = False(必须,否则 X/Twitter 会返回空白)

每次抓取前先删 SingletonLock:

rm -f /home/kncao/.openclaw/browser-profiles/main-identity/SingletonLock

标准模板

import asyncio
from playwright.async_api import async_playwright

USER_DATA_DIR = '/home/kncao/.openclaw/browser-profiles/main-identity'

async def scrape(url: str, selector: str = 'body', wait_ms: int = 8000):
    async with async_playwright() as p:
        context = await p.chromium.launch_persistent_context(
            user_data_dir=USER_DATA_DIR,
            headless=False,
            args=[
                "--password-store=basic",
                "--no-sandbox",
                "--disable-blink-features=AutomationControlled",
                "--disable-infobars"
            ],
            viewport={'width': 1280, 'height': 800},
            java_script_enabled=True
        )
        try:
            page = await context.new_page()
            await page.goto(url, wait_until='domcontentloaded', timeout=30000)
            await page.wait_for_timeout(wait_ms)  # SPA hydration
            text = await page.inner_text(selector)
            await context.close()
            return text
        except Exception as e:
            await context.close()
            raise e

各网站等待时间

网站 wait_ms 备注
X/Twitter 8000 React SPA,需等 JS 渲染
YouTube 6000 JS 懒加载
GitHub 3000 SSR为主
HuggingFace 5000 React
Reddit 6000 SSR+JS混合
Kaggle 8000 React SPA

触发条件

  • 用户要求「搜索外网」「搜一下」
  • 用户指定以下网站:YouTube、GitHub、HuggingFace、Reddit、Kaggle、X/Twitter
  • 任何需要登录态才能访问的内容抓取

注意事项

  • 必须用 headless=False,X/Twitter 在 headless=True 下会返回空白页面
  • 每次调用前清理 SingletonLock,否则报 ProcessSingleton 错误
  • SPA 页面(如 X)必须等 8 秒让前端 hydrate,否则正文为空
  • 优先提取纯文本,不依赖截图