【使用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的第三方库,将每日的提交完成情况发给自己,便于查看和监控是否运行成功!!!!

有一说一,按照自己的思路将自己的想法变成现实的感觉真的太好了,跟可贵的是能完美运行!我爱编程!(部分爱)

本项目是完全原创,自己测试使用的,不可用作错误用途和非法用途,使用请写清出处。

物联沃分享整理
物联沃-IOTWORD物联网 » 【使用selenium和python,完成自动填写提交网页信息,python脚本】

发表评论