📝 文章摘要
本文介绍用青龙面板结合 Playwright 自动化实现 QwenPaw Console 每日保活。方案包含登录脚本定期登录 AgentScope 并保存 localStorage,以及保活脚本每日注入 token、访问 /deploy 并点击“打开 QWENPAW”。文章还说明依赖安装、环境变量配置、定时任务设置与截图验证方法。

QwenPaw Console, 青龙, Playwright, 自动化, 保活, 登录脚本, localStorage, accessToken, AgentScope, Chromium, 环境变

原理

QwenPaw Console 长时间不打开会被回收,需要每天点一次"打开 QWENPAW"按钮保活。手动太累,用青龙 + Playwright 自动化完成任务。

两个脚本配合:

  • 登录脚本:每 20 天跑一次,登录 AgentScope 保存 localStorage(含 accessToken)
  • 保活脚本:每天跑一次,注入 localStorage → 打开 /deploy → 自动点击按钮

一、依赖

青龙面板 → 依赖管理 → Python,添加:

PHP
playwright

SSH 进容器装 Chromium:

PHP
docker exec -it qinglong bashpip install playwrightplaywright install chromiumplaywright install-deps

二、环境变量

青龙 → 环境变量:

名称
AGENTSCOPE_EMAIL你的AgentScope登录邮箱
AGENTSCOPE_PASSWORD你的AgentScope密码
AGENTSCOPE_AUTH_FILE/ql/data/scripts/auth/agentscope_auth.json

三、脚本

先建目录:

PHP
docker exec -it qinglong bashmkdir -p /ql/data/scripts/auth

脚本1:agentscope_login.py

青龙 → 脚本管理 → 新建文件 agentscope_login.py

PHP
#!/usr/bin/env python3"""AgentScope 登录刷新 — 每20天执行,保存 localStorage"""import asyncio, json, os, sysfrom playwright.async_api import async_playwrightEMAIL = os.environ.get("AGENTSCOPE_EMAIL", "")PASSWORD = os.environ.get("AGENTSCOPE_PASSWORD", "")AUTH_FILE = os.environ.get("AGENTSCOPE_AUTH_FILE", "/ql/data/scripts/auth/agentscope_auth.json")SCREENSHOT_DIR = os.path.dirname(AUTH_FILE)UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"async def login(): print("[登录] 启动浏览器...") async with async_playwright() as p: browser = await p.chromium.launch(headless=True, args=["--no-sandbox", "--disable-blink-features=AutomationControlled"]) context = await browser.new_context(viewport={"width": 1920, "height": 1080}, locale="zh-CN", user_agent=UA) await context.add_init_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined});") page = await context.new_page() print("[登录] 打开登录页...") await page.goto("https://platform.agentscope.io/login", timeout=30000) await page.wait_for_load_state("networkidle", timeout=15000) await page.wait_for_timeout(5000) await page.fill("#account", EMAIL) await page.fill("#password", PASSWORD) btn = await page.query_selector('button:has-text("登 录")') or await page.query_selector('button:has-text("登录")') if not btn: print("[登录] ✗ 未找到登录按钮") await browser.close() return False await btn.click() await page.wait_for_timeout(5000) if "login" in page.url.lower(): print("[登录] ✗ 仍在登录页") await page.screenshot(path=f"{SCREENSHOT_DIR}/login_failed.png") await browser.close() return False ls_data = await page.evaluate("""() => { const data = {}; for (let i = 0; i < localStorage.length; i++) { data[localStorage.key(i)] = localStorage.getItem(localStorage.key(i)); } return data; }""") os.makedirs(os.path.dirname(AUTH_FILE), exist_ok=True) with open(AUTH_FILE, "w") as f: json.dump(ls_data, f, indent=2) print(f"[登录] ✅ localStorage 已保存 ({len(ls_data)} 个 key)") await page.screenshot(path=f"{SCREENSHOT_DIR}/login_success.png") await browser.close() return Trueif __name__ == "__main__": r = asyncio.run(login()) print(f"\n{'✅ 登录成功' if r else '❌ 登录失败'}") sys.exit(0 if r else 1)

脚本2:agentscope_daily.py

