知乎文章若有排版問題請見諒,原文放在個人博客中【歡迎互踩!】
文叔叔文檔收集
使用動機
在我們的學習工作中,少不了要讓大家集體提交文件的情況,舉個最簡單的例子:收作業。
傳統的文件收集流程大致是:群內發出文件提交通知
可能有人會說直接上傳到群文件不就好了?但這樣的做法會使文檔有信息泄漏的風險。 但一款名為文叔叔
的應用提供了快速收集文件的功能,大大簡化了文件匯總流程。
收集方
作為收集方只需發出邀請、設置截止時間并拷貝邀請鏈接即可完成一次收集任務的準備工作。

收集任務創建好后會在收集人賬號的收發記錄中自己創建關于本次文件收取的任務欄,所有提交的文件都被匯總在該任務中并可批量下載。

提交方
這款軟件的另一大優點就體現在提交方操作的簡潔性。接收到鏈接的用戶,無論登陸還是未登錄,都可以直接打開傳文件的入口。只需上傳文件,然后留下姓名方便確認身份,點擊發送即可完成任務提交。

其余詳細說明可以參考文叔叔知乎鏈接。
python統計提交信息
盡管文叔叔提供了十分快捷的文件收集功能,但后續我們還需要手動統計提交情況,但是利用python我們便可以實現實時查詢文件提交情況。

這里的實現方式同樣使用了selenium庫,具體實現原理就不再贅述,直接提供代碼并說明如何直接使用。
導入成員
導入成員有兩種方式,一種是從excel一次性導入,另一種是手動輸入。如果沒有編程基礎建議采用后者,具體實現方法參照下文name_list
實現方法。
# 方法一: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
:提供待統計任務的分享鏈接
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!")