起因是今天上午,我在思源学堂登记同学们的成绩,主要是需要把网页端的成绩迁移到 excel 表格中。但是一个个地去查找并填入,显然不是一个很高效的方法,于是我想起了很久以前自己了解过的前端和爬虫知识。尽管对爬虫所知甚少,但是我大概还是记得它提取信息的功能的。于是在和 AI 的合作下,我粗略制作了一个快速提取成绩的半自动化小工具(不能全自动的原因大概是 AI 没有权限登录我的账号,不过目前暂时也不想给出这个权限)具体执行步骤如下:

Step 1

先在思源学堂中筛选出满足特定要求的学生信息,然后打开控制台(比如 Chrome 浏览器是按 F12). 然后找到含有学生信息的 html 代码,复制粘贴给 AI 大人让它帮我写提取代码,最后在 Console 中运行即可。我的代码示例如下:

const data=[...document.querySelectorAll('.homework-row')]
.map(r=>({
  no:r.querySelector('[tag="department"] span')?.innerText.trim(),
  name:r.querySelector('[tag="name"] span')?.innerText.trim()
}))
.filter(x=>x.no&&x.name);

copy(data.map(x=>`${x.no}\t${x.name}\t100`).join('\n'));

console.log(`本页提取 ${data.length} 人`);

Step 2

打开 excel, 新建一个表格,然后把已经复制的信息粘贴进去。

之后,回到原始的需要记录成绩的总表,在需要填入成绩的地方,输入公式(具体的表示行列信息的代码可能因为数据表格结构的不同有所差异):

=XLOOKUP(VALUE(A5),Sheet2!A:A,Sheet2!C:C,"")

补充:如果需要从多个表格录入信息

把 excel 中的计算公式改成如下形式即可:

=IF(COUNTIF(Sheet2!A:A,A5)>0,100,IF(COUNTIF(Sheet3!A:A,A5)>0,98,""))

补充:统计缺交作业人数

为了填写反馈表,这里采用用顿号分隔的格式提取:

const rows=[...document.querySelectorAll('.homework-row')];

const data=rows.map(r=>({
  name:r.querySelector('[tag="name"] span')?.innerText.trim(),
  status:r.querySelector('[tag="status"]')?.innerText.trim()
})).filter(x=>x.status==="未交");

copy(data.map(x=>x.name).join('、'));