[Python]腾讯文档健康打卡 2022/1/17更新
1. 前置准备:
一个Python编辑器,如: pycharm
安装好Python并设置环境变量
Python官网
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(): # 获取当前坐标
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): # 去目标单元格
xy = get_xy() # 获得当前坐标
while xy != goto_xy: # 不停的移动直到到达目标位置 可能会死循环
print("目标位置", goto_xy, "> 当前位置", 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)
# 自动登录网页
print()
driver = webdriver.Chrome()
driver.get(
"填你的链接"
) # 腾讯文档的链接
# 登入账号,用快速登入的功能,前提,已经电脑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")
driver.find_element(By.ID, "img_out_XXXXXXXXX").click() # 这里要改成自己的QQ号
print("快捷登录成功")
except: # 发生错误时 切换成 账号密码登录(未经过测试,可能无用)
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]根据实际情况修改
list_xy = [date, 27] # 要填写的单元格,会根据日期变化 [27]改成自己所在的行
list_text = ["湖北XX平安", "湖北XX平安", "湖北XX平安", "湖北XX平安"] # 因为要帮寝室的一起填所以写的连填4行健康打卡 只填一个的话只写一个文本就行
gotoXY = list_xy[0] # 目标单元格的数字坐标
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("今日以完成打卡,不再重复.")
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() # 退出浏览器