Files
mcn-short-video/project/短视频脚本创作/V1.0/mcn-work-shop/cdp-verify-rankwide.mjs
T
maogeigei 268ce29aae feat(账号分析+工作台): 功能三自动联动生成设定卡+双向联动维护+玫瑰金配色定稿+首页数据预览/周榜优化+CDP验证脚本
- mcn-dou-analysis: 功能三产出设定后自动生成设定卡(Step7); 设定md与卡片SVG双向联动维护规则固化(06文档+03文档+SKILL.md); 浅色系配色定稿玫瑰金(#D6A3A9→#9A5563)+背景文字提亮规则; 新增06生成账号设定卡片文档+模板样例
- mcn-work-shop: 首页数据预览条/周榜预览表加宽/改名AI脚本诊断/tab切换/添加账号弹窗等优化
- 新增 cdp-*.mjs 验证脚本14个(可复用); .gitignore 忽略运行日志/截图/tmp
2026-08-31 15:27:54 +08:00

57 lines
3.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 验证「账号周榜」5 个数值列加宽(.th-wide min-width:110px)
// 只读测量,零副作用
const list = await fetch('http://localhost:9223/json').then((r) => r.json());
let page = list.find((t) => t.type === 'page' && t.url.includes('#/ranking'));
if (!page) page = list.find((t) => t.type === 'page' && t.url.includes('localhost:8899'));
if (!page) { console.log('ERR: no workbuddy page open'); process.exit(1); }
const ws = new WebSocket(page.webSocketDebuggerUrl);
let id = 0; const pending = new Map();
const send = (method, params = {}) => new Promise((res, rej) => { const i = ++id; pending.set(i, { res, rej }); ws.send(JSON.stringify({ id: i, method, params })); });
ws.onmessage = (e) => { const m = JSON.parse(e.data); if (m.id && pending.has(m.id)) { const p = pending.get(m.id); pending.delete(m.id); m.error ? p.rej(new Error(m.error.message)) : p.res(m.result); } };
await new Promise((r) => (ws.onopen = r));
const ev = async (expr) => { const r = await send('Runtime.evaluate', { expression: expr, returnByValue: true, awaitPromise: true }); if (r.exceptionDetails) return { __err: (r.exceptionDetails.exception?.description || r.exceptionDetails.text).slice(0, 300) }; return r.result.value; };
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
await send('Page.enable'); await send('Runtime.enable');
// 1) 导航到周榜页(若不在)并刷新加载最新 CSS
if (!page.url.includes('#/ranking')) {
await send('Page.navigate', { url: 'http://localhost:8899/#/ranking' });
await sleep(2000);
}
await send('Page.reload', { ignoreCache: true });
await sleep(3000);
// 2) 测量表头各列宽度
const cols = await ev(`(() => {
const ths = [...document.querySelectorAll('.table th')];
const wideKeys = ['comprehensiveScore', 'newFans', 'newLikes', 'newComments', 'newShares'];
const rowCount = document.querySelectorAll('.table tbody tr').length;
const result = ths.map((th) => {
const rect = th.getBoundingClientRect();
return { key: th.dataset.sort || '', label: th.textContent.trim().slice(0, 8), wide: th.classList.contains('th-wide'), w: Math.round(rect.width) };
});
return { rowCount, result };
})()`);
console.log('行数:', cols.rowCount);
console.log('表头列宽:');
for (const c of cols.result) {
const mark = c.wide ? ' [th-wide]' : '';
const match = c.wide ? (c.w >= 110 ? ' >=110 ✓' : ' <110 ✗') : '';
console.log(' ' + (c.key || c.label).padEnd(22) + ' width=' + String(c.w).padStart(4) + mark + match);
}
const wideCols = cols.result.filter((c) => c.wide);
const allOk = wideCols.length === 5 && wideCols.every((c) => c.w >= 110);
// 3) 记录 CSS 规则是否生效
const cssCheck = await ev(`(() => {
const sheet = [...document.styleSheets].map((s) => s.href || 'inline').join(',');
const th = document.querySelector('.table th.th-wide');
const cs = th ? getComputedStyle(th) : null;
return { sheet, minWidth: cs ? cs.minWidth : 'n/a' };
})()`);
console.log('样式源:', cssCheck.sheet.slice(0, 160));
console.log('computed min-width:', cssCheck.minWidth);
ws.close();
console.log(allOk ? 'PASS: 5 列均已加宽(>=110px)' : 'CHECK: 存在未达标的列');