Douban Bookmark
输入图书名称,把它加入豆瓣读书的「想读」收藏。适用于“把《xxx》加入豆瓣想读 / 愿望清单 / 想读列表”这类请求。实现方式:先用 HTTP 解析豆瓣搜索结果拿到最优图书详情页,再用 Playwright 持久化浏览器登录态打开详情页,执行豆瓣真实的两段式收藏流程(点“想读”→ 点“保存”)。首次登录后可长期复...
MIT-0 · Free to use, modify, and redistribute. No attribution required.
⭐ 0 · 17 · 0 current installs · 0 all-time installs
MIT-0
Security Scan
OpenClaw
Benign
high confidencePurpose & Capability
名称/描述与实现一致。脚本使用 requests + BeautifulSoup 做搜索解析,然后用 Playwright 在 book.douban.com 上执行点击流程。未看到与该用途不符的环境变量、外部服务或二进制依赖。
Instruction Scope
SKILL.md 与脚本只访问豆瓣搜索页和图书详情页,并在本地打开浏览器页面、查找并点击按钮。没有指示读取其他系统配置或将数据发到与豆瓣无关的外部端点。
Install Mechanism
无安装规范(instruction-only + 附带脚本),风险较低。脚本依赖 playwright/chromium,需用户按说明自行安装,这是一种透明、可审计的依赖。
Credentials
不需要声明的环境凭据,但会在本地创建/复用持久化浏览器 profile(默认 ~/.openclaw/browser-profiles/douban-playwright)。这与功能直接相关(保存登录态),但该目录会保存 cookies/会话信息,属于敏感数据,应注意隔离或自定义路径。
Persistence & Privilege
没有设置 always:true,技能为用户可调用且不会修改其他技能或全局代理设置。它会在本地保存自己的浏览器 profile(这是所需行为),但未请求额外平台权限。
Assessment
该技能看起来是做它宣称的事情:搜索豆瓣并用 Playwright 在浏览器里点击“想读”。在安装/使用前请注意:
- 你需要在系统上安装 Python、playwright 和 Chromium(按说明手动执行 playwright install chromium)。
- 首次必须用 --login --headed 手动登录一次,脚本会把登录态保存在默认目录 (~/.openclaw/browser-profiles/douban-playwright)。该目录会存储 cookies/会话信息,可能包含敏感登录凭证——如果不想复用默认 profile,请在运行时用 --profile-dir 指定一个专用目录或在隔离环境(不同用户帐户、容器或 VM)中运行。
- 脚本是可读的(已包含在包内)。如果有顾虑,可手动审查 scripts/add_wishlist.py 后再运行。
- 仅从信任的来源安装 playwright/Chromium。若你希望更严格的安全性,可在临时容器中执行这些操作或避免将主浏览器的 profile 指向该目录。Like a lobster shell, security has layers — review code before you run it.
Current versionv1.0.0
Download zipbookmarkbooksdoubanlatestplaywright
License
MIT-0
Free to use, modify, and redistribute. No attribution required.
SKILL.md
豆瓣图书 Bookmark 自动化
不要再使用 agent-browser。
统一使用本 skill 自带脚本:
scripts/add_wishlist.pyscripts/add_wishlist.sh
这套方案分成两段:
- 用
requests + BeautifulSoup解析豆瓣搜索页,稳定拿到第一本书的详情页 URL - 用
Playwright launch_persistent_context复用本地浏览器 profile,打开详情页并点击「想读」
前提
环境依赖:
python3requestsbeautifulsoup4playwright- 已安装 Chromium:
playwright install chromium
首次登录
首次使用时,先让用户登录一次豆瓣:
python3 skills/douban-bookmark/scripts/add_wishlist.py --login --headed
规则:
- 必须带
--headed - 登录完成后,浏览器 profile 会保存在默认目录
- 后续加入「想读」时复用同一个 profile,不要换目录
默认 profile 目录:
~/.openclaw/browser-profiles/douban-playwright
正常使用
python3 skills/douban-bookmark/scripts/add_wishlist.py "金钱的艺术"
或者:
skills/douban-bookmark/scripts/add_wishlist.sh "金钱的艺术"
脚本会:
- 搜索书名
- 解析第一本书详情页 URL
- 打开详情页
- 点击「想读」
- 输出 JSON 结果
推荐执行策略
已知用户没登录时
先执行:
python3 skills/douban-bookmark/scripts/add_wishlist.py --login --headed
等用户登录完成后,再执行:
python3 skills/douban-bookmark/scripts/add_wishlist.py "书名"
已有登录态时
直接执行:
python3 skills/douban-bookmark/scripts/add_wishlist.py "书名"
需要观察浏览器行为时
改成有头模式:
python3 skills/douban-bookmark/scripts/add_wishlist.py "书名" --headed
输出判断
脚本输出 JSON,重点看这些字段:
subject_url: 命中的豆瓣图书详情页clicked: 是否实际执行了点击needs_login: 是否需要先登录success: 是否大概率成功
如果:
needs_login=true→ 先让用户登录clicked=false→ 页面结构变了,需要修脚本success=true→ 可向用户报告已完成或大概率完成
实现细节
搜索阶段
不要依赖豆瓣图书搜索页前端渲染。
直接请求:
https://www.douban.com/search?cat=1001&q=<书名>
从 HTML 里解析 .result .title a 或 .result .pic a,提取其中跳转到:
https://book.douban.com/subject/<id>/
点击阶段
不要依赖 ref 编号。
豆瓣这里不是“一次点击就完成”的普通按钮,而是两段式交互:
- 先点详情页上的
input[type=submit][value='想读'] - 再点弹层表单里的
input[type=submit][value='保存']
如果页面已经处于成功态,常见标志是:
- 出现
我想读这本书 - 出现
修改 - 出现
删除
登录态
必须使用持久化 context:
launch_persistent_context(user_data_dir=...)
不要使用临时 browser context,否则豆瓣登录态会丢。
失败处理
如果失败:
- 先看是否
needs_login=true - 再用
--headed重跑一次观察页面 - 若点击控件失效,更新
add_wishlist.py里的选择器 - 不要假装成功
操作准则
- 优先使用自带脚本,不要临时拼一堆浏览器命令
- 优先复用默认 profile 目录
- 登录问题优先走
--login --headed - 页面结构变化时,修改脚本,不要回退到 agent-browser
Files
3 totalSelect a file
Select a file to preview.
Comments
Loading comments…
