一、所需环境有:
一台自己的Linux CentOS操作系统的服务器,安装有python,chrome浏览器,chromedriver.exe等。
python版本
Chrome版本
chromedriver放置位置:
二、自动提交每日信息脚本代码:
xx一日三检.py
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
from email.mime.text import MIMEText
def doSth():
print(u'这个程序要开始疯狂的运转啦')
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
chrome_driver = "/opt/software/chromedriver"
USER = {'学生一 :xxxxxxxx': 'xxxxxxxx', '学生二:xxxxx': 'xxxxxx', '学生三:xxxxx': 'xxxxxx', '学生四:xxxxxx': 'xxxxxx', '学生五:xxxxxx': 'xxxxxxxxxxx'}
for key in USER:
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()
def send_mail(now):
from_addr = 'xxxxxxxxxx@qq.com'
password = 'xxxxxxxx'
to_addr = 'xxxxxxxxxx@qq.com'
smtp_server = 'smtp.qq.com'
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()
def main(h=17, m=0):
while True:
now = datetime.datetime.now()
print(now.hour, now.minute)
if now.hour == h and now.minute == m:
a = random.randint(10, 20)
time.sleep(a)
print("等待"+str(a)+"秒")
doSth()
send_mail(now)
time.sleep(60)
main()
三、在服务器上以脚本形式运行:
ps -ef |grep python3
cd /root/xxx/One_day_three_inspections
nohup python3 -u xx一日三检v2.py > logv2.out 2>&1 &
ps -ef |grep python3
kill xxxxx
四、大体流程如上所述
因为每天都要提交,有时会忘记,有了这个就不会忘记了。 根据自己的情况再做修改,我的完成成果展示: 脚本及运行结果所在目录: 启动脚本: 每天的结果输出: 每日运行完成所接收到的邮件:
五、总结:
【1】该项目的设计目的是:使用Selenium爬虫的特点,用控制页面各个标签的方式,自动控制浏览器填写和提交一些繁杂和重复操作,来简化生活中的琐事所造成的不必要的麻烦。
【2】该项目的思路:
1.使用Selenium爬虫的特点,控制浏览器自动填写提交。
2.使用python编写,方便简单,便于维护,减少代码量。
3.使用服务器一直运行的优势,让python自动填写提交脚本一直运行,到点执行自动填写提交。
4.使用email的第三方库,将每日的提交完成情况发给自己,便于查看和监控是否运行成功!!!!
有一说一,按照自己的思路将自己的想法变成现实的感觉真的太好了,跟可贵的是能完美运行!我爱编程!(部分爱)
本项目是完全原创,自己测试使用的,不可用作错误用途和非法用途,使用请写清出处。
|