京东批量评价技能
自动登录京东评价页面,批量完成所有待评价商品的五星好评。
环境准备
安装 browser-use
如果用户尚未安装 browser-use,先执行安装:
pip install browser-use
browser-use install
browser-use install 会安装 Chromium 浏览器及系统依赖。安装完成后验证:
browser-use doctor
前置条件
- Chrome 浏览器: 用户已登录京东账号的真实 Chrome(通过
--browser real复用 cookie) - 运行模式: 必须使用
--real --headed参数,让用户可见浏览器操作过程
执行流程
阶段 0:环境检查
执行任何操作前,先检查 browser-use 是否可用:
which browser-use || pip install browser-use && browser-use install
如果 browser-use doctor 报错,根据提示修复。确保 Chrome 浏览器已打开且已登录京东。
阶段 1:收集待评价订单
- 打开京东评价列表页
https://club.jd.com/myJdcomments/myJdcomment.action - 遍历 1-5 页,从每页用
browser-use eval提取所有"评价"链接的 ruleid - 去重汇总所有 ruleid
// 提取 ruleid 的 JS
Array.from(document.querySelectorAll('a'))
.filter(a => a.textContent.trim() === '评价' && a.href.includes('orderVoucher'))
.map(a => a.href.match(/ruleid=(\\d+)/)[1])
.filter((v, i, a) => a.indexOf(v) === i)
阶段 2:逐个评价(关键顺序!)
对每个 ruleid,按以下顺序操作:
2.1 打开评价页
https://club.jd.com/myJdcomments/orderVoucher.action?ruleid={ruleid}
2.2 先填评价文字(必须在评分之前!)
为什么必须先填文字: 京东的星级评分交互会清空所有 textarea。如果先评分再填文字,文字会被清空。
- 找到所有可见 textarea:
document.querySelectorAll('textarea') - 对每个 textarea,依次:
- 用
browser-use eval聚焦:ta.focus(); ta.click() - 用
browser-use type命令输入好评文字(不可用 JS value 赋值,京东的字符计数器和表单校验不认 JS 赋值)
- 用
- 文字长度 15-26 字,使用以下模板:
宝贝收到了质量很好做工精细非常满意的一次购物体验好评
商品不错包装很严实物流也很快好评推荐购买
质量很好价格实惠值得购买五星好评满意
收到货了跟描述一样很满意以后还会再来好评
东西挺好的用着很顺手推荐购买好评
快递很快包装完好产品质量也不错好评推荐
物美价廉性价比很高满意的一次购物体验
用了一段时间了质量没问题好评推荐购买
外观好看做工精致非常满意好评推荐
第二次购买了质量稳定值得信赖好评
物流超快东西也很好用点赞推荐购买
性价比很高质量超出预期推荐好评
服务态度很好物流速度很快整体体验非常满意
安装师傅很专业态度很好非常满意的一次购物
配送速度快包装完好安装服务也很到位好评
- 手动同步计数器:
document.querySelector('.textarea-num b').textContent = ta.value.length
2.3 再评分
对所有 .commstar 评分组件执行五星评分:
document.querySelectorAll('.commstar').forEach(group => {
// 逐星 hover,触发京东评分组件的内部状态
for (let i = 1; i <= 5; i++) {
const star = group.querySelector('.star.star' + i);
if (star) {
star.dispatchEvent(new MouseEvent('mouseenter', { bubbles: true }));
star.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
}
}
// 点击第5颗星确认评分
const s5 = group.querySelector('.star.star5');
if (s5) s5.dispatchEvent(new MouseEvent('click', { bubbles: true }));
});
2.4 处理服务印象(如有)
部分订单有"服务印象"标签选择,点击正面标签:
const reasonsSection = document.querySelector('.fop-reasons');
if (reasonsSection) {
const labels = reasonsSection.querySelectorAll('label, span');
const positiveLabels = Array.from(labels).filter(l => {
const t = l.textContent.trim();
return t.includes('态度好') || t.includes('速度快') || t.includes('专业')
|| t.includes('满意') || t.includes('耐心') || t.includes('及时')
|| t.includes('热情') || t.includes('细心') || t.includes('准时');
});
positiveLabels.slice(0, 3).forEach(l => l.click());
}
2.5 提交前最终同步
评分操作可能清空 textarea 或重置计数器,提交前必须重新同步:
document.querySelectorAll('textarea').forEach(ta => {
const container = ta.closest('.fop-item');
const counterB = container?.querySelector('.textarea-num b');
if (counterB && ta.value.length > 0) {
counterB.textContent = ta.value.length;
}
});
2.6 点击发表
const btn = Array.from(document.querySelectorAll('a'))
.find(el => el.textContent.trim() === '发表');
if (btn) btn.click();
2.7 验证结果
提交后等待 2-3 秒,检查页面是否跳转离开评价页:
const body = document.body.innerText;
if (!body.includes('评价订单')) return 'SUCCESS'; // 已跳转,评价成功
if (body.includes('请填写完整的评价内容')) return 'ERROR'; // 校验失败
阶段 3:确认完成
全部评价完成后,回评价列表页验证所有页的"评价"链接数为 0。
browser-use CLI 命令参考
关键: 所有命令必须加
--session <name>保持会话状态,否则后续 eval/type/state 会报SessionManager not initialized错误。
# 打开页面
browser-use --browser real --headed --session jdreview open "<url>"
# 执行 JavaScript(返回 JSON)
browser-use --browser real --headed --session jdreview --json eval "<js_code>"
# 模拟键盘输入(必须用于 textarea 填文字)
browser-use --browser real --headed --session jdreview type "<text>"
# 查看页面状态
browser-use --browser real --headed --session jdreview state
常见问题
SessionManager not initialized
每个 browser-use CLI 命令是独立进程,不加 --session 无法共享浏览器状态。修复方式:所有命令统一加 --session <name> 参数,脚本中在 run() 函数统一注入即可。open 命令负责创建会话,后续 eval/type/state 复用同一会话。
收集到 0 条待评价
通常是 eval 执行失败但被静默吞掉(脚本 bu_eval 的 except 分支返回了空字符串)。确认 run() 函数中已包含 --session 参数。browser-use 4.x 版本起强制要求 session 参数。open 命令负责创建会话,后续 eval/type/state 复用同一会话。
批量脚本
技能目录下的 scripts/jd_review.py 是完整的批量评价脚本,可以通过 browser-use CLI 的 Python API 直接执行:
python3 /Users/huangdq/skills/jd-review-bot/scripts/jd_review.py
该脚本封装了上述所有流程,包括:
- 自动收集所有分页的待评价订单
- 多 textarea 订单支持(服务评价 + 商品评价)
- 服务印象标签自动选择
- 计数器同步
- 提交验证
- 进度显示和最终统计