自动化班级小管家作业截图工具。支持连接 Chrome 调试端口、进入指定课程、滚动查看学生列表、截取学生作业图片。专为小学数学老师设计,用于批量获取学生作业截图进行批改。
自动化班级小管家 (banjixiaoguanjia.com) 作业截图工具,支持批量获取学生作业图片。
重要: 所有文件、路径、目录统一使用 UTF-8 编码
💡 提示: 使用 capture-new-browser.js 脚本时,无需手动启动 Chrome 调试模式,脚本会自动处理浏览器启动和复用。
⚠️ 重要:
最新版功能:
使用方法:
bash
node capture-new-browser.js 课程名称
示例:
bash
node capture-new-browser.js 二下(第38节)
输出位置: 桌面/课程名称/
浏览器复用逻辑:
截图 + AI分析作业数量:
bash
node capture-36-fixed.js 二下(第36节)
⚠️ 注意: 旧版脚本需要手动启动 Chrome 调试模式,且不会自动复用浏览器
javascript
const { chromium } = require(playwright);
const browser = await chromium.connectOverCDP(http://localhost:9222);
javascript
// 启用辅助功能
await page.evaluate(() => {
const el = document.querySelector(flt-semantics-placeholder);
if (el) el.click();
});
// 查找并点击课程
await page.evaluate((courseName) => {
const elements = document.querySelectorAll(flt-semantics[aria-label]);
for (const el of elements) {
const label = el.getAttribute(aria-label);
if (label && label.includes(courseName)) {
el.dispatchEvent(new MouseEvent(click, { bubbles: true }));
break;
}
}
}, 三上(第11节));
⚠️ 关键发现: Flutter 页面需要使用 scrollIntoView 滚动到已知课程来触发动态加载更多课程!
正确方法:
javascript
// 滚动到最后一个已知课程,触发 Flutter 加载更多
await page.evaluate(() => {
const elements = document.querySelectorAll(flt-semantics[aria-label]);
let lastCourseEl = null;
for (const el of elements) {
const label = el.getAttribute(aria-label);
if (label && (label.includes(第) || label.includes(年级))) {
lastCourseEl = el;
}
}
if (lastCourseEl) {
lastCourseEl.scrollIntoView({ block: start });
}
});
await page.waitForTimeout(1500); // 等待加载完成
完整查找流程:
javascript
async function findCourseWithScroll(courseName, maxScrolls = 20) {
for (let i = 0; i < maxScrolls; i++) {
// 1. 在当前视图查找目标课程
const found = await page.evaluate((name) => {
const elements = document.querySelectorAll(flt-semantics[aria-label]);
for (const el of elements) {
const label = el.getAttribute(aria-label);
if (label && label.includes(name)) {
return { found: true, label };
}
}
return { found: false };
}, courseName);
if (found.found) return found;
// 2. 滚动到最后一个课程,触发加载更多
await page.evaluate(() => {
const elements = document.querySelectorAll(flt-semantics[aria-label]);
let lastCourseEl = null;
for (const el of elements) {
const label = el.getAttribute(aria-label);
if (label && (label.includes(第) || label.includes(年级))) {
lastCourseEl = el;
}
}
if (lastCourseEl) lastCourseEl.scrollIntoView({ block: start });
});
await page.waitForTimeout(1500);
}
}
javascript
// 获取滚动容器
const scrollContainer = await page.evaluate(() => {
return document.querySelector([style*=overflow-y: scroll]);
});
// 滚动到指定位置
await page.evaluate((scrollTop) => {
const el = document.querySelector([style*=overflow-y: scroll]);
if (el) el.scrollTop = scrollTop;
}, 100);
javascript
await page.screenshot({
path: screenshots/${studentName}.png,
fullPage: true
});
javascript
const { chromium } = require(playwright);
async function captureHomework(courseName, outputDir = ./screenshots) {
const browser = await chromium.connectOverCDP(http://localhost:9222);
const context = browser.contexts()[0] || await browser.newContext();
const pages = context.pages();
let page = pages.find(p => p.url().includes(banjixiaoguanjia));
if (!page) {
page = await context.newPage();
await page.goto(https://service.banjixiaoguanjia.com/appweb/);
}
// 启用辅助功能
await page.evaluate(() => {
const el = document.querySelector(flt-semantics-placeholder);
if (el) el.click();
});
await page.waitForTimeout(2000);
// 进入课程
await page.evaluate((name) => {
const elements = document.querySelectorAll(flt-semantics[aria-label]);
for (const el of elements) {
const label = el.getAttribute(aria-label);
if (label && label.includes(name)) {
el.dispatchEvent(new MouseEvent(click, { bubbles: true }));
break;
}
}
}, courseName);
await page.waitForTimeout(4000);
// 获取学生列表
const students = await page.evaluate(() => {
const elements = document.querySelectorAll(flt-semantics[aria-label]);
const list = [];
for (const el of elements) {
const label = el.getAttribute(aria-label);
if (label && label.length > 20) {
const lines = label.split(\n);
const name = lines[0].trim();
if (name && name.length < 15 && !name.includes(详情) && !name.includes(查看)) {
list.push(name);
}
}
}
return list;
});
// 截图每个学生
for (const student of students) {
await page.screenshot({
path: ${outputDir}/${student}.png,
fullPage: true
});
console.log(✓ 已截图: ${student});
}
await browser.close();
}
| 页面 | 学生信息格式 | 查找条件 |
|------|-------------
该技能支持在以下平台通过对话安装:
帮我安装 SkillHub 和 banjixiaoguanjia-1775930561 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 banjixiaoguanjia-1775930561 技能
skillhub install banjixiaoguanjia-1775930561
文件大小: 148.82 KB | 发布时间: 2026-4-12 09:08