如何用python實現騰訊文檔自動打卡並定時執行

最近學了些Web,瞭解了一些selenum包內函數使用,就寫了下自動健康打卡,並用windows任務計劃程序定時執行,健康打卡這個針對特定網站,所以對於通用化使用倒沒有太大用處,但關於騰訊文檔如何填寫,因爲定位不了表格就沒得想法。。然後和同伴討論了下,一開始採用的是先填寫,再查找並替換,即先填寫一些無關信息,比如名字簡寫,然後再通過點擊編輯欄中的查找功能,在上面輸入欄進行字符增減操作。

#    1.0版本,通過先填寫內容,再替換實現
    driver.find_element_by_xpath('//*[@id="editmenu"]/div/div/div[1]').click()
    ActionChains(driver).key_down(Keys.CONTROL).key_down('f').perform() # 打開查找功能
    time.sleep(3)
    try:
        driver.find_element_by_id('search-panel-input').send_keys("xxx")    # 這裏很魔性,一直沒找出原因,同伴告訴我才知道如何修改
        driver.find_element_by_id('search-panel-input').send_keys("xxx")	# xxx是自己隨便寫的標識符
        time.sleep(3)
        driver.find_element_by_id('alloy-simple-text-editor').click()
        for i in range(1,4):    # 刪去標識符
            driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.BACK_SPACE)
        
        elmet = driver.find_element_by_id('alloy-simple-text-editor')
        elmet.send_keys('ok')   # 輸入ok
        time.sleep(1)
        elmet.send_keys(Keys.ENTER)
        print("已完成打卡!!!")
    except:
        print("出現某些異常!")

上面這個可以針對大多數填寫情況,但這種過於繁瑣。
一開始也注意到了域名的特殊性,即如下所示,打開騰訊文檔,我們會發現,每次點擊一個表格,域名後面的&c=xx 會更改,但不知道如何利用。
在這裏插入圖片描述
後面經同伴提醒後面的A0A0代表頁數就恍然大悟,其實原先的思路繞了一個大圈去定位表格,沒想到表格信息就已經存在訪問的域名中,然後就想直接通過datetime獲取當前day,然後根據騰訊文檔表格中的日期獲取列號,這裏注意下,程序中對應的是如下圖所示的表格,因爲這裏A對應的是空,所以得+1。
在這裏插入圖片描述

代碼如下所示

# -*- coding: utf-8 -*-
"""
Created on Sun Apr  5 11:14:09 2020

@author: 蟲二
"""
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys
import time
import datetime
# 填寫騰訊文檔
def visit_txt():
    data = datetime.date.today()	# 獲取當前時間
    now = data.day
    # 獲取行列式得根據實際需求修改
    start = 2   # 根據第一列時間,需要修改
    c = chr(now-start+1+65) # 獲取列號, 65即是'A'
    h = 8	# 行號,即你要填寫對應的行號
    print(c)
    url = "http:... c=" + c + str(h) +"A0A0" # 需要修改
    driver = webdriver.Chrome("chromedriver.exe")
    driver.get(url)
    driver.implicitly_wait(10)
    elmet = driver.find_element_by_class_name("unlogin-container")
    elmet.click()
    driver.implicitly_wait(10)
    # 得提前登錄qq,因爲這裏用了快捷登錄接口
    driver.switch_to.frame("login_frame")
    elmet = driver.find_element_by_id("img_out_qq號")# 需要修改
    elmet.click()
    # 轉換frame
    driver.switch_to.parent_frame() 
    time.sleep(5)

    try:
        elmet = driver.find_element_by_id('alloy-simple-text-editor')
        elmet.click()
        elmet.send_keys('xxx')   # 輸入xxx,即你想輸入的字符
        time.sleep(1)
        elmet.send_keys(Keys.ENTER)
        time.sleep(3)
        print("今天已成功打卡!!!")
    except:
        print("出現某些異常,請檢查!!!")

if __name__ == "__main__" :
     visit_txt()

任務計劃程序

Window有個任務計劃程序功能,還是很有用的,可以定時執行程序。
打開後點擊創建,然後繼續下一步設置名稱,觸發器…
在這裏插入圖片描述
需要注意的是下面這部分,第一個程序和腳本就找到你配置好環境中的python.exe,比如D:\Anaconda3\python.exe,參數就填寫你要運行的程序,起始地址可以填寫python.exe父目錄,比如D:\Anaconda3
在這裏插入圖片描述

題外話

這次有同伴的幫助,爬出了不少坑,這過程中也學到了挺多東西,也發現瞭解的確實很少,還得繼續去了解相關內容.

另:運行程序需配置python環境,安裝selenium等相關包,並安裝chrome.exe,這個配置過程可能會有點麻煩,但還是挺有意思的,建議用anaconda3環境,比較容易上手和管理庫,安裝教程其他博客都寫的很詳細。
關於anaconda3遇到了一個坑,就是Anaconda3環境中有兩個python.exe腳本,需要注意的是它們的目錄不同,例如在D:\Anaconda3目錄下的是用conda管理庫的,就是平時用conda install xxx,下載的所在的環境。
但在D:\Anaconda3\envs\temp.py\python.exe,則是基於pip管理庫的,這個是基本的python,所以很多庫都沒有。
所以在配置Pycharm和VScode時需要注意這個腳本路徑。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章