Python——自動簽到指令碼

Piwe1發表於2020-10-10

Python——自動簽到指令碼

技術參考:點此跳轉

如果寫程式碼是為了幹壞事,那將動力無窮。

業務分析:

1. 打卡 selenium 實現

具體的可以看看 技術參考連結裡大佬的具體實現思路

def AutoSignIn(user_root,user_password):
    root = user_root
    password = user_password
    url = 'http://my.hhu.edu.cn/login.portal'
    chromedriver_path = "C:/Program Files (x86)/Google/Chrome/Application/chromedriver.exe"
    driver = webdriver.Chrome(chromedriver_path)
    driver.get(url)
    driver.find_element_by_xpath('//*[@id="username"]').send_keys(root)
    driver.find_element_by_xpath('//*[@id="password"]').send_keys(password)
    driver.find_element_by_xpath('//*[@id="changeBack"]/tbody/tr/td[2]/table[1]/tbody/tr[2]/td/div/input[1]').click()
    sleep(5);
    form = 'http://form.hhu.edu.cn/pdc/form/list'
    driver.get(form)
    sleep(5);
    driver.find_element_by_xpath('/html/body/div[1]/div[4]/div/section/section/div/a/div[2]').click()
    sleep(5);
    driver.find_element_by_xpath('//*[@id="saveBtn"]').click()
    sleep(5);

2. 郵件通知

def sendEmail(reciver):
    # 發件方
    from_addr = 'yours@qq.com'
    password = 'yours' # 授權碼的獲取方式可以百度
    # 收件方
    to_addr = reciver
    # 伺服器
    smtp_server = 'smtp.qq.com'

    #獲取時間
    i = datetime.datetime.now()
    #郵件內容
    content = 'DedSec 已經幫你在' + str(i) + ',這個時間完成了你煩人的河海大學健康打卡!##請勿回覆##'
    # 郵箱正文內容,第一個引數為內容,第二個引數為格式(plain 為純文字),第三個引數為編碼
    msg = MIMEText(content, 'plain', 'utf-8')

    # 郵件頭資訊
    msg['From'] = Header(from_addr)
    msg['To'] = Header(to_addr)
    msg['Subject'] = Header('DedSec')

    # 開啟發信服務,這裡使用的是加密傳輸
    server = smtplib.SMTP_SSL(smtp_server)
    server.connect(smtp_server, 465)
    # 登入發信郵箱
    server.login(from_addr, password)
    # 傳送郵件
    server.sendmail(from_addr, to_addr, msg.as_string())
    # 關閉伺服器
    server.quit()

3. 使用者型別

class user_info:
    username = ''
    password = ''
    email = ''
    def __init__(self,userName,passWord,Email):
        self.username = userName
        self.password = passWord
        self.email = Email

4. 完整程式碼

from selenium import webdriver
from time import sleep
# smtplib 用於郵件的發信動作
import smtplib
# email 用於構建郵件內容
from email.mime.text import MIMEText
# 用於構建郵件頭
from email.header import Header
#日期與時間
import datetime
import time

class user_info:
    username = ''
    password = ''
    email = ''
    def __init__(self,userName,passWord,Email):
        self.username = userName
        self.password = passWord
        self.email = Email

def AutoSignIn(user_root,user_password):
    root = user_root
    password = user_password
    url = 'http://my.hhu.edu.cn/login.portal'
    chromedriver_path = "C:/Program Files (x86)/Google/Chrome/Application/chromedriver.exe"
    driver = webdriver.Chrome(chromedriver_path)
    driver.get(url)
    driver.find_element_by_xpath('//*[@id="username"]').send_keys(root)
    driver.find_element_by_xpath('//*[@id="password"]').send_keys(password)
    driver.find_element_by_xpath('//*[@id="changeBack"]/tbody/tr/td[2]/table[1]/tbody/tr[2]/td/div/input[1]').click()
    sleep(5);
    form = 'http://form.hhu.edu.cn/pdc/form/list'
    driver.get(form)
    sleep(5);
    driver.find_element_by_xpath('/html/body/div[1]/div[4]/div/section/section/div/a/div[2]').click()
    sleep(5);
    driver.find_element_by_xpath('//*[@id="saveBtn"]').click()
    sleep(5);

def sendEmail(reciver):
    # 發件方
    from_addr = 'yours@qq.com'
    password = 'yours'
    # 收件方
    to_addr = reciver
    # 伺服器
    smtp_server = 'smtp.qq.com'

    #獲取時間
    i = datetime.datetime.now()
    #郵件內容
    content = 'DedSec 已經幫你在' + str(i) + ',這個時間完成了你煩人的河海大學健康打卡!##請勿回覆##'
    # 郵箱正文內容,第一個引數為內容,第二個引數為格式(plain 為純文字),第三個引數為編碼
    msg = MIMEText(content, 'plain', 'utf-8')

    # 郵件頭資訊
    msg['From'] = Header(from_addr)
    msg['To'] = Header(to_addr)
    msg['Subject'] = Header('DedSec')

    # 開啟發信服務,這裡使用的是加密傳輸
    server = smtplib.SMTP_SSL(smtp_server)
    server.connect(smtp_server, 465)
    # 登入發信郵箱
    server.login(from_addr, password)
    # 傳送郵件
    server.sendmail(from_addr, to_addr, msg.as_string())
    # 關閉伺服器
    server.quit()

if __name__ == '__main__':
    #劉生偉
    user = user_info('username','password','yours@qq.com')
    userList = [user];
    for i in range (len(userList)):
        AutoSignIn(userList[i].username,userList[i].password)
        sendEmail(userList[i].email)
        print("打卡完畢,郵件傳送完畢")
        sleep(5)
    print("全部完畢")

因為適用性比較低,資料直接儲存在程式碼裡,如果可以接收大使用者量,可以考慮使用資料庫。

相關文章