[Python]騰訊文檔健康打卡 2022/1/17更新
有什么不懂的可以參照這個教程,我就是以這個為基礎(chǔ)做出來的
1. 前置準(zhǔn)備:
一個Python編輯器音诫,如:pycharm
-
安裝好Python并設(shè)置環(huán)境變量
Python官網(wǎng)
cmd輸入[python]和[pip]驗證一下環(huán)境變量配置是否成功
-
pip 安裝 selenium 以及 openpyxl
打開cmd輸入以下命令
(記得不能掛VPN,掛了會出錯)
pip install selenium
pip install openpyxl
安裝Chrome谷歌瀏覽器
-
下載對應(yīng)版本的chromedriver
阿里鏡像
打開谷歌瀏覽器的關(guān)于 可以看見內(nèi)核版本
放在Python安裝目錄 就環(huán)境變量那個
2. 正式開始:
打開pycharm新建一個項目
新建一個Python文件
-
接下來就是代碼了疯淫,主要思路就是通過方向鍵實現(xiàn)表格行列移動到目標(biāo)表格:
import datetime import time from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys def get_xy(): # 獲取當(dāng)前坐標(biāo) a1 = driver.find_element(By.CLASS_NAME, "bar-label").text xy_str = ["", ""] for i in a1: if 'A' <= i <= 'Z': xy_str[0] += str(ord(i) - ord('A') + 1) else: xy_str[1] += i xy_int = [int(xy_str[0]), int(xy_str[1])] return xy_int def goto(goto_xy): # 去目標(biāo)單元格 xy = get_xy() # 獲得當(dāng)前坐標(biāo) while xy != goto_xy: # 不停的移動直到到達(dá)目標(biāo)位置 可能會死循環(huán) print("目標(biāo)位置", goto_xy, "> 當(dāng)前位置", xy, "> ", end='') if xy[0] > goto_xy[0]: ActionChains(driver).send_keys(Keys.LEFT).perform() print('←', end='') elif xy[0] < goto_xy[0]: ActionChains(driver).send_keys(Keys.RIGHT).perform() print('→', end='') if xy[1] > goto_xy[1]: ActionChains(driver).send_keys(Keys.UP).perform() print('↑', end='') elif xy[1] < goto_xy[1]: ActionChains(driver).send_keys(Keys.DOWN).perform() print('↓', end='') xy = get_xy() print(" > 移動后位置", xy) # 自動登錄網(wǎng)頁 print() driver = webdriver.Chrome() driver.get( "填你的鏈接" ) # 騰訊文檔的鏈接 # 登入賬號,用快速登入的功能,前提,已經(jīng)電腦qq登入了 time.sleep(3) # 等待3秒 driver.find_element(By.ID, "header-login-btn").click() driver.implicitly_wait(1) driver.find_element(By.ID, 'qq-tabs-title').click() driver.implicitly_wait(1) driver.switch_to.frame("login_frame") try: driver.find_element(By.ID, "img_out_XXXXXXXXX").click() # 這里要改成自己的QQ號 print("快捷登錄成功") except: # 發(fā)生錯誤時 切換成 賬號密碼登錄(未經(jīng)過測試,可能無用) driver.find_element(By.ID, "switcher_plogin").click() time.sleep(1) driver.find_element(By.ID, "u").send_keys("") # qq driver.find_element(By.ID, "p").send_keys("") # 密碼 driver.find_element(By.ID, "login_button").click() print("賬號登錄成功") driver.switch_to.parent_frame() time.sleep(3) date = datetime.datetime.now().day + 2 # 這里[2]根據(jù)實際情況修改 list_xy = [date, 27] # 要填寫的單元格,會根據(jù)日期變化 [27]改成自己所在的行 list_text = ["湖北XX平安", "湖北XX平安", "湖北XX平安", "湖北XX平安"] # 因為要幫寢室的一起填所以寫的連填4行健康打卡 只填一個的話只寫一個文本就行 gotoXY = list_xy[0] # 目標(biāo)單元格的數(shù)字坐標(biāo) goto(gotoXY) for i in range(len(list_text)): text = list_text[i] # 打卡文本信息 driver.find_element(By.CLASS_NAME, 'formula-input').click() # 選中編輯框 editor = driver.find_element(By.ID, 'alloy-simple-text-editor') # 保存編輯框元素 if text in editor.text: # 如果編輯框里包含打卡文本 print("今日以完成打卡,不再重復(fù).") else: ActionChains(driver).key_down(Keys.CONTROL).key_down('a').perform() # 全選 editor.send_keys(text) # 填充健康打卡信息 print("完成打卡") editor.send_keys(Keys.ENTER) # 回車 time.sleep(10) # 等待10秒人工核對是否正確 driver.quit() # 退出瀏覽器