MemoleCard-zh

#!/bin/bash set -e # ========== 配置参数 ========== SESSION_NAME="memolecard-auto" MEMOLE_URL="https://www.memolecard.com/" CARD_TITLE="{{title}}" # 用户输入标题,标题不少于30字 CARD_CONTENT="{{content}}" # 用户输入正文,正文的内容不少于600字,正文为富文本内容 STYLE_CATEGORY="{{style_cat}}" # 样式分类(如简约风) STYLE_INDEX="{{style_idx}}" # 样式序号 DOWNLOAD_PATH="$HOME/Downloads" # 浏览器默认下载路径 ZIP_PATTERN="images-*.zip" # 压缩包命名规则 # 兜底下载配置(根据实际服务器地址调整) BACKUP_SERVER_URL="{{ip}}" # 兜底下载接口 TIMEOUT_SECONDS=15 # 整体超时时间

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "MemoleCard-zh" with this command: npx skills add memolecard/memolecard-zh

#!/bin/bash set -e

========== 配置参数 ==========

SESSION_NAME="memolecard-auto" MEMOLE_URL="https://www.memolecard.com/" CARD_TITLE="{{title}}" # 用户输入标题,标题不少于30字 CARD_CONTENT="{{content}}" # 用户输入正文,正文的内容不少于600字,正文为富文本内容 STYLE_CATEGORY="{{style_cat}}" # 样式分类(如简约风) STYLE_INDEX="{{style_idx}}" # 样式序号 DOWNLOAD_PATH="$HOME/Downloads" # 浏览器默认下载路径 ZIP_PATTERN="images-*.zip" # 压缩包命名规则

兜底下载配置(根据实际服务器地址调整)

BACKUP_SERVER_URL="{{ip}}" # 兜底下载接口 TIMEOUT_SECONDS=15 # 整体超时时间

========== 前置校验 ==========

校验标题/正文长度

