一、所需环境有:
一台自己的Linux CentOS操作系统的服务器,安装有python,chrome浏览器,chromedriver.exe等。
python版本
Chrome版本
chromedriver放置位置:
二、自动提交每日信息脚本代码:
xx一日三检.py
#-*- coding: utf-8 -*-import random
import datetime
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import smtplib
#email 用于构建邮件内容from email.mime.text import MIMEText
#确保以上第三方库都已安装defdoSth():# 把控制网页爬虫selenium程序放在这个类里print(u'这个程序要开始疯狂的运转啦')
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')# chrome_driver = r"D:\Python3.7\Anaconda\Lib\site-packages\selenium\webdriver\chrome\chromedriver.exe"
chrome_driver ="/opt/software/chromedriver"#自己的chromedriver所在位置# 定义一个字典,包含姓名用户名和密码,格式:'姓名 :账号': '密码'
USER ={'学生一 :xxxxxxxx':'xxxxxxxx','学生二:xxxxx':'xxxxxx','学生三:xxxxx':'xxxxxx','学生四:xxxxxx':'xxxxxx','学生五:xxxxxx':'xxxxxxxxxxx'}#循环登录不同的学生。for key in USER:# print(key.split(':')[0])# print(key.split(':')[1])# print(USER[key])# 学生一
driver = webdriver.Chrome(executable_path=chrome_driver, chrome_options=options)#登录要提交每日信息的网址
driver.get('https://xxxxxxx.xxxxx.cn/xxxx/login?')# 将你自己的账号,密码填入对应代码!!print("请先登录!!")
time.sleep(30)# 定位用户名输入框
text_label1 = driver.find_element(By.XPATH,'/html/body/app-root/app-right-root/div/div[2]/div[2]/div[2]/div[2]/div/div/div[1]/app-login-normal/div/form/div[1]/nz-input-group/input')
text_label12 = driver.find_element(By.XPATH,'/html/body/app-root/app-right-root/div/div[2]/div[2]/div[2]/div[2]/div/div/div[1]/app-login-normal/div/form/div[2]/nz-input-group/input')
text_label1.send_keys(key.split(':')[1])
text_label12.send_keys(USER[key])
time.sleep(5)
driver.find_element(By.XPATH,'/html/body/app-root/app-right-root/div/div[2]/div[2]/div[2]/div[2]/div/div/div[1]/app-login-normal/div/form/div[6]/div/button').click()print('登录成功')
time.sleep(40)
driver.find_element(By.ID,'fieldXQ-0').click()# 校区选择
driver.find_element('id','fieldSFLKXX-0').click()# 是,在校内
driver.find_element(By.XPATH,'//*[@id="V1_CTRL5"]/option['+str(random.randint(11,13))+']').click()# 早
driver.find_element(By.XPATH,'//*[@id="V1_CTRL6"]/option['+str(random.randint(11,13))+']').click()# 中
driver.find_element(By.XPATH,'//*[@id="V1_CTRL7"]/option['+str(random.randint(11,13))+']').click()# 晚
driver.find_element(By.ID,'fieldSFFR-1').click()# 否
driver.find_element(By.ID,'fieldGTJZR-1').click()
time.sleep(2)
driver.find_element(By.XPATH,'/html/body/div[4]/form/div/div[1]/div[2]/ul/li[1]/a').click()# 提交
time.sleep(30)
driver.find_element(By.XPATH,'/html/body/div[6]/div/div[2]/button[1]').click()# 好print(key.split(':')[0]+" 已完成!!!!!")print(key.split(':')[0]+" 已完成!!!!!")print(key.split(':')[0]+" 已完成!!!!!")print(key.split(':')[0]+" 已完成!!!!!")print(key.split(':')[0]+" 已完成!!!!!")
driver.close()#将每日信息提交的完成情况发送邮件给自己!!(需要修改自己邮箱的一些设置才能收到)defsend_mail(now):# 发信方的信息:发信邮箱,QQ 邮箱授权码
from_addr ='[email protected]'
password ='xxxxxxxx'# 收信方邮箱
to_addr ='[email protected]'# 发信服务器
smtp_server ='smtp.qq.com'# 邮箱正文内容,第一个参数为内容,第二个参数为格式(plain 为纯文本),第三个参数为编码
today_date = now.date()
msg = MIMEText('xxxx已帮已完成【'+str(today_date)+'】日的三检!!!!!!','plain','utf-8')
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()#定时每日的自动填报提交时间!!defmain(h=17, m=0):# doSth()# now = datetime.datetime.now()# # send_mail(now)# 定义天数# days = 0whileTrue:
now = datetime.datetime.now()print(now.hour, now.minute)if now.hour == h and now.minute == m:#每天的17:00,多10到20秒进行自动提交。
a = random.randint(10,20)
time.sleep(a)print("等待"+str(a)+"秒")
doSth()
send_mail(now)# 每隔60秒检测一次
time.sleep(60)
main()
三、在服务器上以脚本形式运行:
#启动运行该自动网页提交脚本ps -ef |grep python3 #查看python3 的运行程序有哪些cd /root/xxx/One_day_three_inspections #打开自己的python程序脚本路径nohup python3 -u xx一日三检v2.py > logv2.out 2>&1&#以脚本形式运行,不会因为关闭远程连接工具就关闭python程序,并且输出结果到logv2.out#关闭该脚本ps -ef |grep python3 #查看python3 的运行程序有哪些kill xxxxx #根据查看的脚本程序对应的进程编号,进行kiil,即可关闭。
四、大体流程如上所述
因为每天都要提交,有时会忘记,有了这个就不会忘记了。
根据自己的情况再做修改,我的完成成果展示:
脚本及运行结果所在目录:
启动脚本:
每天的结果输出:
每日运行完成所接收到的邮件:
五、总结:
【1】该项目的设计目的是:使用Selenium爬虫的特点,用控制页面各个标签的方式,自动控制浏览器填写和提交一些繁杂和重复操作,来简化生活中的琐事所造成的不必要的麻烦。
【2】该项目的思路:
1.使用Selenium爬虫的特点,控制浏览器自动填写提交。
2.使用python编写,方便简单,便于维护,减少代码量。
3.使用服务器一直运行的优势,让python自动填写提交脚本一直运行,到点执行自动填写提交。
4.使用email的第三方库,将每日的提交完成情况发给自己,便于查看和监控是否运行成功!!!!
有一说一,按照自己的思路将自己的想法变成现实的感觉真的太好了,跟可贵的是能完美运行!我爱编程!(部分爱)
本项目是完全原创,自己测试使用的,不可用作错误用途和非法用途,使用请写清出处。
本文转载自: https://blog.csdn.net/Xiao_cai_gun/article/details/127014196
版权归原作者 宇智波.望 所有, 如有侵权,请联系我们删除。
版权归原作者 宇智波.望 所有, 如有侵权,请联系我们删除。