收集文档及提交名单统计

文叔叔文档收集

使用动机

在我们的学习工作中,少不了要让大家集体提交文件的情况,举个最简单的例子:收作业。
传统的文件收集流程大致是:群内发出文件提交通知$\rightarrow$每位参与者向负责人单独发送文档$\rightarrow$负责人逐一接收汇总$\rightarrow$统计文档提交情况。可能有人会说直接上传到群文件不就好了?但这样的做法会使文档有信息泄漏的风险。
但一款名为文叔叔的应用提供了快速收集文件的功能,大大简化了文件汇总流程。

收集方

作为收集方只需发出邀请、设置截止时间并拷贝邀请链接即可完成一次收集任务的准备工作。

收集任务创建好后会在收集人账号的收发记录中自己创建关于本次文件收取的任务栏,所有提交的文件都被汇总在该任务中并可批量下载。

提交方

这款软件的另一大优点就体现在提交方操作的简洁性。接收到链接的用户,无论登陆还是未登录,都可以直接打开传文件的入口。只需上传文件,然后留下姓名方便确认身份,点击发送即可完成任务提交。

其余详细说明可以参考文叔叔知乎链接

python统计提交信息

尽管文叔叔提供了十分快捷的文件收集功能,但后续我们还需要手动统计提交情况,但是利用python我们便可以实现实时查询文件提交情况。

这里的实现方式同样使用了selenium库,具体实现原理就不再赘述,直接提供代码并说明如何直接使用。

导入成员

导入成员有两种方式,一种是从excel一次性导入,另一种是手动输入。如果没有编程基础建议采用后者,具体实现方法参照下文name_list实现方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 方法一:excel导入成员信息
import pandas as pd
import numpy as np
name_list = {}
data = pd.read_excel("class_data.xlsx")
data = data.iloc[2:,0]
data = data.to_numpy()
for i in range(len(data)):
name_list[str(data[i])] = 0;

# 方法二:手动添加成员(修改名字即可,一劳永逸)
name_list = {
'杨宇豪':0, '代溟伟':0, '肖卓琦':0, '胡鹏':0, '熊梓旭':0,
'李洪波':0, '洛桑次仁':0, '陈戌':0, '薛宸熙':0, '刘金炜':0 }

汇总提交情况

需要修改项:

  1. user_info:添加账号登录信息(可添加多个)
  2. user:选择登录账户
  3. share_link:提供待统计任务的分享链接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

# 选择登录账户
user = "代溟伟"
# 待统计任务对应分享链接
share_link = "https://wss.pet/s/2575sct1kdj"

# 各用户登录信息(账号密码)
user_info = {
"杨宇豪":['登录用户名', '登录密码'],
"代溟伟":['登录用户名', '登录密码']
}
login_number = user_info[user][0]
login_password = user_info[user][1]

# 不嫌麻烦可以像这样手动添加成员(一劳永逸)
name_list = {
'杨宇豪':0, '代溟伟':0, '肖卓琦':0, '胡鹏':0, '熊梓旭':0,
'李洪波':0, '洛桑次仁':0, '陈戌':0, '薛宸熙':0, '刘金炜':0 }

chrome_options = Options()
chrome_options.add_argument("--headless")

driver = webdriver.Chrome(options=chrome_options)
# driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(5)

print("Entering the website...")
url = "https://www.wenshushu.cn/signin"
driver.get(url)
time.sleep(2)

print("Inputing login info...")
driver.find_element_by_xpath("//div[@id='page_content']/div/div/div/div/ul/li[2]").click()
driver.find_element_by_xpath("//input[@type='text']").click()
driver.find_element_by_xpath("//input[@type='text']").clear()
driver.find_element_by_xpath("//input[@type='text']").send_keys(login_number)
driver.find_element_by_xpath("//input[@type='password']").click()
driver.find_element_by_xpath("//input[@type='password']").clear()
driver.find_element_by_xpath("//input[@type='password']").send_keys(login_password)
driver.find_element_by_xpath("//div[@id='page_content']/div/div/div/div[2]/div/div/button/span").click()
time.sleep(2)

print("Locating to the task...")
url = "https://www.wenshushu.cn/f/" + str(share_link[18:])
driver.get(url)

print("Checking submit info...")
time.sleep(3)
page_info = driver.find_elements_by_css_selector("[class='g-upload_user']")
for i in range(len(page_info)):
name_list[page_info[i].get_attribute('innerText')] = 1
#print(page_info[i].get_attribute('innerText'))

print("Writing detailed list...")
print("unsubmit list:\n")
for name in name_list.keys():
if(name_list[name] == 0):
print(name)
print("\nsubmit list:\n")
for name in name_list.keys():
if(name_list[name] == 1):
print(name)
driver.close()

print("Check Finished!")
-------------本文结束感谢您的阅读-------------