[Python]腾讯文档自动健康打卡 2022-01-17

[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() # 退出浏览器