【使用selenium和python,完成自动填写提交网页信息,python脚本】
一、所需环境有:
一台自己的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
#确保以上第三方库都已安装
def doSth():
# 把控制网页爬虫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()
#将每日信息提交的完成情况发送邮件给自己!!(需要修改自己邮箱的一席设置才能收到)
def send_mail(now):
# 发信方的信息:发信邮箱,QQ 邮箱授权码
from_addr = 'xxxxxxxxxx@qq.com'
password = 'xxxxxxxx'
# 收信方邮箱
to_addr = 'xxxxxxxxxx@qq.com'
# 发信服务器
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()
#定时每日的自动填报提交时间!!
def main(h=17, m=0):
# doSth()
# now = datetime.datetime.now()
# # send_mail(now)
# 定义天数
# days = 0
while True:
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的第三方库,将每日的提交完成情况发给自己,便于查看和监控是否运行成功!!!!
有一说一,按照自己的思路将自己的想法变成现实的感觉真的太好了,跟可贵的是能完美运行!我爱编程!(部分爱)
本项目是完全原创,自己测试使用的,不可用作错误用途和非法用途,使用请写清出处。