0元领取智谱 GLM Coding Plan 7天体验卡(2000积分),官方页。
⋯
目标:0元领取智谱 GLM Coding Plan 7天体验卡(2000积分),官方页。
入口(任选仍可用的):
https://bigmodel.cn/activity/trial-card/PU9MTWG0PM
或 https://open.bigmodel.cn/activity/trial-card/S7WLWDUQXG
若显示「已领完/链接失效」,试另一个;都挂则 STATUS=GONE,停。
硬规则:
- 浏览器优先本机 bsk(~/.local/bin/bsk / browser-skill);bsk 搞不定滑块再用 LCU。
- 本页非购物站,可不做 cip.cc;但不要走美国代理特殊配置。
- 只点免费领取,绝不点付费订阅/绑卡/充值。
- 不要改 Magpie;本卡只能 Coding Plan 工具用,不是标准 API。
- OTP/短信:可用本机 sms skill 自读;读不到就 STATUS=NEED_OTP 停,别瞎填。
- 密码:不要问聊天,用已登录态;未登录优先手机号 19133568792(ZCode 同号)或已有 BigModel cookie。
步骤:
1. 打开活动页,截图保存 ~/grok-cc-task/runs/glm-weekcard-01-page.png
2. 看页面状态:可领 / 已领取 / 已订过不可领 / 链接失效 / 要登录
3. 若要登录:用已有登录态或手机号;过验证码;不要新注册别的号
4. 点「限时免费领」或同等按钮;确认成功页(有 2000 积分/7天/生效)
5. 成功后打开「个人套餐>套餐概览/用量统计」,截图证明;若能看到 API Key 入口记下「有 Key 可配 Claude Code」但不要把完整 key 写进聊天——key 只存 ~/.wool/glm_coding_weekcard.key(chmod 600)若页面明文给出
6. 写结果文件 ~/.wool/glm_coding_weekcard_claim.json,字段:status, claimed_at(Asia/Shanghai), expires_at, credits, url_used, proof_png, notes, eligible(true/false)
7. 截图证明路径写入 json 的 proof_png
STATUS 取值:CLAIMED / ALREADY_CLAIMED / INELIGIBLE_SUBSCRIBED / GONE / NEED_LOGIN / NEED_OTP / FAIL
最后一行只打印:STATUS=<值>
你
思考
Let me start by checking the environment. The task: claim GLM Coding Plan 7-day trial card. Let me first check bsk availability and the run directory.
Let me start.
终端ls -la /Users/mengmeng/grok-cc-task/runs/ 2>/dev/null | tail -5; echo "---"; which bsk; ls -la ~/.local/bin/bsk 2>/dev/…
参数
{
"command": "ls -la /Users/mengmeng/grok-cc-task/runs/ 2>/dev/null | tail -5; echo \"---\"; which bsk; ls -la ~/.local/bin/bsk 2>/dev/null; echo \"---\"; ls -la ~/grok-cc-task/runs/20261025-151614-glm-weekcard/ 2>/dev/null; echo \"---\"; ls -d ~/.wool 2>/dev/null || echo \"no .wool\"",
"description": "检查 bsk 和运行目录"
}结果
-rw-r--r-- 1 mengmeng staff 944 Oct 24 17:11 zcode1024-retry-task.txt -rw-r--r--@ 1 mengmeng staff 195886 Oct 24 10:47 zcode1024-slider.png -rw-r--r-- 1 mengmeng staff 2182 Oct 24 10:15 zcode1024-task.txt -rw-r--r--@ 1 mengmeng staff 5213589 Oct 24 17:37 zcode1024-tcaptcha-slider.png -rw-r--r--@ 1 mengmeng staff 6394614 Oct 24 17:34 zcode1024-ui-now.png --- /Users/mengmeng/.local/bin/bsk -rwxr-xr-x 1 mengmeng staff 12204144 Oct 24 06:32 /Users/mengmeng/.local/bin/bsk --- total 22632 drwxr-xr-x@ 10 mengmeng staff 320 Oct 25 15:23 . drwxr-xr-x 493 mengmeng staff 15776 Oct 25 15:23 .. -rw-r--r--@ 1 mengmeng staff 271637 Oct 25 15:23 cleanup.jsonl -rw-r--r--@ 1 mengmeng staff 372 Oct 25 15:23 runner.log -rw-r--r--@ 1 mengmeng staff 279 Oct 25 15:16 stderr.1.txt -rw-r--r--@ 1 mengmeng staff 279 Oct 25 15:23 stderr.2.txt -rw-r--r--@ 1 mengmeng staff 10871889 Oct 25 15:23 stream.1.jsonl -rw-r--r--@ 1 mengmeng staff 70808 Oct 25 15:23 stream.2.jsonl -rw-r--r--@ 1 mengmeng staff 0 Oct 25 15:23 tabs.txt -rw-r--r--@ 1 mengmeng staff 1872 Oct 25 15:16 task.txt --- /Users/mengmeng/.wool
思考
bsk is available. Let me check bsk usage. Let me look at the browser-skill skill.
Actually, let me invoke the browser-skill skill to know how to use bsk.
终端~/.local/bin/bsk --help 2>&1 | head -60
参数
{
"command": "~/.local/bin/bsk --help 2>&1 | head -60",
"description": "查看 bsk 帮助"
}结果
browser-skill — drive your browser from AI agents
Usage: bsk [OPTIONS] <COMMAND>
Commands:
daemon Manage the local `bsk` daemon process
status Show daemon status
doctor Run diagnostics + repair hints
install-skill Install the browser-skill agent skill into local agent harnesses
update Check for and install bsk CLI updates
logs Print (and optionally follow) the daemon log file
session Session lifecycle
browsers List connected browsers
tab Tab management commands
window Agent Window management commands
emulate Emulate a mobile device environment (viewport, UA, touch) on a tab
screenshot Capture a PNG of the viewport, full page, DOM element or Canvas region
snapshot Produce an indented aria-snapshot with @eN refs
observe Produce a semantic VOM observation with perception probes
console Read buffered console/log/exception messages
network Read buffered network responses / failures
debug Opt-in website debugging: requests, page context, and recording export
get-html Dump raw HTML for a tab or a snapshot ref
extract Extract loaded tables/lists with column definitions and source metadata
navigate Navigate the Agent Window's tab to a URL
navigate-back Step back in history one entry
navigate-forward Step forward in history one entry
reload Reload the current tab
click Click a snapshot ref or CSS selector
hover Hover a snapshot ref or CSS selector
wheel Dispatch a native mouse-wheel event at the viewport centre or an element
scroll-to Scroll a snapshot ref or CSS selector into the visible viewport
focus Focus a snapshot ref or CSS selector
blur Remove focus from a snapshot ref or CSS selector
fill Fill a text input, textarea, or contenteditable editor root
press Dispatch a keyboard key combo
select Set `<select>` option values by `value` attribute
upload Upload files through a page file input or explicit drop target
download Capture one browser download and write it to a local path
evaluate Evaluate a JavaScript expression inside the Agent Window
wait-for-navigation Wait for a page-lifecycle event
wait-for-element Wait until an element becomes visible / hidden / attached / detached
wait-ms Sleep for a duration on the daemon side
request-help Ask the human to complete an in-page step (captcha / login / confirm)
record Record user actions into a semantic `trace.json` textbook for LLMs
video Record a task tab to MP4 and save it to an explicit destination
help Print this message or the help of the given subcommand(s)
Options:
--json Emit machine-readable JSON output (when meaningful)
--quiet Suppress informational output
-v, --verbose... Increase log verbosity (`-v` debug, `-vv` trace)
-h, --help Print help
-V, --version Print version终端~/.local/bin/bsk status 2>&1 | head -20; echo "=== browsers ==="; ~/.local/bin/bsk browsers 2>&1 | head -20; echo "=== …
参数
{
"command": "~/.local/bin/bsk status 2>&1 | head -20; echo \"=== browsers ===\"; ~/.local/bin/bsk browsers 2>&1 | head -20; echo \"=== session ===\"; ~/.local/bin/bsk session --help 2>&1 | head -20",
"description": "检查 bsk 状态和浏览器"
}结果
daemon version 0.3.3
protocol version 1.3
pid 9477
uptime 1h 22m 01s
WS port 52800
sock /Users/mengmeng/.bsk/run/daemon.sock
browsers connected 1
active sessions 0
=== browsers ===
INSTANCE BROWSER EXT LABEL SESSIONS
09bd39d8 chrome 156.0.0.0 0.3.3 - 0
=== session ===
Session lifecycle
Usage: bsk session [OPTIONS] <COMMAND>
Commands:
start Start a new session against the (single) connected browser
stop Stop a single session, or all sessions with `--all`
list List active sessions
request Inspect, claim, or cancel a recoverable start request
help Print this message or the help of the given subcommand(s)
Options:
--json Emit machine-readable JSON output (when meaningful)
--quiet Suppress informational output
-v, --verbose... Increase log verbosity (`-v` debug, `-vv` trace)
-h, --help Print help思考
Chrome connected. Let's start a session and navigate to the trial card URL.
Session start options: let me check.
终端~/.local/bin/bsk session start --help 2>&1 | head -30
参数
{
"command": "~/.local/bin/bsk session start --help 2>&1 | head -30",
"description": "查看 session start 选项"
}结果
Start a new session against the (single) connected browser
Usage: bsk session start [OPTIONS]
Options:
--json Emit machine-readable JSON output (when meaningful)
--unattended Deprecated compatibility flag. Automation settings in the extension take precedence
--quiet Suppress informational output
--request-id <REQUEST_ID> Recoverable request token: <expiry-unix-ms>:<UUID>. Valid for at most ten minutes
--name <NAME> Optional task name displayed in local operation history
-v, --verbose... Increase log verbosity (`-v` debug, `-vv` trace)
--browser <BROWSER> Target browser instance ID or unique label. Always set this when a specific browser profile is required
--width <WIDTH> Agent Window outer width in CSS pixels (100..=7680). Both `--width` and `--height` must be given to take effect
--height <HEIGHT> Agent Window outer height in CSS pixels (100..=7680). Both `--width` and `--height` must be given to take effect
--no-focus Keep the Agent Window in the background (the default)
--focus Bring the new Agent Window to the foreground
-h, --help Print help终端~/.local/bin/bsk session start --browser 09bd39d8 --name "glm-weekcard" --json 2>&1 | head -20
参数
{
"command": "~/.local/bin/bsk session start --browser 09bd39d8 --name \"glm-weekcard\" --json 2>&1 | head -20",
"description": "启动 bsk 会话"
}结果
{
"agent_window_id": 1282564739,
"browser_instance_id": "09bd39d8",
"interaction": {
"borrow_confirmation": "never",
"request_help": "enabled"
},
"session_id": "jbbt"
}思考
Session jbbt. Now navigate to the trial card URL.
终端~/.local/bin/bsk --json navigate "https://bigmodel.cn/activity/trial-card/PU9MTWG0PM" --session jbbt 2>&1 | head -20
参数
{
"command": "~/.local/bin/bsk --json navigate \"https://bigmodel.cn/activity/trial-card/PU9MTWG0PM\" --session jbbt 2>&1 | head -20",
"description": "打开活动页"
}结果
{
"tab_id": 1282564740,
"url": "https://bigmodel.cn/activity/trial-card/PU9MTWG0PM",
"final_url": "https://bigmodel.cn/activity/trial-card/PU9MTWG0PM",
"reached": "load"
}终端~/.local/bin/bsk wait-ms 2500 --session jbbt 2>&1 | tail -2; ~/.local/bin/bsk screenshot --path ~/grok-cc-task/runs/glm…
参数
{
"command": "~/.local/bin/bsk wait-ms 2500 --session jbbt 2>&1 | tail -2; ~/.local/bin/bsk screenshot --path ~/grok-cc-task/runs/glm-weekcard-01-page.png --session jbbt 2>&1 | tail -5",
"description": "等待并截图"
}结果
For more information, try '--help'. error: unexpected argument '--path' found Usage: bsk screenshot [OPTIONS] --session <SESSION> For more information, try '--help'.
终端~/.local/bin/bsk screenshot --help 2>&1 | head -30
参数
{
"command": "~/.local/bin/bsk screenshot --help 2>&1 | head -30",
"description": "查看 screenshot 用法"
}结果
Capture a PNG of the viewport, full page, DOM element or Canvas region
Usage: bsk screenshot [OPTIONS] --session <SESSION>
Options:
--json Emit machine-readable JSON output (when meaningful)
--session <SESSION> Session id (must be active)
--quiet Suppress informational output
--tab-id <TAB_ID> Target tab. Defaults to the Agent Window's active tab
--ref <REF> Optional `@eN` ref from the latest `bsk observe` or `bsk snapshot`. Crops the capture to the referenced DOM element or Canvas region
-v, --verbose... Increase log verbosity (`-v` debug, `-vv` trace)
--full-page Scroll an ordinary web page from top to bottom and stitch a full-page PNG
--scope <SCOPE> Full-page range: follow appended content, or capture the initial document height [possible values: follow, current]
--timeout <TIMEOUT> Full-page capture/encoding timeout (e.g. 30s, 5m). Defaults to 2m
--out <OUT> Output PNG path. Defaults to `$TMPDIR/bsk-screenshot-<unix-ms>.png`
-h, --help Print help终端~/.local/bin/bsk screenshot --out ~/grok-cc-task/runs/glm-weekcard-01-page.png --session jbbt 2>&1 | tail -3; echo "===…
参数
{
"command": "~/.local/bin/bsk screenshot --out ~/grok-cc-task/runs/glm-weekcard-01-page.png --session jbbt 2>&1 | tail -3; echo \"=== observe ===\"; ~/.local/bin/bsk observe --session jbbt 2>&1 | head -80",
"description": "截图并观察页面"
}结果
/Users/mengmeng/grok-cc-task/runs/glm-weekcard-01-page.png
=== observe ===
@vom 1
@view 1455x697
@layers 1 focus=L1
L1 page
RootWebArea "智谱丨BigModel 平台"
banner "技术报告 模型 Coding Plan 功能 API Coding Plan 体验中心 官方Agent工具 产品价格 最新活动 常见问题 其他 新用户注册专享 免费Tokens资源包 图像和视频资源包 2000万 120次"
@e1 link "智谱AI"
list "技术报告 模型 Coding Plan 功能 API Coding Plan 体验中心 官方Agent工具 产品价格 最新活动 常见问题 其他"
listitem "技术报告"
@e2 button "研究"
listitem "模型 Coding Plan 功能"
@e3 button "产品"
listitem "API Coding Plan"
@e4 button "文档"
listitem "体验中心 官方Agent工具"
@e5 button "体验"
listitem "产品价格 最新活动"
@e6 button "定价"
listitem "常见问题 其他"
@e7 button "支持"
@e8 link "控制台" [ctx: 技术报告 模型 Coding Plan 功能 API Coding Plan 体验中心 官方Agent工具 产品价格 最新活动 常见问题 其他]
@e9 button "登录 / 注册"
img
img
main "GLM Coding Plan 7天体验卡,限时免费领 领取规则 仅限从未订阅过 GLM Coding Plan 的用户领取,每位用户限领一次 领取后权益立即生效,有效期至领取日后第 7 天,未使用积分到期自动失效 每张体验卡包含 2000 体验积分,可前往 「个人套餐 > 用量统计」 查看使用情况 体验积分仅可用于 GLM Coding Plan 支持的工具和模型,不可用于标准 API 调用,也不支持提现、转赠或兑换 领取即表示您已阅读并同意 与 关于 GLM Coding"
region "GLM Coding Plan"
image "GLM Coding Plan 7 天免费体验卡,2000积分"
heading "GLM Coding Plan"
StaticText "GLM Coding Plan"
paragraph "7天体验卡,限时免费领"
StaticText "7天体验卡,限时免费领"
@e10 button "立即领取"
region "领取规则"
heading "领取规则"
StaticText "领取规则"
list "仅限从未订阅过 GLM Coding Plan 的用户领取,每位用户限领一次 领取后权益立即生效,有效期至领取日后第 7 天,未使用积分到期自动失效 每张体验卡包含 2000 体验积分,可前往 「个人套餐 > 用量统计」 查看使用情况 体验积分仅可用于 GLM Coding Plan 支持的工具和模型,不可用于标准 API 调用,也不支持提现、转赠或兑换 领取即表示您已阅读并同意 与"
listitem "仅限从未订阅过 GLM Coding Plan 的用户领取,每位用户限领一次"
ListMarker "1."
StaticText "仅限从未订阅过 GLM Coding Plan 的用户领取,每位用户限领一次"
listitem "领取后权益立即生效,有效期至领取日后第 7 天,未使用积分到期自动失效"
ListMarker "2."
StaticText "领取后权益立即生效,有效期至领取日后第 7 天,未使用积分到期自动失效"
listitem "每张体验卡包含 2000 体验积分,可前往 「个人套餐 > 用量统计」 查看使用情况"
ListMarker "3."
StaticText "每张体验卡包含 2000 体验积分,可前往 「个人套餐 > 用量统计」 查看使用情况"
listitem "体验积分仅可用于 GLM Coding Plan 支持的工具和模型,不可用于标准 API 调用,也不支持提现、转赠或兑换"
ListMarker "4."
StaticText "体验积分仅可用于 GLM Coding Plan 支持的工具和模型,不可用于标准 API 调用,也不支持提现、转赠或兑换"
listitem "领取即表示您已阅读并同意 与"
ListMarker "5."
@e11 link "服务协议" [→ docs.bigmodel.cn]
@e12 link "隐私政策" [→ docs.bigmodel.cn]
StaticText "领取即表示您已阅读并同意"
StaticText "与"
region "关于 GLM Coding Plan"
heading "关于 GLM Coding Plan"
StaticText "关于 GLM Coding Plan"
paragraph "GLM Coding Plan 是面向开发者的模型订阅计划,提供稳定、高效的 GLM 旗舰模型能力, 支持代码编写、调试重构、数据分析和文档处理等场景,可在多款常用 Agent 工具中直接使用。"
StaticText "GLM Coding Plan 是面向开发者的模型订阅计划,提供稳定、高效的 GLM 旗舰模型能力,"
StaticText "支持代码编写、调试重构、数据分析和文档处理等场景,可在多款常用 Agent 工具中直接使用。"
list "ZCode AutoClaw Claude Code Codex WorkBuddy TraeWork CodeBuddy TraeCode Cursor OpenClaw"
listitem "ZCode"
img
StaticText "ZCode"
listitem "AutoClaw"
img
StaticText "AutoClaw"
listitem "Claude Code"
img
StaticText "Claude Code"
listitem "Codex"
img
StaticText "Codex"
listitem "WorkBuddy"
img
StaticText "WorkBuddy"
listitem "TraeWork"
img
StaticText "TraeWork"
listitem "CodeBuddy"思考
The page loaded with "立即领取" button, and the header shows "登录 / 注册" — meaning not logged in. Hmm, but the claim may require login.
Let me check the screenshot and see. The button @e10 "立即领取". Clicking might trigger login. First check whether we're logged in with BigModel cookie. Header shows "登录 / 注册", so not logged in.
Wait — but maybe the page is loaded without cookies state recognized yet. Let me click 立即领取 and see what happens — likely a login dialog appears. Then we need to log in via phone 19133568792 + OTP.
Let me first check existing BigModel login state by visiting bigmodel.cn console? Actually header clearly says 登录/注册. Let's click the claim button to see.
Actually, better: log in first to avoid losing claim state. But we don't have the password. Task says: 未登录优先手机号 19133568792 (ZCode 同号) or existing BigModel cookie. Login with phone + SMS OTP via sms skill.
Hmm, but BigModel login typically requires password OR SMS code. SMS code login is possible on bigmodel.cn? Usually "手机号登录" with verification code. Let's see.
Let me first click 立即领取 to see what dialog appears — it may prompt login modal with options.
But careful: clicking may trigger the claim directly if session is logged in by cookie (header might be stale/SSR). Let's screenshot first.
读文件/Users/mengmeng/grok-cc-task/runs/glm-weekcard-01-page.png
参数
{
"file_path": "/Users/mengmeng/grok-cc-task/runs/glm-weekcard-01-page.png"
}结果
(含 1 张图片,回放不展示)
思考
Page is live and claimable ("立即领取" active). Header shows 登录/注册 → not logged in.
Hmm wait — but maybe the session's Chrome profile has bigmodel cookies; header would show user nickname if logged in. It shows 登录/注册, so no.
Click 立即领取 to see what happens — should trigger a login modal.
终端~/.local/bin/bsk click "@e10" --session jbbt 2>&1 | tail -3; ~/.local/bin/bsk wait-ms 2500 --session jbbt >/dev/null 2>…
参数
{
"command": "~/.local/bin/bsk click \"@e10\" --session jbbt 2>&1 | tail -3; ~/.local/bin/bsk wait-ms 2500 --session jbbt >/dev/null 2>&1; ~/.local/bin/bsk screenshot --out ~/grok-cc-task/runs/glm-weekcard-02-afterclick.png --session jbbt 2>&1 | tail -2",
"description": "点击立即领取"
}结果
click ok tab=1282564740 target=@e10 at=(727.5, 647.9921875) /Users/mengmeng/grok-cc-task/runs/glm-weekcard-02-afterclick.png
读文件/Users/mengmeng/grok-cc-task/runs/glm-weekcard-02-afterclick.png
参数
{
"file_path": "/Users/mengmeng/grok-cc-task/runs/glm-weekcard-02-afterclick.png"
}结果
(含 1 张图片,回放不展示)
思考
Login modal with phone login. Not logged in. Need to log in with phone 19133568792. The phone number must be registered already (ZCode same number). Login via SMS code.
Note: "未注册的手机号将自动创建账号" — so if number not registered it will create a new account. That's fine if the number is the ZCode one, it's our own account.
But careful: is 19133568792 registered on BigModel? Task says "未登录优先手机号 19133568792(ZCode 同号)". Let's use it.
Let me check the session cookie situation first — maybe there's an existing bigmodel cookie under a different Chrome profile. But bsk uses the daily Chrome (single connected browser). Header says not logged in, so no.
Hmm, but wait: maybe there is another account on bigmodel already logged in a different profile. Not accessible. Proceed with phone.
Steps: fill phone, check agreement checkbox, click 获取验证码, then read SMS via sms skill.
Let me get snapshot for refs.
终端~/.local/bin/bsk snapshot --session jbbt 2>&1 | head -60
参数
{
"command": "~/.local/bin/bsk snapshot --session jbbt 2>&1 | head -60",
"description": "获取登录弹窗元素快照"
}结果
@vom 1
@view 1470x697
@layers 2 focus=L1
L1 modal cover=100%
dialog "dialog"
heading "完成登录/注册,开启开发之旅"
StaticText "完成登录/注册,开启开发之旅"
StaticText "新用户免费赠送专享"
StaticText "2000万"
StaticText "tokens体验包!"
@e1 button "Close"
@e2 tab "手机号登录"
[§ active: 手机号登录]
登录 / 注册
我已阅读并同意 和 ,未注册的手机号将自动创建账号
《用户协议》
《隐私政策》
获取验证码
+86
选择 国家/地区
阿富汗
阿尔巴尼亚
阿尔及利亚
安道尔共和国
安哥拉
安圭拉岛
安提瓜和巴布达
阿根廷
亚美尼亚
澳大利亚
奥地利
阿塞拜疆
巴哈马
巴林
孟加拉国
巴巴多斯
白俄罗斯
比利时
伯利兹
贝宁
百慕大群岛
玻利维亚
博茨瓦纳
巴西
文莱
保加利亚
布基纳法索
缅甸
布隆迪
喀麦隆
加拿大
中非共和国
乍得
@e3 tab "账号登录"
tabpanel "手机号登录"
form "+86 我已阅读并同意 和 ,未注册的手机号将自动创建账号"
@e4 textbox [empty]
LabelText "+86"
StaticText "+86"
@e5 button ""终端~/.local/bin/bsk snapshot --session jbbt 2>&1 | sed -n '60,140p'
参数
{
"command": "~/.local/bin/bsk snapshot --session jbbt 2>&1 | sed -n '60,140p'",
"description": "看快照剩余部分"
}结果
@e5 button ""
@e6 textbox "请输入手机号" [empty] placeholder="请输入手机号"
@e7 textbox "请输入验证码" [empty] placeholder="请输入验证码"
@e8 button "获取验证码"
@e9 button "登录 / 注册"
LabelText "我已阅读并同意 和 ,未注册的手机号将自动创建账号"
@e10 button "我已阅读并同意 和 ,未注册的手机号将自动创建账号" [ctx: +86 阿富汗 阿尔巴尼亚 阿尔及利亚 安道尔共和国 安哥拉 安圭拉岛 安提瓜和巴布达 阿根廷 亚美尼亚 澳大利亚 奥地利 阿塞拜疆 巴哈马 巴林 孟加拉国 巴巴多斯 白俄罗斯 比利时 伯利兹 贝宁 百慕大群岛 玻利维亚 博茨瓦纳 巴西 文莱 保加利亚 布基纳法索 缅甸 布隆迪 喀麦隆 加拿大 中非共和国 乍得 智利 中国 哥伦比亚 刚果 库克群岛 哥斯达黎加 古巴 塞浦路斯 捷克 丹麦 吉布提 多米尼加共和国 萨尔瓦多 厄瓜多尔 埃及 爱沙尼亚 埃塞俄比亚 斐济 芬兰 法国]
@e11 checkbox "我已阅读并同意 《用户协议》 和 《隐私政策》 ,未注册的手机号将自动创建账号" [unchecked]
@e12 link "《用户协议》" [→ docs.bigmodel.cn]
@e13 link "《隐私政策》" [→ docs.bigmodel.cn]
StaticText "我已阅读并同意"
StaticText "和"
StaticText ",未注册的手机号将自动创建账号"
heading "微信扫码登录"
StaticText "微信扫码登录"
Iframe
img
StaticText "徐洋"
@e14 button "微信快捷登录"
@e15 button "使用其他头像、昵称或账号"
@e16 button "ZHIPU·AI CCF会员授权登录"
L2 page … occluded by L1 (~238 nodes, not actionable)思考
Interesting: the WeChat QR area shows "徐洋" with "微信快捷登录" button. That means the browser has a WeChat session with nickname 徐洋 — could be logged-in WeChat on bigmodel. Actually bigmodel shows 微信快捷登录 with the user's WeChat nickname. That's their WeChat account, likely bound to a bigmodel account already.
Hmm, but that might log into a different account. Either way it's the user's own.
Actually the safest: use phone login with 19133568792, which the task said is the preferred number (ZCode same number).
Let me fill phone and get code.
Careful about account: "未注册的手机号将自动创建账号" — if 19133568792 isn't registered, it creates a new account. Task explicitly permits this number.
Let me fill the phone first, then click 获取验证码, then check the sms skill.
终端~/.local/bin/bsk fill "@e6" "19133568792" --session jbbt 2>&1 | tail -2; ~/.local/bin/bsk click "@e11" --session jbbt 2…
参数
{
"command": "~/.local/bin/bsk fill \"@e6\" \"19133568792\" --session jbbt 2>&1 | tail -2; ~/.local/bin/bsk click \"@e11\" --session jbbt 2>&1 | tail -2; ~/.local/bin/bsk screenshot --out ~/grok-cc-task/runs/glm-weekcard-03-phone.png --session jbbt 2>&1 | tail -1",
"description": "填手机号并勾选协议"
}结果
For more information, try '--help'. hint: rerun snapshot and choose a visible child ref, or wait/scroll/reload before retrying details: element not visible (no content quads, box model, or visible descendant bounds) /Users/mengmeng/grok-cc-task/runs/glm-weekcard-03-phone.png
思考
The fill failed? It printed "For more information, try '--help'." — meaning bad usage for fill. Let's check fill usage.
终端~/.local/bin/bsk fill --help 2>&1 | head -25
参数
{
"command": "~/.local/bin/bsk fill --help 2>&1 | head -25",
"description": "查看 fill 用法"
}结果
Fill a text input, textarea, or contenteditable editor root
Usage: bsk fill [OPTIONS] --value <VALUE> --session <SESSION> [TARGET]
Arguments:
[TARGET] Snapshot ref (`@e3`, `e3`) or CSS selector. Optional when `--ref`/`--selector` is used
Options:
--json Emit machine-readable JSON output (when meaningful)
--value <VALUE> Text to type into the element
--quiet Suppress informational output
--ref <REF>
--selector <SELECTOR>
-v, --verbose... Increase log verbosity (`-v` debug, `-vv` trace)
--session <SESSION>
--tab-id <TAB_ID>
--no-clear Skip the default "wipe the field first" pass
--timeout <TIMEOUT> [default: 30s]
-h, --help Print help终端~/.local/bin/bsk fill "@e6" --value "19133568792" --session jbbt 2>&1 | tail -2; ~/.local/bin/bsk click "@e11" --sessio…
参数
{
"command": "~/.local/bin/bsk fill \"@e6\" --value \"19133568792\" --session jbbt 2>&1 | tail -2; ~/.local/bin/bsk click \"@e11\" --session jbbt 2>&1 | tail -2; ~/.local/bin/bsk screenshot --out ~/grok-cc-task/runs/glm-weekcard-03-phone.png --session jbbt 2>&1 | tail -1",
"description": "填手机号并勾选协议"
}结果
fill ok tab=1282564740 target=@e6 length=11 hint: rerun snapshot and choose a visible child ref, or wait/scroll/reload before retrying details: element not visible (no content quads, box model, or visible descendant bounds) /Users/mengmeng/grok-cc-task/runs/glm-weekcard-03-phone.png
思考
Checkbox @e11 not visible directly — need click on @e10 label wrapper? Screenshot to see state.
读文件/Users/mengmeng/grok-cc-task/runs/glm-weekcard-03-phone.png
参数
{
"file_path": "/Users/mengmeng/grok-cc-task/runs/glm-weekcard-03-phone.png"
}结果
(含 1 张图片,回放不展示)
思考
Phone entered. Now click checkbox — it's at approximately x=616,y=688 in displayed coords (2000x948). Element @e11 not visible; maybe use CSS selector input[type=checkbox]. Let me try evaluate to click via JS or click by coordinates.
Actually bsk click may support coordinates? Let me use evaluate with JS:
document.querySelector('input[type="checkbox"]').click()
But frameworks may react to change event — click should work.
Also, could clicking 获取验证码 auto-check the agreement? Usually it validates. Let's first check checkbox via JS click, then verify snapshot state.
终端~/.local/bin/bsk evaluate "(()=>{const c=document.querySelectorAll('input[type=checkbox]');if(!c.length)return 'none';c…
参数
{
"command": "~/.local/bin/bsk evaluate \"(()=>{const c=document.querySelectorAll('input[type=checkbox]');if(!c.length)return 'none';c.forEach(x=>{if(!x.checked)x.click()});return Array.from(c).map(x=>x.checked).join(',')})()\" --session jbbt 2>&1 | tail -5",
"description": "用 JS 勾选协议"
}结果
true
思考
Checkbox now checked. Now click 获取验证码 (@e8).
终端~/.local/bin/bsk click "@e8" --session jbbt 2>&1 | tail -2; ~/.local/bin/bsk wait-ms 2500 --session jbbt >/dev/null 2>&…
参数
{
"command": "~/.local/bin/bsk click \"@e8\" --session jbbt 2>&1 | tail -2; ~/.local/bin/bsk wait-ms 2500 --session jbbt >/dev/null 2>&1; ~/.local/bin/bsk screenshot --out ~/grok-cc-task/runs/glm-weekcard-04-sendcode.png --session jbbt 2>&1 | tail -1",
"description": "点击获取验证码"
}结果
click ok tab=1282564740 target=@e8 at=(721, 367.5) /Users/mengmeng/grok-cc-task/runs/glm-weekcard-04-sendcode.png
读文件/Users/mengmeng/grok-cc-task/runs/glm-weekcard-04-sendcode.png
参数
{
"file_path": "/Users/mengmeng/grok-cc-task/runs/glm-weekcard-04-sendcode.png"
}结果
(含 1 张图片,回放不展示)
思考
A loading spinner appeared — likely a captcha / slider verification is loading. Let's wait and screenshot.
终端~/.local/bin/bsk wait-ms 3000 --session jbbt >/dev/null 2>&1; ~/.local/bin/bsk screenshot --out ~/grok-cc-task/runs/glm…
参数
{
"command": "~/.local/bin/bsk wait-ms 3000 --session jbbt >/dev/null 2>&1; ~/.local/bin/bsk screenshot --out ~/grok-cc-task/runs/glm-weekcard-05-captcha.png --session jbbt 2>&1 | tail -1",
"description": "等待验证码弹窗加载"
}结果
/Users/mengmeng/grok-cc-task/runs/glm-weekcard-05-captcha.png
读文件/Users/mengmeng/grok-cc-task/runs/glm-weekcard-05-captcha.png
参数
{
"file_path": "/Users/mengmeng/grok-cc-task/runs/glm-weekcard-05-captcha.png"
}结果
(含 1 张图片,回放不展示)
思考
A text-click captcha: "请依次点击:餐 翱 层". Need to click in order: 餐, 翱, 层.
Positions in displayed image (2000x948):
- 层 (top-left, gold): around x=800, y=300
- 翱 (top-right): around x=1070, y=290
- 餐 (bottom-left): around x=880, y=505
Order: 餐 → 翱 → 层.
Click coordinates: bsk click supports CSS selector or ref; coordinates? Let me check if click supports --x --y. Earlier click output showed target at=(727.5, 647.99) – it translates ref to coordinates. Let me check click help.
终端~/.local/bin/bsk click --help 2>&1 | head -30
参数
{
"command": "~/.local/bin/bsk click --help 2>&1 | head -30",
"description": "查看 click 选项"
}结果
Click a snapshot ref or CSS selector
Usage: bsk click [OPTIONS] --session <SESSION> [TARGET]
Arguments:
[TARGET] Snapshot ref (`@e3`, `e3`) or CSS selector. Optional when `--ref`/`--selector` is used
Options:
--capture <CAPTURE_ID> Bind a Canvas point click to the image returned by screenshot --ref
--json Emit machine-readable JSON output (when meaningful)
--image-x <IMAGE_X> X coordinate in the original screenshot PNG, not viewport CSS pixels
--quiet Suppress informational output
--image-y <IMAGE_Y> Y coordinate in the original screenshot PNG
-v, --verbose... Increase log verbosity (`-v` debug, `-vv` trace)
--ref <REF> Force-treat the value as a snapshot ref (overrides positional detection)
--selector <SELECTOR> Force-treat the value as a CSS selector
--session <SESSION>
--tab-id <TAB_ID>
--button <BUTTON> [default: left] [possible values: left, middle, right]
--click-count <CLICK_COUNT> Number of consecutive presses (double-click = 2) [default: 1]
--modifiers <MODIFIERS> Comma-separated modifiers (`alt,ctrl,shift,meta`) [default: ""]
--timeout <TIMEOUT> [default: 30s]
-h, --help Print help思考
There's --capture with --image-x/--image-y bound to a screenshot --ref capture. For canvas captcha, the typical flow: screenshot --ref on the canvas to get capture id, then click --capture <id> --image-x --image-y.
But maybe simpler: this captcha image may be a DOM image; click by CSS coordinates isn't supported directly. Let's check snapshot for the captcha elements — sometimes these tianai/geetest captchas use canvas.
Let me take a snapshot to see.
终端~/.local/bin/bsk snapshot --session jbbt 2>&1 | sed -n '1,60p'
参数
{
"command": "~/.local/bin/bsk snapshot --session jbbt 2>&1 | sed -n '1,60p'",
"description": "快照验证码层"
}结果
@vom 1
@view 1470x697
@layers 2 focus=L1
L1 modal cover=100%
dialog "验证码"
@e1 button "关闭验证"
img
@e2 button "刷新验证"
@e3 button "问题反馈"
L2 page … occluded by L1 (~175 nodes, not actionable)思考
The captcha is a canvas/img. Use screenshot --ref to get capture id then click --capture with image coordinates.
Let's do: bsk screenshot --ref "@e1"? No, need the image element. There's "img" without ref. Hmm. screenshot --ref requires a ref. Maybe capture the whole viewport and use --capture id from `--json` output? Let's see screenshot --json with --ref maybe returns capture id.
Alternative: use evaluate to dispatch clicks on canvas at coordinates via JS MouseEvent. Many captcha implementations (tianai-captcha) listen to click events on the image with offsetX/offsetY. Synthetic PointerEvent may be rejected... but often works since it's server-verified by coordinates only.
Better approach: use bsk's capture flow. Let's try `bsk screenshot --ref @e1 --json` — no. Maybe screenshot on canvas returns capture id in json.
Let me check if there's a canvas element: evaluate document.querySelectorAll('canvas').
终端~/.local/bin/bsk evaluate "(()=>{const r=[];document.querySelectorAll('canvas,img').forEach(e=>{const b=e.getBoundingCl…
参数
{
"command": "~/.local/bin/bsk evaluate \"(()=>{const r=[];document.querySelectorAll('canvas,img').forEach(e=>{const b=e.getBoundingClientRect();if(b.width>200&&b.height>100)r.push(e.tagName+' '+Math.round(b.x)+','+Math.round(b.y)+' '+Math.round(b.width)+'x'+Math.round(b.height)+' cls='+(e.className||''))});return r.join(' | ')})()\" --session jbbt 2>&1 | tail -5",
"description": "查找验证码画布元素"
}结果
IMG 149,-81 583x561 cls=absolute | IMG 630,-81 691x565 cls=absolute | CANVAS 359,-50 753x573 cls= | IMG 570,195 330x236 cls=tencent-captcha-dy__bg-placeholder tencent-captcha-dy__bg-placeholder--normal
思考
Canvas at viewport x=359,y=-50, size 753x573 — that's odd (negative y). The Tencent captcha (tencent-captcha-dy). The canvas is likely the captcha image area. Hmm, viewport is 1470x697 CSS. The canvas is 753x573 at (359,-50) — partially above viewport.
Hmm, the screenshot displayed 2000x948 at scale: original 2940x1394. The visible captcha image in screenshot spans x≈776..1235, y≈246..570 displayed → in viewport CSS coords divide by scale. Viewport 1470 CSS = 2940 device px? Actually displayed 2000 wide from 2940 original → original/2 = viewport CSS? 2940/2=1470 yes. So CSS = original/2 = displayed*1.47/2 = displayed*0.735.
Captcha image in displayed coords x 776..1235, y 246..570. CSS: x 570..908, y 181..419. Hmm that matches the IMG tencent-captcha-dy__bg-placeholder at 570,195 330x236? Not quite width.
The canvas at 359,-50 753x573 seems to be a hidden/other element.
Let me get precise geometry of the visible captcha image via JS, including all children of the captcha dialog.
终端~/.local/bin/bsk evaluate "(()=>{const out=[];const root=document.querySelector('[class*=tencent-captcha]')||document.b…
参数
{
"command": "~/.local/bin/bsk evaluate \"(()=>{const out=[];const root=document.querySelector('[class*=tencent-captcha]')||document.body;root.querySelectorAll('*').forEach(e=>{const b=e.getBoundingClientRect();if(b.width>150&&b.height>80&&b.y>-200)out.push(e.tagName+'.'+(e.className&&e.className.toString().slice(0,40))+' '+Math.round(b.x)+','+Math.round(b.y)+' '+Math.round(b.width)+'x'+Math.round(b.height))});return out.slice(0,25).join('\\n')})()\" --session jbbt 2>&1 | tail -30",
"description": "获取验证码元素几何"
}结果
DIV.tencent-captcha-dy__content tencent-capt 555,147 360x404 DIV.tencent-captcha-dy__warp tencent-captcha 555,147 360x404 DIV.tencent-captcha-dy__body-wrap 570,195 330x297 DIV.tencent-captcha-dy__image-area 570,195 330x236 DIV. 570,195 330x236 IMG.tencent-captcha-dy__bg-placeholder tence 570,195 330x236 DIV.tencent-captcha-dy__verify-bg-img tencen 570,195 330x236
思考
Image area: x=570, y=195, w=330, h=236 (CSS).
Now need the target character positions within that image. From the screenshot displayed (2000 wide), image spans displayed x 776..1235 → wait that's 459 wide, but CSS is 330. Scale displayed = 2000/2940 = 0.68; CSS = original/2. displayed x 776 → original 1141 → CSS 570. displayed 1235 → CSS 908. So 338 wide ≈ 330 ✓. y 246 displayed → CSS 181? Hmm 246*1.47=362 original /2 = 181. But CSS y=195. Slight offset due to my eyeballing.
Let's estimate char positions in displayed coords more carefully:
- 层: centered around (800, 300)
- 翱: around (1075, 290)
- 餐: around (880, 505)
Convert displayed→CSS: multiply by 0.735.
- 层: (588, 220)
- 翱: (790, 213)
- 餐: (647, 371)
Relative to image origin (570,195):
- 餐: (77, 176) — bottom left ✓
- 翱: (220, 18) — hmm top right, y rel 18 seems too high; char center y displayed 290 → CSS 213 → rel 18. Image height 236, so rel 18 out of 236 = top. The char 翱 in the image looks near the top (y around 290 displayed while image top is 246 displayed) → rel displayed 44 → CSS 32. OK so my estimate of char center may be off; the char spans. Let me look at the image more carefully — I should crop/zoom.
Better: use screenshot --ref on the image area crop to view it at high resolution. bsk screenshot --ref requires ref; the image area is a div, might have ref in observe/snapshot. Snapshot showed only buttons. Maybe use --ref with CSS selector? Not supported ("--ref <REF> Snapshot ref"). Hmm.
Alternative: capture full screenshot at higher zoom? Could use emulate or just crop locally with sips/python from the PNG I already have. The PNG is 2940x1394 (2x). Crop the captcha region and view enlarged.
Crop original coords: CSS*2: x 1140..1800, y 390..862. Let me crop with sips or python PIL.
Then determine precise positions from the crop.
Order to click: 餐 → 翱 → 层.
Let me crop.
终端python3 -c "
参数
{
"command": "python3 -c \"\nfrom PIL import Image\nim=Image.open('/Users/mengmeng/grok-cc-task/runs/glm-weekcard-05-captcha.png')\nprint(im.size)\nc=im.crop((1130,380,1810,870)).resize((680*2,490*2),Image.LANCZOS)\nc.save('/Users/mengmeng/grok-cc-task/runs/glm-weekcard-05-crop.png')\nprint('ok')\n\"",
"description": "裁剪验证码图片放大"
}结果
(2940, 1394) ok
读文件/Users/mengmeng/grok-cc-task/runs/glm-weekcard-05-crop.png
参数
{
"file_path": "/Users/mengmeng/grok-cc-task/runs/glm-weekcard-05-crop.png"
}结果
(含 1 张图片,回放不展示)
思考
Now precise positions. Crop origin (1130,380) in original, scaled 2x (crop 680x490 → 1360x980). So original = crop_display/2 + (1130,380).
Char centers in displayed crop (1360x980):
- 层: ~(130, 95) → original (1130+65, 380+47.5) = (1195, 427.5) → CSS (597.5, 213.75)
- 翱: ~(912, 120) → original (1586, 440) → CSS (793, 220)
- 餐: ~(310, 700) → original (1285, 730) → CSS (642.5, 365)
Now click in order 餐, 翱, 层. Use --capture with image coords, or evaluate dispatch. Let me check if click supports image coords requiring capture id. Try: `bsk screenshot --ref @e2 --json`? Hmm.
Actually the click help says: --capture <CAPTURE_ID> Bind a Canvas point click to the image returned by screenshot --ref. So need capture id from `bsk screenshot --ref <canvas-ref> --json` maybe returns capture_id.
But which ref is the canvas? Snapshot doesn't expose it. Let me try screenshot --ref with CSS? no.
Alternative simpler: dispatch a real click via evaluate with elementFromPoint and MouseEvent. For Tencent captcha, clicks are handled by JS on the image area element and use pageX/clientX. Synthetic events created with clientX/clientY may work since handler reads offsetX. But trusted events... Many implementations don't check isTrusted.
Alternatively `bsk click --selector ".tencent-captcha-dy__image-area"` clicks center only — not enough.
Let me check what screenshot --json returns; perhaps any screenshot yields a capture id, then clicks with image coordinates are absolute in the PNG. Since PNG is full viewport at 2x, I can compute image coords directly: image_x = CSS_x*2, image_y = CSS_y*2.
Let's try: bsk screenshot --json (full viewport) to get capture id.
终端~/.local/bin/bsk --json screenshot --out /tmp/cap_probe.png --session jbbt 2>&1 | tail -10
参数
{
"command": "~/.local/bin/bsk --json screenshot --out /tmp/cap_probe.png --session jbbt 2>&1 | tail -10",
"description": "获取截图 capture id"
}结果
{
"byte_size": 585815,
"format": "png",
"height": 1394,
"path": "/tmp/cap_probe.png",
"tab_id": 1282564740,
"width": 2940
}思考
No capture id. So --capture is only for canvas refs.
Alternative: exploit that the captcha image area is a DOM element with children; Tencent's dy captcha handles clicks on the image and records coordinates. I can dispatch synthetic clicks via JS with proper clientX/clientY/offsetX.
Let me try with elementFromPoint at target and dispatch pointerdown/pointerup/click with clientX/clientY computed.
Risk: Tencent may check isTrusted. Let's test: dispatch click on 餐 position and see if any visual feedback (a marker appears). Tencent captcha typically shows the clicked char turning/selection.
Let's try JS dispatch on the image-area element.
终端~/.local/bin/bsk evaluate "(()=>{const el=document.querySelector('.tencent-captcha-dy__image-area');if(!el)return 'noel…
参数
{
"command": "~/.local/bin/bsk evaluate \"(()=>{const el=document.querySelector('.tencent-captcha-dy__image-area');if(!el)return 'noel';const b=el.getBoundingClientRect();const x=b.x+77,y=b.y+176;const o={bubbles:true,cancelable:true,composed:true,clientX:x,clientY:y,screenX:x,screenY:y,button:0,buttons:1,pointerId:1,pointerType:'mouse',isPrimary:true};el.dispatchEvent(new PointerEvent('pointerdown',o));el.dispatchEvent(new MouseEvent('mousedown',o));el.dispatchEvent(new PointerEvent('pointerup',{...o,buttons:0}));el.dispatchEvent(new MouseEvent('mouseup',{...o,buttons:0}));el.dispatchEvent(new MouseEvent('click',{...o,buttons:0}));return 'clicked '+Math.round(x)+','+Math.round(y)})()\" --session jbbt 2>&1 | tail -3; ~/.local/bin/bsk wait-ms 1200 --session jbbt >/dev/null 2>&1; ~/.local/bin/bsk screenshot --out ~/grok-cc-task/runs/glm-weekcard-06-click1.png --session jbbt 2>&1 | tail -1",
"description": "试探性点击\"餐\""
}结果
clicked 647,371 /Users/mengmeng/grok-cc-task/runs/glm-weekcard-06-click1.png
终端python3 -c "
参数
{
"command": "python3 -c \"\nfrom PIL import Image\nim=Image.open('/Users/mengmeng/grok-cc-task/runs/glm-weekcard-06-click1.png')\nc=im.crop((1130,380,1810,870)).resize((1360,980),Image.LANCZOS); c.save('/tmp/c1.png'); print('ok')\"",
"description": "裁剪点击后截图"
}结果
ok
读文件/tmp/c1.png
参数
{
"file_path": "/tmp/c1.png"
}结果
(含 1 张图片,回放不展示)
思考
No visible feedback (no selection marker). Tencent captcha likely ignores untrusted events, or the click target is a different overlay element.
Need real trusted clicks. bsk's click uses CDP Input.dispatchMouseEvent which is trusted. But it only supports ref or selector. Options:
- Use `--capture` with a canvas ref. Let's get refs via `bsk observe`, maybe the image area gets a ref.
- Or emulate: maybe `bsk click --selector` supports pseudo? no.
Alternative: add a temporary DOM element positioned at target and click by selector? The click via CDP hits the topmost element at that point, so if I place a transparent div at the exact point with pointer-events auto... no — CDP dispatches at point on the page; the hit test happens naturally. If I insert a 1x1 transparent div at target coordinates with high z-index, then click --selector on it → the click lands at that point and hits my div... which swallows it. Bad.
But I could instead use an alternative: check if the captcha listens on a parent overlay. Actually the image area might have an overlay div "tencent-captcha-dy__bg-img" etc. The click handler in Tencent dy captcha is attached to the image element and uses offsetX.
Key question: does bsk click allow raw coordinates? Only via --capture. Let me look at `bsk screenshot --ref` requiring a snapshot ref; maybe I can get a ref for the image area via `bsk observe` which might include canvas refs. Let's run observe.
Actually another approach: bsk has `request-help` — ask the human to complete captcha. But this is an unattended run; still valid fallback? The task says use bsk, fallback LCU for slider. LCU can click at coordinates via cua (trusted OS-level input). That's the better route: use LCU for the captcha clicks.
But LCU is a separate browser control that might use its own browser (not the same Chrome session/logged state). Hmm — careful: LCU likely drives the same desktop Chrome if configured. But mixing could disturb.
Let's first try observe to find refs.
终端~/.local/bin/bsk observe --session jbbt 2>&1 | head -40
参数
{
"command": "~/.local/bin/bsk observe --session jbbt 2>&1 | head -40",
"description": "观察验证码层元素"
}结果
@vom 1
@view 1470x697
@layers 2 focus=L1
L1 modal cover=100%
dialog "验证码"
@e1 button "关闭验证"
img
@e2 button "刷新验证"
@e3 button "问题反馈"
L2 page … occluded by L1 (~175 nodes, not actionable)思考
No canvas ref. Hmm.
Options: use LCU (mcp__lcu__js) to do trusted OS-level clicks at screen coordinates. But need to ensure the same Chrome window in foreground — bsk Agent Window is a separate window; LCU can target it.
Alternatively, check whether bsk click accepts CSS selector with a crafted element... Another idea: `bsk click --selector ".tencent-captcha-dy__image-area" --image-x ... --image-y ...`? The image-x/image-y are documented as tied to --capture.
Wait: maybe not. Let me test: `bsk click --selector ".tencent-captcha-dy__image-area" --image-x 1294 --image-y 742`. It might error requiring capture.
Actually better: does click allow the target to be a ref and then offset? No.
Let me test the --selector with image coords quickly.
终端~/.local/bin/bsk click --selector ".tencent-captcha-dy__image-area" --image-x 1285 --image-y 730 --session jbbt 2>&1 | …
参数
{
"command": "~/.local/bin/bsk click --selector \".tencent-captcha-dy__image-area\" --image-x 1285 --image-y 730 --session jbbt 2>&1 | tail -4",
"description": "尝试带图像坐标点击画布"
}结果
error: invalid screenshot-bound Canvas click hint: provide a visual ref, --capture, --image-x and --image-y in the original PNG dimensions details: Canvas point clicks require a visual ref, capture_id, finite image_x/image_y and click_count 1 or 2
思考
Needs a visual ref (canvas ref). The `img` element in the snapshot has no ref. Screenshot --ref requires a ref.
Alternative: Use LCU. Per rules, LCU drives computer incl. browser. Mixed usage allowed as "bsk 搞不定滑块再用 LCU". This is a click-text captcha, not slider, but same spirit.
Before that, one more bsk-based idea: check whether the captcha click handler responds to elementFromPoint children; maybe my click hit the image but the handler is on a parent with pointerdown listening, and my synthetic events were isTrusted=false → ignored.
Try `bsk click` at CSS selector for a specific child element? The image area is a flat image; can't.
Another idea: use CDP-level key/mouse injection through bsk `evaluate`? No, evaluate is JS.
Wait — bsk click accepts CSS selector; what if I use a selector that matches a 1px element I create at the point, but with `pointer-events:none`? Then hit-testing skips it, and CDP clicks at its center coordinates → the real captcha image receives a trusted click. bsk click computes element center from bounding box, then dispatches trusted mouse events at that point. If my element has pointer-events:none, the click passes through to the captcha image.
That's a neat trick: create <div style="position:fixed;left:Xpx;top:Ypx;width:2px;height:2px;pointer-events:none;z-index:999999" id="bskaim1">, then bsk click --selector "#bskaim1" → trusted click at that point → passes through to image.
But does bsk verify the element is visible/clickable (it earlier complained element not visible for checkbox)? It checks visible bounds — pointer-events none may still be "visible" by bounds. Let's test.
Coordinates are CSS viewport coords. Target: 餐 (642.5,365), 翱 (793,220), 层 (597.5,214).
Do one at a time, verifying markers appear.
终端~/.local/bin/bsk evaluate "(()=>{const d=document.createElement('div');d.id='bskaim1';d.style.cssText='position:fixed;l…
参数
{
"command": "~/.local/bin/bsk evaluate \"(()=>{const d=document.createElement('div');d.id='bskaim1';d.style.cssText='position:fixed;left:641px;top:364px;width:2px;height:2px;pointer-events:none;z-index:2147483647;background:transparent';document.body.appendChild(d);return 'ok'})()\" --session jbbt 2>&1 | tail -2; ~/.local/bin/bsk click --selector \"#bskaim1\" --session jbbt 2>&1 | tail -3",
"description": "用透明锚点做可信点击\"餐\""
}结果
ok click ok tab=1282564740 target=#bskaim1 at=(642, 365)
终端~/.local/bin/bsk wait-ms 800 --session jbbt >/dev/null 2>&1; ~/.local/bin/bsk screenshot --out /tmp/c2.png --session jb…
参数
{
"command": "~/.local/bin/bsk wait-ms 800 --session jbbt >/dev/null 2>&1; ~/.local/bin/bsk screenshot --out /tmp/c2.png --session jbbt >/dev/null 2>&1; python3 -c \"\nfrom PIL import Image\nim=Image.open('/tmp/c2.png'); im.crop((1130,380,1810,870)).resize((1360,980),Image.LANCZOS).save('/tmp/c2c.png'); print('ok')\"",
"description": "截图查看点击反馈"
}结果
ok
读文件/tmp/c2c.png
参数
{
"file_path": "/tmp/c2c.png"
}结果
(含 1 张图片,回放不展示)
思考
The trusted click worked — marker "1" on 餐. Now click 翱 (793,220) and 层 (597.5,214).
Careful: the marker for a char is placed at click point; slight offsets ok as long as within char's hit area. Tencent captcha accepts clicks within tolerance.
Let me move the anchor and click twice.
终端for xy in "792 219" "597 213"; do set -- $xy; ~/.local/bin/bsk evaluate "(()=>{const d=document.getElementById('bskaim1…
参数
{
"command": "for xy in \"792 219\" \"597 213\"; do set -- $xy; ~/.local/bin/bsk evaluate \"(()=>{const d=document.getElementById('bskaim1');d.style.left='${1}px';d.style.top='${2}px';return 'ok'})()\" --session jbbt >/dev/null 2>&1; ~/.local/bin/bsk click --selector \"#bskaim1\" --session jbbt 2>&1 | tail -1; ~/.local/bin/bsk wait-ms 900 --session jbbt >/dev/null 2>&1; done; ~/.local/bin/bsk screenshot --out /tmp/c3.png --session jbbt >/dev/null 2>&1; python3 -c \"\nfrom PIL import Image\nim=Image.open('/tmp/c3.png'); im.crop((1130,380,1810,870)).resize((1360,980),Image.LANCZOS).save('/tmp/c3c.png'); print('ok')\"",
"description": "依次点击\"翱\"\"层\""
}结果
click ok tab=1282564740 target=#bskaim1 at=(642, 365) click ok tab=1282564740 target=#bskaim1 at=(642, 365) ok
思考
The clicks landed at (642,365) — it used cached position? The evaluate style update may have run but click resolved old position... Actually click reported same coords twice, meaning element position unchanged — because `d` lookup: maybe evaluate ran in different context? It returned 'ok' though (we suppressed output). Hmm, maybe the style change didn't apply because... let me check getBoundingClientRect.
Wait, actually the evaluate output was suppressed with >/dev/null. Possible the JS threw? No, click worked so element exists.
Possibly the fixed element with left/top set but also width/height 2px — bsk computes center. If style.left updated to 792px, rect.x=792. But reported 642 → style not applied.
Maybe the shell `$1`/`$2` in the loop worked... `set -- $xy` inside a for loop with zsh — should be fine. But inside double quotes in the evaluate string I used '${1}px' single quotes around... the string is in double quotes so ${1} expands. Hmm.
Let me just check rect now. Also check screenshot to see where markers are.
读文件/tmp/c3c.png
参数
{
"file_path": "/tmp/c3c.png"
}结果
(含 1 张图片,回放不展示)
思考
Still only marker 1 at 餐 — the two extra clicks reused position (642,365) and probably clicked the same spot (ignored duplicates). So my style update didn't take effect.
Why? Perhaps bsk caches element position per selector? Unlikely. Let me verify rect.
终端~/.local/bin/bsk evaluate "(()=>{const d=document.getElementById('bskaim1');if(!d)return 'gone';const b=d.getBoundingCl…
参数
{
"command": "~/.local/bin/bsk evaluate \"(()=>{const d=document.getElementById('bskaim1');if(!d)return 'gone';const b=d.getBoundingClientRect();return JSON.stringify({x:b.x,y:b.y,w:b.width,h:b.height,style:d.getAttribute('style')})})()\" --session jbbt 2>&1 | tail -3",
"description": "检查锚点位置"
}结果
{"x":641,"y":364,"w":2,"h":2,"style":"position: fixed; left: 641px; top: 364px; width: 2px; height: 2px; pointer-events: none; z-index: 2147483647; background: transparent;"}思考
Style never changed — so my earlier evaluate with ${1} probably produced left='${1}px'? Actually the style attribute still shows original values, meaning the evaluate script errored or didn't run (set -- $xy in zsh: with `for xy in ...; do set -- $xy` — in zsh, `set -- $xy` works but positional params... then ${1} → "792". Hmm. Maybe the issue: evaluate ran but output was suppressed and it threw? If d was null it returns... it returns 'ok' anyway? No — if d null, error thrown.
Wait maybe the whole evaluate call failed due to quoting. Whatever. Just set position explicitly now and click.
终端~/.local/bin/bsk evaluate "(()=>{const d=document.getElementById('bskaim1');d.style.left='792px';d.style.top='219px';co…出错Exit code 1
参数
{
"command": "~/.local/bin/bsk evaluate \"(()=>{const d=document.getElementById('bskaim1');d.style.left='792px';d.style.top='219px';const b=d.getBoundingClientRect();return b.x+','+b.y})()\" --session jbbt 2>&1 | tail -2 && ~/.local/bin/bsk click --selector \"#bskaim1\" --session jbbt 2>&1 | tail -1 && ~/.local/bin/bsk wait-ms 900 --session jbbt >/dev/null 2>&1",
"description": "点击\"翱\""
}结果
Exit code 1 792,219 click ok tab=1282564740 target=#bskaim1 at=(793, 220)
思考
Now at (793,220) - clicked 翱. Next 层 at (597,213).
终端~/.local/bin/bsk evaluate "(()=>{const d=document.getElementById('bskaim1');d.style.left='597px';d.style.top='213px';co…
参数
{
"command": "~/.local/bin/bsk evaluate \"(()=>{const d=document.getElementById('bskaim1');d.style.left='597px';d.style.top='213px';const b=d.getBoundingClientRect();return b.x+','+b.y})()\" --session jbbt 2>&1 | tail -1 && ~/.local/bin/bsk click --selector \"#bskaim1\" --session jbbt 2>&1 | tail -1 && ~/.local/bin/bsk wait-ms 900 --session jbbt >/dev/null 2>&1; ~/.local/bin/bsk screenshot --out /tmp/c4.png --session jbbt >/dev/null 2>&1; python3 -c \"\nfrom PIL import Image\nim=Image.open('/tmp/c4.png'); im.crop((1130,380,1810,900)).resize((1360,1040),Image.LANCZOS).save('/tmp/c4c.png'); print('ok')\"",
"description": "点击\"层\""
}结果
597,213 click ok tab=1282564740 target=#bskaim1 at=(598, 214) ok
读文件/tmp/c4c.png
参数
{
"file_path": "/tmp/c4c.png"
}结果
(含 1 张图片,回放不展示)