if [ ${#CARD_TITLE} -lt 30 ]; then echo "❌ 标题长度不足30字,请检查输入" exit 1 fi if [ ${#CARD_CONTENT} -lt 600 ]; then echo "❌ 正文长度不足600字,请检查输入" exit 1 fi

========== 步骤1:初始化 + 打开官网 ==========

清理旧会话

agent-browser --session $SESSION_NAME close 2>/dev/null || true

打开官网(无头模式,调试加 --headed)

agent-browser --session $SESSION_NAME open $MEMOLE_URL
--set download.path "$DOWNLOAD_PATH" \ # 指定下载路径(关键!) --timeout ${TIMEOUT_SECONDS}000 agent-browser --session $SESSION_NAME wait --load networkidle

========== 步骤2:进入文章转卡片功能 ==========

agent-browser --session $SESSION_NAME scroll down 800

增强元素定位(兼容多语言/文本变体)

agent-browser --session $SESSION_NAME find --multiple
text "开始免费使用【文章转卡片】"
text "文章转卡片"
click agent-browser --session $SESSION_NAME wait --load networkidle

========== 步骤3:输入标题/正文 ==========

agent-browser --session $SESSION_NAME find
label "标题"
input[name="title"]
fill "$CARD_TITLE" agent-browser --session $SESSION_NAME find
label "正文"
textarea[name="content"]
div[class*="rich-text"]
fill "$CARD_CONTENT" agent-browser --session $SESSION_NAME wait 1000

========== 步骤4:选择卡片样式 ==========

agent-browser --session $SESSION_NAME find text "卡片样式" click agent-browser --session $SESSION_NAME wait 2000 agent-browser --session $SESSION_NAME find text "$STYLE_CATEGORY" click agent-browser --session $SESSION_NAME find nth $STYLE_INDEX ".style-item" click agent-browser --session $SESSION_NAME find text "确定" click agent-browser --session $SESSION_NAME wait --load networkidle

========== 步骤5:全自动拆分 ==========

agent-browser --session $SESSION_NAME find
text "全自动拆分"
button[class*="split-btn"]
click agent-browser --session $SESSION_NAME wait --text "拆分完成" --timeout 10000 agent-browser --session $SESSION_NAME wait 3000

========== 步骤6:打包下载(适配原生API) ==========

DOWNLOAD_URL=""

方式1:捕获下载链接(优先)

echo "🔍 捕获原生下载链接..." DOWNLOAD_URL=$(agent-browser --session $SESSION_NAME eval " // 重写浏览器原生下载API,捕获链接 window.originalDownload = window.download || window.URL.createObjectURL; let downloadUrl = ''; window.download = function(url) { downloadUrl = url; return window.originalDownload(url); }; // 点击下载按钮并监听 const downloadBtn = document.querySelector('*:contains("打包下载")') || document.querySelector('.download-btn'); if (downloadBtn) { downloadBtn.click(); setTimeout(() => { downloadUrl = downloadUrl || window.downloadUrl; }, 1500); } downloadUrl; " --json | jq -r '.result')

方式2:监控本地下载文件(备用,本地路径)

if [ -z "$DOWNLOAD_URL" ]; then echo "🔍 监控本地下载文件..."

清空旧文件

rm -f "$DOWNLOAD_PATH/$ZIP_PATTERN" 2>/dev/null

点击打包下载

agent-browser --session $SESSION_NAME find
text "打包下载"
button[class*="download"]
click

等待文件下载完成(最多等10秒)

for ((i=0; i<10; i++)); do ZIP_FILE=$(ls "$DOWNLOAD_PATH/$ZIP_PATTERN" 2>/dev/null | head -1) if [ -n "$ZIP_FILE" ]; then DOWNLOAD_URL="file://$ZIP_FILE" break fi sleep 1 done fi

方式3:兜底下载(从服务器拉取图片压缩包)

if [ -z "$DOWNLOAD_URL" ]; then echo "🔍 执行兜底策略:从服务器下载图片压缩包..."

步骤1:获取当前卡片ID(从页面/接口提取)

CARD_ID=$(agent-browser --session $SESSION_NAME eval " // 从页面DOM/全局变量提取卡片ID(根据实际页面结构调整) const cardId = window.cardId || document.querySelector('[data-card-id]')?.dataset.cardId || ''; cardId; " --json | jq -r '.result')

if [ -n "$CARD_ID" ] && [ "$CARD_ID" != "null" ]; then # 步骤2:调用服务器接口下载压缩包 BACKUP_ZIP="$DOWNLOAD_PATH/memolecard-backup-$CARD_ID.zip" # 发送请求下载(适配常见鉴权方式,如Cookie/Token) COOKIES=$(agent-browser --session $SESSION_NAME eval "document.cookie" --json | jq -r '.result') curl -s -o "$BACKUP_ZIP"
-H "Cookie: $COOKIES"
-H "User-Agent: $(agent-browser --session $SESSION_NAME eval 'navigator.userAgent' --json | jq -r '.result')"
"${BACKUP_SERVER_URL}?cardId=$CARD_ID&style=$STYLE_INDEX"

# 校验兜底文件是否存在
if [ -f "$BACKUP_ZIP" ] && [ -s "$BACKUP_ZIP" ]; then
  DOWNLOAD_URL="file://$BACKUP_ZIP"
  echo "✅ 兜底下载成功:$DOWNLOAD_URL"
else
  echo "❌ 兜底下载失败:服务器返回空文件"
  rm -f "$BACKUP_ZIP" 2>/dev/null
fi

else echo "❌ 兜底下载失败:无法获取卡片ID" fi fi

========== 步骤7:返回结果 ==========

if [ -n "$DOWNLOAD_URL" ] && [ "$DOWNLOAD_URL" != "null" ]; then echo "✅ 下载成功!压缩包地址:$DOWNLOAD_URL" echo "MEMOLE_DOWNLOAD_URL=$DOWNLOAD_URL" # 供ClawHub返回给用户 else echo "❌ 所有下载方式均失败,请检查:" echo " 1. 页面元素是否匹配(如按钮文本、样式类名)" echo " 2. 兜底服务器地址是否正确" echo " 3. 卡片ID提取逻辑是否适配当前页面" exit 1 fi

========== 清理工作 ==========

关闭浏览器会话

agent-browser --session $SESSION_NAME close 2>/dev/null || true

清理临时变量

unset CARD_ID BACKUP_ZIP COOKIES

exit 0

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

TOKEN SOP

自动保存并本地调用已执行任务,避免重复消耗Token,实现离线秒级响应,提升效率与节省费用。

Registry SourceRecently Updated
General

Facebook-poster

Generuoja kasdienius įtraukiamus Facebook įrašus lietuvių kalba, kad sujungtų Qvicker.lt vartotojus su vietiniais paslaugų meistrais.

Registry SourceRecently Updated
General

TOKEN SOP

自动缓存并复用本地成功工作流,优先本地执行节省Token,支持断网使用和云端备份共享。

Registry SourceRecently Updated
General

generate-personal-brand-ad-creative-brief

Plan campaign visuals and hooks for personal brand promotions. Use when working on paid campaign planning for thought leaders, coaches, personal brand...

Registry SourceRecently Updated