PHP
#!/usr/bin/env python3"""AgentScope QwenPaw 每日保活 — 注入token → 点击按钮 → 验证Console"""import asyncio, json, os, sysfrom playwright.async_api import async_playwrightEMAIL = os.environ.get("AGENTSCOPE_EMAIL", "")PASSWORD = os.environ.get("AGENTSCOPE_PASSWORD", "")AUTH_FILE = os.environ.get("AGENTSCOPE_AUTH_FILE", "/ql/data/scripts/auth/agentscope_auth.json")SCREENSHOT_DIR = os.path.dirname(AUTH_FILE)BASE_URL = "https://platform.agentscope.io"UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"async def relogin(): """token过期时重新登录""" print("[保活] token 过期,重新登录...") from agentscope_login import login return await login()async def daily(): print("[保活] 启动浏览器...") if not os.path.exists(AUTH_FILE): print("[保活] 无 auth 文件,先登录...") return await relogin() async with async_playwright() as p: browser = await p.chromium.launch(headless=True, args=["--no-sandbox", "--disable-blink-features=AutomationControlled"]) context = await browser.new_context(viewport={"width": 1920, "height": 1080}, locale="zh-CN", user_agent=UA) await context.add_init_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined});") page = await context.new_page() # 先访问主页再注入 await page.goto(BASE_URL + "/", timeout=30000) await page.wait_for_timeout(3000) with open(AUTH_FILE, "r") as f: ls_data = json.load(f) for k, v in ls_data.items(): await page.evaluate(f"localStorage.setItem('{k}', '{v}')") print(f"[保活] 注入 {len(ls_data)} 个 key") # 跳转 deploy 页 await page.goto(BASE_URL + "/deploy", timeout=30000) await page.wait_for_load_state("networkidle", timeout=15000) await page.wait_for_timeout(5000) if "login" in page.url.lower(): await browser.close() return await relogin() print(f"[保活] 当前: {page.url}") # 找按钮 btn = await page.query_selector('button:has-text("打开 QWENPAW")') if not btn: btn = await page.query_selector('button:has-text("QwenPaw")') if not btn: btn = await page.query_selector('button:has-text("打开")') if not btn: body = await page.inner_text("body") print(f"[保活] ✗ 未找到按钮,页面: {body[:150]}") await page.screenshot(path=f"{SCREENSHOT_DIR}/daily_no_btn.png") await browser.close() return False print("[保活] 找到按钮,点击...") new_page_promise = context.wait_for_event("page", timeout=15000) await btn.click() try: new_page = await new_page_promise await new_page.wait_for_load_state("networkidle", timeout=20000) await new_page.wait_for_timeout(5000) title = await new_page.title() print(f"[保活] ✅ QwenPaw Console 打开成功!") print(f" URL: {new_page.url}") print(f" 标题: {title}") await new_page.screenshot(path=f"{SCREENSHOT_DIR}/qwenpaw_daily.png") await browser.close() return True except Exception as e: print(f"[保活] ✗ 新标签异常: {e}") await browser.close() return Falseif __name__ == "__main__": r = asyncio.run(daily()) print(f"\n{'✅ 保活成功' if r else '❌ 保活失败'}") sys.exit(0 if r else 1)

四、配定时任务

青龙 → 定时任务 → 新建两条:

名称命令Cron说明
AgentScope 登录刷新task agentscope_login.py0 8 */20 * *每20天8点登录
QwenPaw 每日保活task agentscope_daily.py30 8 * * *每天8:30保活

五、验证

先手动跑一次登录:

PHP
docker exec -it qinglong bashcd /ql/data/scripts && python3 agentscope_login.py

再手动跑一次保活:

PHP
python3 agentscope_daily.py

看到 ✅ QwenPaw Console 打开成功! 就成功了。

截图在 /ql/data/scripts/auth/ 下,有问题可以看截图排查。

本文最后更新于2026年7月11日,若涉及的内容可能已经失效,直接留言反馈补链即可,我们会处理,谢谢
声明:本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,请勿用于任何商业目的与商业用途,如需商用请支持正版!如亲下载后改变其用途与使用方式,与本站无任何关系,本站已经进行告知义务!我们只做安全认证测试如果资源侵犯了您的版权利益,请联系站长邮箱:17606723350@163.com