本人也是一枚苦逼的大學生,很不巧哈,接觸了相關團支書的作業哈,由于學院抓青年大學習抓的比較嚴,時不時讓團支書去更近一下同學們的進度,然后總會有那么幾個同學忘記,這周是張三,李紅,下一周可能就是王二麻子忘記做了,很不巧哈,他們的團支書剛剛學了一手粗制版的python,于是在此探討一下!!!哈哈,廢話就這么多,開始正題
首先宣告:本小白代碼,技術不是很專業,純屬分享探討,大佬勿噴!!!
在寫代碼前,我參考了相關博客的代碼,大致邏輯就是結合爬蟲技術將青年大學習后臺資料拿到進行對比,然后發郵件提醒,這個辦法可行是可行,但是本人在親測后發現還是有那么幾個好學生老是因為學習忘記看郵箱,或者關了郵箱提醒什么的,或者是發郵件時郵箱被定義為垃圾郵件或者,,,,然后我就在想,,,還有沒有其他方法,,,最后我找到了!!!不知不覺又說了一堆廢話,哈哈,第一次寫csdn 博客,嗯,,,嘻嘻!說正事啦說正事啦不然會被打啦
我結合前輩代碼經驗,用到selenium和appium相結合方法,selenium幫我將青年大學習資料獲取下來,當然看自己實際情況吧,據我所了解每個地方后臺不一樣,你可以用其他方法,只要能夠將同學們資料獲取即可,至于方式可以多樣,
from selenium import webdriver
import time
from lxml import etree
import requests
import smtplib
from email.mime.text import MIMEText
from appium import webdriver
from appium.webdriver.extensions.android.nativekey import AndroidKey
time_num = 600 #提醒間隔時間
send_time=600
fp = open('D:/青年大學習提醒/名單1.txt', 'w', encoding='utf-8')
fp.write('\n')
wd = webdriver.Chrome(executable_path='D:/chromedriver.exe')
wd.get('https://jxtw.h5yunban.cn/jxtw-qndxx/admin/login.php')
wd.find_element_by_id('LAY-user-login-username').send_keys('賬號')
time.sleep(1)
wd.find_element_by_id('LAY-user-login-password').send_keys('密碼')
wd.find_element_by_xpath('//*[@id="LAY-user-login"]/div[1]/div[2]/div[3]/button').click()
time.sleep(1)
wd.implicitly_wait(10)
wd.find_element_by_xpath('//*[@id="LAY-system-side-menu"]//a').click()
time.sleep(1)
wd.implicitly_wait(10)
i_frame = wd.find_element_by_class_name('layadmin-iframe')
wd.switch_to.frame(i_frame)
time.sleep(2)
wd.find_element_by_xpath('/html/body/div[1]/div/div/div/div[2]/div[1]/div[3]/div[1]//input').click()
wd.implicitly_wait(10)
wd.find_element_by_xpath('/html/body/div[1]/div/div/div/div[2]/div[1]/div[3]/div[1]//input').clear()
time.sleep(1)
wd.find_element_by_xpath('/html/body/div[1]/div/div/div/div[2]/div[1]/div[3]/div[1]/div/div/dl/dd[55]').click()
time.sleep(1)
wd.find_element_by_xpath('//a[1]').click()
time.sleep(1)
name_list = wd.find_elements_by_xpath('/html/body/div[1]/div/div/div/div[2]/div[2]/div/div[2]/table/tbody/tr/td[6]')
time.sleep(1)
for name in name_list:
name_new = name.text
fp.write(name_new + '\n')
time.sleep(1)
wd.find_element_by_xpath('//a[2]').click()
time.sleep(1)
name_list = wd.find_elements_by_xpath('/html/body/div[1]/div/div/div/div[2]/div[2]/div/div[2]/table/tbody/tr/td[6]')
time.sleep(1)
for name in name_list:
name_new = name.text
fp.write(name_new + '\n')
其實邏輯很簡單就是將后臺資料中已經完成了的人的名單下載下來,上邊代碼比較難看哈,由于本人 不是計算機專業的代碼追求的是能跑即可,上邊我寫的代碼主要是爬取后臺名單然后保存到名單1.txt里邊,
下面是我關于資料清洗對比那塊的代碼,主要是為了將李紅啊張三的網名啥的轉換為真實的名字啥的,太難了呀,,,
name_list = []
name_list1 = []
list_nofinish_name = []
list_nofinish_email = []
with open('D:/青年大學習提醒/名單.txt', 'r', encoding='utf_8') as fp:
list = fp.readlines()
for li in list:
li_1 = li.index('\n')
li_2 = li[0:li_1]
name_list.append(li_2)
with open('D:/青年大學習提醒/名單1.txt', 'r', encoding='utf_8') as fp1:
list1 = fp1.readlines()
for li1 in list1:
li1_1 = li1.index('\n')
li1_2 = li1[0:li1_1]
name_list1.append(li1_2)
i = 0
for name in name_list:
try:
name_list1.index(name)
# print(f'{name}已經完成!!')
except:
# print(f'{name}沒有完成!!')
list_nofinish_name.append(name)
i = i + 1
if i == 0:
print('檢查完畢,全體同學已經完成!!!')
else:
print(f'檢查完畢,1班沒有完成人數為: {i}人')
# print(list_nofinish_name)
list_email = []
with open('D:/青年大學習提醒/郵箱.txt', 'r', encoding='utf_8') as fp3:
e_mail = fp3.readlines()
for e in e_mail:
lisy = e.split()
name_1 = lisy[0][2:]
num = lisy[1] + '@qq.com'
list_new = [name_1, num]
list_email.append(list_new)
name_no=[]
qq_num_no=[]
for nofinish_name in list_nofinish_name:
for mess in list_email:
try:
mess.index(nofinish_name)
# print(f'mess:{mess}')
# print(f'nofinish_name:{nofinish_name}')
list_nofinish_email.append(mess[1])
e_mail_no=mess[1].replace('@qq.com','')
qq_num_no.append(e_mail_no)
if mess[0]=='2019041007000122':#這段代碼意思是如果遇到網名為2019041007000122就把他改為王二麻子輸出
name_no.append('王二麻子')
continue
if mess[0]=='2019041007000124':
name_no.append('李紅')
continue
if mess[0]=='2019041007000110':
name_no.append('張三')
continue
else:
name_no.append(mess[0])
except:
pass
額,,,可能比較亂哈,本人還不太喜歡用函式封裝,大家看思路即可哈哈,我的思路是將下載的名單1和自己創捷的名單進行對比篩選就可以啦.這些前輩門都有涉及的不難,
下面appium才是重頭戲
def QQ_send(QQ, text, number):
desired_caps = {
"platformName": "Android",
"platformVersion": "7",
"deviceName": "127.0.0.1:62001",
"appPackage": "com.tencent.mobileqq",
"appActivity": ".activity.SplashActivity",
"noReset": True
}
desired_caps["unicodeKeyboard"] = "True"
desired_caps["resetKeyboard"] = "True"
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
driver.implicitly_wait(5)
el1 = driver.find_element_by_accessibility_id("搜索")
el1.click()
el2 = driver.find_element_by_id("com.tencent.mobileqq:id/et_search_keyword")
driver.implicitly_wait(7)
time.sleep(1)
el2.send_keys('班級群')
time.sleep(1)
driver.implicitly_wait(7)
el3 = driver.find_element_by_xpath(
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.AbsListView/android.widget.LinearLayout[2]/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.TextView[1]")
el3.click()
el1 = driver.find_element_by_accessibility_id("群聊設定")
el1.click()
el2 = driver.find_element_by_id("com.tencent.mobileqq:id/eom")
el2.click()
el3 = driver.find_element_by_accessibility_id("搜索")
el3.click()
el4 = driver.find_element_by_id("com.tencent.mobileqq:id/et_search_keyword")
el4.send_keys(QQ)
el3 = driver.find_element_by_id("com.tencent.mobileqq:id/dvo")
el3.click()
el4 = driver.find_element_by_accessibility_id("發訊息")
el4.click()
for i in range(number):
el5 = driver.find_element_by_id("com.tencent.mobileqq:id/input")
el5.click()
el6 = driver.find_element_by_id("com.tencent.mobileqq:id/input")
time.sleep(1)
el6.send_keys(text)
driver.implicitly_wait(7)
time.sleep(1)
el7 = driver.find_element_by_id("com.tencent.mobileqq:id/fun_btn")
el7.click()
driver.implicitly_wait(3)
driver.back()
這是我寫的封裝函式,主要定義了一個QQ_send(qq,text,number),干嘛用的捏,上邊不是已經篩選出名字了嘛,接下來就是根據這些沒有完成的同學進行在線對話框提醒,appium跟selenium差不多,在電腦上裝一個模擬器然后驅動模擬器登錄小號充當機器人即可
下邊是完整代碼:
# -*- codeing = utf-8 -*-
# @Time : 2021/10/28 0:57
# @Author :
# @File : 青年大學習QQ提醒介面.py
# @software: PyCharm
# -*- coding:utf-8 -*-
from selenium import webdriver
import time
from lxml import etree
import requests
import smtplib
from email.mime.text import MIMEText
from appium import webdriver
from appium.webdriver.extensions.android.nativekey import AndroidKey
time_num = 600 #提醒間隔時間
send_time=600
fp = open('D:/青年大學習提醒/名單1.txt', 'w', encoding='utf-8')
fp.write('\n')
wd = webdriver.Chrome(executable_path='D:/chromedriver.exe')
wd.get('https://jxtw.h5yunban.cn/jxtw-qndxx/admin/login.php')
wd.find_element_by_id('LAY-user-login-username').send_keys('賬號')
time.sleep(1)
wd.find_element_by_id('LAY-user-login-password').send_keys('密碼')
wd.find_element_by_xpath('//*[@id="LAY-user-login"]/div[1]/div[2]/div[3]/button').click()
time.sleep(1)
wd.implicitly_wait(10)
wd.find_element_by_xpath('//*[@id="LAY-system-side-menu"]//a').click()
time.sleep(1)
wd.implicitly_wait(10)
i_frame = wd.find_element_by_class_name('layadmin-iframe')
wd.switch_to.frame(i_frame)
time.sleep(2)
wd.find_element_by_xpath('/html/body/div[1]/div/div/div/div[2]/div[1]/div[3]/div[1]//input').click()
wd.implicitly_wait(10)
wd.find_element_by_xpath('/html/body/div[1]/div/div/div/div[2]/div[1]/div[3]/div[1]//input').clear()
time.sleep(1)
wd.find_element_by_xpath('/html/body/div[1]/div/div/div/div[2]/div[1]/div[3]/div[1]/div/div/dl/dd[55]').click()
time.sleep(1)
wd.find_element_by_xpath('//a[1]').click()
time.sleep(1)
name_list = wd.find_elements_by_xpath('/html/body/div[1]/div/div/div/div[2]/div[2]/div/div[2]/table/tbody/tr/td[6]')
time.sleep(1)
for name in name_list:
name_new = name.text
fp.write(name_new + '\n')
time.sleep(1)
wd.find_element_by_xpath('//a[2]').click()
time.sleep(1)
name_list = wd.find_elements_by_xpath('/html/body/div[1]/div/div/div/div[2]/div[2]/div/div[2]/table/tbody/tr/td[6]')
time.sleep(1)
for name in name_list:
name_new = name.text
fp.write(name_new + '\n')
name_list = []
name_list1 = []
list_nofinish_name = []
list_nofinish_email = []
with open('D:/青年大學習提醒/名單.txt', 'r', encoding='utf_8') as fp:
list = fp.readlines()
for li in list:
li_1 = li.index('\n')
li_2 = li[0:li_1]
name_list.append(li_2)
with open('D:/青年大學習提醒/名單1.txt', 'r', encoding='utf_8') as fp1:
list1 = fp1.readlines()
for li1 in list1:
li1_1 = li1.index('\n')
li1_2 = li1[0:li1_1]
name_list1.append(li1_2)
i = 0
for name in name_list:
try:
name_list1.index(name)
# print(f'{name}已經完成!!')
except:
# print(f'{name}沒有完成!!')
list_nofinish_name.append(name)
i = i + 1
if i == 0:
print('檢查完畢,全體同學已經完成!!!')
else:
print(f'檢查完畢,1班沒有完成人數為: {i}人')
# print(list_nofinish_name)
list_email = []
with open('D:/青年大學習提醒/郵箱.txt', 'r', encoding='utf_8') as fp3:
e_mail = fp3.readlines()
for e in e_mail:
lisy = e.split()
name_1 = lisy[0][2:]
num = lisy[1] + '@qq.com'
list_new = [name_1, num]
list_email.append(list_new)
name_no=[]
qq_num_no=[]
for nofinish_name in list_nofinish_name:
for mess in list_email:
try:
mess.index(nofinish_name)
# print(f'mess:{mess}')
# print(f'nofinish_name:{nofinish_name}')
list_nofinish_email.append(mess[1])
e_mail_no=mess[1].replace('@qq.com','')
qq_num_no.append(e_mail_no)
if mess[0]=='2019041007000122':
name_no.append('王二麻子')
continue
if mess[0]=='2019041007000124':
name_no.append('張三')
continue
if mess[0]=='2019041007000110':
name_no.append('李紅')
continue
else:
name_no.append(mess[0])
except:
pass
if len(name_no)>0:
print(name_no)
# print(len(name_no))
# print(list_nofinish_email)
# print(qq_num_no)
def QQ_send(QQ, text, number):
desired_caps = {
"platformName": "Android",
"platformVersion": "7",
"deviceName": "127.0.0.1:62001",
"appPackage": "com.tencent.mobileqq",
"appActivity": ".activity.SplashActivity",
"noReset": True
}
desired_caps["unicodeKeyboard"] = "True"
desired_caps["resetKeyboard"] = "True"
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
driver.implicitly_wait(5)
el1 = driver.find_element_by_accessibility_id("搜索")
el1.click()
el2 = driver.find_element_by_id("com.tencent.mobileqq:id/et_search_keyword")
driver.implicitly_wait(7)
time.sleep(1)
el2.send_keys('班級群')
time.sleep(1)
driver.implicitly_wait(7)
el3 = driver.find_element_by_xpath(
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.AbsListView/android.widget.LinearLayout[2]/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.TextView[1]")
el3.click()
el1 = driver.find_element_by_accessibility_id("群聊設定")
el1.click()
el2 = driver.find_element_by_id("com.tencent.mobileqq:id/eom")
el2.click()
el3 = driver.find_element_by_accessibility_id("搜索")
el3.click()
el4 = driver.find_element_by_id("com.tencent.mobileqq:id/et_search_keyword")
el4.send_keys(QQ)
el3 = driver.find_element_by_id("com.tencent.mobileqq:id/dvo")
el3.click()
el4 = driver.find_element_by_accessibility_id("發訊息")
el4.click()
for i in range(number):
el5 = driver.find_element_by_id("com.tencent.mobileqq:id/input")
el5.click()
el6 = driver.find_element_by_id("com.tencent.mobileqq:id/input")
time.sleep(1)
el6.send_keys(text)
driver.implicitly_wait(7)
time.sleep(1)
el7 = driver.find_element_by_id("com.tencent.mobileqq:id/fun_btn")
el7.click()
driver.implicitly_wait(3)
driver.back()
text=[]
for name_no_1 in name_no:
text_1=f'尊敬的1班{name_no_1}同學,您好:\n 請您盡快完成青年大學習的學習!!!\n 請您盡快完成青年大學習的學習!!!\n ' \
'請您盡快完成青年大學習的學習!!!\n \n \n \n 學習青年大學習是讓每一位青年進行學習,提高思想素質,熱愛自己的國家,' \
'關心國家大事,爭取為了國家繁榮富強而努力奮斗,學習是永無止境的,特別是趁青春年少時,更應當緊緊抓住時間,努力學習,為以后作業提供知識儲備' \
',永無止境的學習會在不知不覺中改變自己的命運!!!'
text.append(text_1)
if len(list_nofinish_email) > 0:
i=0
for i in range(len(name_no)):
QQ_send(QQ=qq_num_no[i],text=text[i],number=3)#number是發送訊息的條數
print(f'已經提醒{name_no[i]}去完成青年大學習!!!')
i + 1
主要是跟大家探討學習,這代碼還有很多改進的地方,請對一名三個月上手python非計算機專業小白手下留情
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/341914.html
標籤:其他
