自动化签到脚本(习讯云)

前言

    由于技术的革新,人们的生活相较于上个世纪已经发生了天翻地覆的变化。例如我校已采用习讯云平台为实习学生提供实习管理、毕业就业数据跟踪分析和校企互动云平台,实现学校实习管理、毕业就业管理、校企合作流程化、智能化、精细化和数据化。个别民办院校要求365天实习打卡,才能算满实习任务。于是,就有了关于签到的自动化程序。感谢便民查询网(https://jingweidu.bmcx.com/)提供经纬度数据,也感谢大家的支持。

正文

selenium库的安装

    Selenium 是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如打开网页,抓取数据等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。对于一些 JavaScript 动态渲染的页面来说,此种抓取方式非常有效

为什么要自动化:
    很多网站数据是来自于接口,且对接口做了加密,我们可以使用selenium打开浏览器,访问网页让动态数据变成静态,从而绕过反爬虫手段。

一. 环境搭建
    本节以 Chrome 为例来讲解 Selenium 的用法。在开始之前,请确保已经正确安装好了 Chrome 浏览器并配置好了 ChromeDriver。另外,还需要正确安装好 Python 的 Selenium 库

1.环境安装
谷歌下载(自行下载)

pip install selenium  #库的安装

2.安装驱动
官网:chromedriver

注意
~驱动要对应浏览器版本,否者会无法启动
~禁止浏览器更新 打开cmd 输入services.msc 打开后台服务,把浏览器自动更新给禁止
~原理:selenium根据驱动打开浏览器进行功能操作

二. 声明浏览器对象
    Selenium 支持非常多的浏览器,如 Chrome、Firefox、Edge 等,还有 Android、BlackBerry 等手机端的浏览器。另外,也支持无界面浏览器 PhantomJS。

初始化

from selenium import webdriver

browser = webdriver.Chrome()
browser = webdriver.Firefox()
browser = webdriver.Edge()
browser = webdriver.PhantomJS()
browser = webdriver.Safari()

    这样就完成了浏览器对象的初始化并将其赋值为 browser 对象。接下来,我们要做的就是调用 browser 对象,让其执行各个动作以模拟浏览器操作。

三. 基本使用
加载页面

from selenium import webdriver
import time
from selenium.webdriver.common.by import By
# 打开指定(chrome)浏览器
browser = webdriver.Chrome()
# 指定加载页面
browser.get("http://www.baidu.com/")
# 通过name属性选择文本框元素,并设置内容
browser.find_element(By.NAME,'wd').send_keys("selenium")
# 通过通过ID属性获取“百度一下”按钮,并执行点击操作
browser.find_element(By.ID,"su").click()
# 提取页面
print(browser.page_source.encode('utf-8'))
# 提取cookie
print(browser.get_cookies())
# 提取当前请求地址
print(browser.current_url)
# 设置五秒后执行下一步
time.sleep(5)
# 关闭浏览器
browser.quit()

    运行代码后发现,会自动弹出一个 Chrome 浏览器。浏览器首先会跳转到百度,然后在搜索框中输入 Python,接着跳转到搜索结果页

项目代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import random
from time import sleep

sleep(random.randint(6,10))  #随机延时6-10秒
#打开登录的考勤系统,webdriver.Chrome()
driver = webdriver.Chrome()
#位置模拟
#经纬度查询https://jingweidu.bmcx.com/
Map_coordinates = dict({
        "latitude": 31.87183671826284,#纬度
        "longitude": 106.83947488095092,#经度
        "accuracy": 100#精确度数
        })
driver.execute_cdp_cmd("Emulation.setGeolocationOverride", Map_coordinates)

driver.get("https://dingding.xixunyun.com/")
sleep(3)
school=['xxx职业大学']
username=['账号']
passwd=['密码']
#清空用户名框和密码框,同时从设置好的json获取用户名密码,登录,clear方法是清除当前窗口已有的输入数据

driver.find_element(By.XPATH,'//*[@id="app"]/div/div[2]/div[1]/div/div/input').clear() #清空学校信息
driver.find_element(By.XPATH,'//*[@id="app"]/div/div[2]/div[2]/div/input').clear()     #清空学号信息
driver.find_element(By.XPATH,'//*[@id="app"]/div/div[2]/div[3]/div/input').clear()      #清空密码
# 登录
driver.find_element(By.XPATH,'//*[@id="app"]/div/div[2]/div[1]/div/div/input').send_keys(school)
driver.find_element(By.XPATH,'//*[@id="app"]/div/div[2]/div[1]/div/div/input').click()
sleep(2)
driver.find_element(By.XPATH,'//*[@id="app"]/div/div[2]/div[1]/div/div/input').send_keys(Keys.DOWN)
driver.find_element(By.XPATH,'//*[@id="app"]/div/div[2]/div[1]/div/div/input').send_keys(Keys.ENTER)
driver.find_element(By.XPATH,'//*[@id="app"]/div/div[2]/div[2]/div/input').send_keys(username)
driver.find_element(By.XPATH,'//*[@id="app"]/div/div[2]/div[3]/div/input').send_keys(passwd)
driver.find_element(By.XPATH,'//*[@id="app"]/div/div[3]/button').click()
sleep(2)
driver.find_element(By.XPATH,'//*[@id="app"]/div/div/div[2]/button').click()#点签到
#在点一次
sleep(2)
driver.find_element(By.XPATH,'//*[@id="app"]/div/div[1]/div/div[3]/button[1]').click()
sleep(2)
driver.find_element(By.XPATH,'//*[@id="app"]/div/div[2]/div/div[5]/button').click()#提交
sleep(random.randint(6,10))

pyinstall库的安装

    在学习和工作之中,想制作一些小工具,用python秃了一个晚上,拿到公司,发现要安装python才能用,看别人的博客看不懂,别急,一篇搞定。

一、pyinstaller安装
    pyinstaller 是一个python库,和其他库一样,可以用pip 进行导入。

pip install pyinstaller

    pyinstaller可以打包python程序变为exe,像其他程序一样,让其可以在任何windows下正常运行而无需python的解析。

pyinstaller xx.py #xx.py代表你需要打包的python文件
pyinstaller xx.spec #xx.spec代表生成的文件 再次打包即可生成exe文件

subprocess库的安装

Python运行exe文件
    在Python编程语言中,可以通过subprocess模块来运行可执行文件(exe文件)。subprocess模块提供了一个强大的接口,可以方便地执行外部命令并与其进行交互。本文将介绍如何使用Python运行exe文件,并提供一些示例代码来帮助读者更好地理解。
subprocess模块概述
    subprocess模块是Python标准库中的一部分,它提供了一个灵活的接口来创建和控制新进程,从而可以方便地执行外部命令。该模块允许我们调用系统命令、执行外部程序以及与其进行交互。通过subprocess模块,我们可以在Python中运行可执行文件,如exe文件。

运行exe文件的步骤
    要在Python中运行exe文件,我们可以按照以下步骤进行操作:

    导入subprocess模块:首先,我们需要导入subprocess模块,以便在Python代码中使用其提供的函数和类。

import subprocess

1.创建Popen对象:使用subprocess.Popen函数创建一个Popen对象,该对象将用于运行exe文件。

process = subprocess.Popen('path_to_exe_file')

在上述代码中,path_to_exe_file是exe文件的路径,可以是绝对路径或相对路径。

等待exe文件完成运行:我们可以使用process.wait()方法等待exe文件运行完成。这将会阻塞当前进程,直到exe文件运行完毕。

process.wait()

获取exe文件的输出:如果exe文件产生了输出,我们可以使用process.communicate()方法获取输出结果。该方法将返回一个包含标准输出和标准错误输出的元组。

output, error = process.communicate()

在上述代码中,output变量用于存储标准输出,error变量用于存储标准错误输出。

schedule库的安装

    schedule是一个第三方轻量级的任务调度模块,可以按照秒,分,小时,日期或者自定义事件执行时间。如果想执行多个任务,也可以添加多个task。
首先安装schedule库:

pip install schedule

按时间间隔执行定时任务

import schedule
from datetime import datetime
 
 
def task():
    now = datetime.now()
    ts = now.strftime("%Y-%m-%d %H:%M:%S")
    print(ts)
 
 
def task2():
    now = datetime.now()
    ts = now.strftime("%Y-%m-%d %H:%M:%S")
    print(ts + '666!')
 
 
def func():
    # 清空任务
    schedule.clear()
    # 创建一个按3秒间隔执行任务
    schedule.every(3).seconds.do(task)
    # 创建一个按2秒间隔执行任务
    schedule.every(2).seconds.do(task2)
    while True:
        schedule.run_pending()
 
 
func()

项目代码

import subprocess
import schedule
from datetime import datetime
import time
#执行exe
def oponExe():
    subprocess.Popen("D:\习讯云签到系统/xql.exe")#创建一个popen对象执行exe
#执行日期
def data():
    #打开文件,并获取文件对象
    with open('data.txt','w',newline='') as file:
        # 获取当前日期
        now = datetime.now()
        ts = now.strftime("%Y-%m-%d %H:%M:%S")
        # 将字符串写入到文件中
        file.write(ts+'\n')
        file.close()
schedule.every().day.at("10:30").do(oponExe) # 每天10:30
schedule.every().day.at("10:30").do(data) # 每天10:30
# schedule.every().minute.at(":17").do(oponExe) # 每分钟的第17秒
# schedule.every().minute.at(":17").do(data) # 每分钟的第17秒
while True:
    schedule.run_pending()
    time.sleep(1)

nssm安装进服务

    NSSM 可以将 Windows 程序封装成服务,当服务终止时自动重启,进程记录到系统事件日志中,提供图形服务,删除功能,重定向输出,自定义环境变量和启动参数。
安装
    建议下载最新版本,Win10 需要 nssm 2.24-101 及以上版本

    解压,配置环境变量 Path,如 C:\nssm-2.24-103-gdee49fc\win64;

   &nbsp使用nssm工具将打包的exe封装成服务,即可自动运行。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

意点源

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值