python实现自动打卡小程序

本文实例为大家分享了python实现自动打卡小程序的具体代码,供大家参考,具体内容如下

"""
湖南大学疫情防控每日自动打卡程序v1.0
author: Liu
time:2021/3/16
"""

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from PIL import Image
from bs4 import BeautifulSoup
import requests
from aip import AipOcr
import time
from datetime import datetime
import re

class DailyAttend(object):

  def __init__(self, browser, stu_id, passwd, t, address, tmp_yesterday, tmp_today):

    self.browser = browser
    self.stu_id = stu_id
    self.passwd = passwd
    self.t = t
    self.address = address
    self.tmp_yesterday = tmp_yesterday
    self.tmp_today = tmp_today
    self.img_path = "captcha.png"

  def get_captcha_img(self):
    url = "https://fangkong.hnu.edu.cn/app/#/login?redirect=%2Fhome"
    self.browser.get(url)
    self.browser.find_element_by_class_name("vcdoe-tips").click() # 模拟点击使验证码加载出来
    time.sleep(2)
    webpage = self.browser.page_source
    soup = BeautifulSoup(webpage, features="html.parser")
    div = soup.find("div", attrs={"class": "login-content"})
    src = div.find_all("img")[2].attrs["src"] # 从html中解析出图片链接
    r = requests.get(src)
    if r.status_code == 200:
      open(self.img_path, "wb").write(r.content)
    else:
      print("网络不佳,无法加载验证码图片")

  def recog_captcha_img(self):

    img = Image.open(self.img_path)
    img = img.convert('L') # P模式转换为L模式(灰度模式默认阈值127)
    count = 165 # 设定阈值
    table = []
    for i in range(256):
      if i < count:
        table.append(0)
      else:
        table.append(1)

    img = img.point(table, '1')
    img.save(self.img_path) # 保存处理后的验证码

    ## 调用百度ocr
    # 识别码
    APP_ID = "23779944"
    API_KEY = "FPgsSXsuqXk3twpqVHmNNK6g"
    SECRET_KEY = "nG08oGzErk8CdMvDAynAiGdzfBjHr3NO"
    # 初始化对象
    client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

    # 读取图片
    def get_file_content(file_path):
      with open(file_path, 'rb') as f:
        return f.read()

    image = get_file_content(self.img_path)
    # 定义参数变量
    options = {'language_type': 'ENG', } # 识别语言类型,默认为'CHN_ENG'中英文混合
    # 调用通用文字识别
    result = client.basicGeneral(image, options) # 高精度接口 basicAccurate
    for word in result['words_result']:
      self.captcha = (word['words'])

  def login(self):

    ## 登录
    while True:
      self.browser.find_element_by_css_selector("[type=text]").send_keys(self.stu_id)
      self.browser.find_element_by_css_selector("[type=password]").send_keys(self.passwd)
      self.browser.find_element_by_css_selector("[type=number]").send_keys(self.captcha)
      self.browser.find_element_by_tag_name("button").click()
      time.sleep(2)
      page = self.browser.page_source
      html = BeautifulSoup(page, features="html.parser")
      err_message = html.find("p", attrs={"class": "el-message__content"})
      if err_message.text == "登录成功":
        print("登录成功!")
        break
      elif err_message.text == "账号或密码错误":
        print("账号或密码错误!请重新输入!")
        self.stu_id = input("请输入学号:")
        self.passwd = input("请输入密码:")
        continue
      else:
        self.get_captcha_img()
        self.recog_captcha_img()
        continue

  def attend(self):
    success_messages = self.browser.find_elements_by_css_selector('p[class=el-message__content]')
    success_messages = [message.text for message in success_messages]
    if "今日已打卡" in success_messages:
      print("今日已打卡!")
      time.sleep(60)
    else:
      ## 选择打卡定位
      self.browser.find_elements_by_xpath('//div/span[text()="正在获取定位..."]')[1].click()
      time.sleep(1)
      for i in range(17):
        self.browser.find_elements_by_xpath('//ul/li')[i + 1].click()
      time.sleep(1)
      self.browser.find_element_by_xpath('//ul/li[text()="岳麓区"]').click()
      time.sleep(1)
      self.browser.find_element_by_xpath('//div/button[text()="确认"]').click()
      time.sleep(1)

      ## 输入相关打卡信息并点击打卡按钮
      self.browser.find_elements_by_css_selector('input[placeholder="街道门牌、楼层房间号等信息"]')[1].send_keys(self.address)
      temp = self.browser.find_elements_by_css_selector("input[placeholder=请输入]")
      temp[0].send_keys(self.tmp_yesterday)
      temp[1].send_keys(self.tmp_today)
      self.browser.find_elements_by_css_selector(
        'button[class="btnDaka van-button van-button--info van-button--normal van-button--block"]')[1].click()
      today = datetime.now().strftime("%Y-%m-%d")
      print(today + "打卡成功!")
      time.sleep(60)

if __name__ == "__main__":

  ## 欢迎界面
  print("=" * 100)
  print("打卡小程序")
  print("欢迎你湖南大学的朋友!开始使用吧!")
  print("=" * 100)

  ## 用户输入
  while True:
    t = input("请输入你的每日打卡时间(24小时制, 例如:00:10):")
    if re.search('^(([0-1][0-9])|(2[1-3])):[0-5][0-9]$', t) == None:
      print("你输入的时间格式有误,请重新输入!")
      continue
    stu_id = input("请输入你的学号:")
    passwd = input("请输入个人门户密码:")
    address = input("请输入你的打卡详细地址(例如:湖南大学北校区1舍):")
    tmp_yesterday = input("请输入你的昨日体温:")
    tmp_today = input("请输入你的今日体温:")
    print("=" * 100)
    if input("请检查你的输入是否无误,若有误则输入y并重新输入,若无误则输入n:") == "n":
      print("=" * 100)
      break

  user_info = {
    't': t,
    'stu_id': stu_id,
    'passwd': passwd,
    'address': address,
    'tmp_yesterday': tmp_yesterday,
    'tmp_today': tmp_today
  }

  ## 浏览器设置
  chrome_options = Options()
  chrome_options.add_argument("--headless")
  chrome_options.add_argument("--disable-gpu")
  chrome_options.add_experimental_option('excludeSwitches', ['enable-logging'])
  browser = webdriver.Chrome(executable_path="chromedriver.exe", options=chrome_options)

  ## 打卡
  app = DailyAttend(browser, **user_info) # 实例化打卡器
  print("正在等待打卡时间到来...")
  while True:
    if datetime.now().strftime("%H:%M") == t:
      app.get_captcha_img()
      app.recog_captcha_img()
      app.login()
      app.attend()
    else:
      time.sleep(10)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2021-03-17

使用Python实现企业微信的自动打卡功能

上下班打卡是程序员最讨厌的东西,更讨厌的是设置了连上指定wifi打卡. 手机上有一些定时机器人之类的app,经过实际测试,全军覆没,没一个可以活着走到启动企业微信的这一步,所以还是靠自己吧. 下面就通过Python程序来实现自动打卡,原理很简单,用Python设置定时任务,然后通过adb操作手机,完成打卡. 1.准备工作 a.安装了Python,ADB驱动(安装方式及下载地址见之前文章)的电脑一台:常驻在公司的测试机一台:数据线一条. b.将手机通过数据线连接电脑,打开开发者选项中的允许USB调

python实现自动打卡的示例代码

自己也百度了一下,然后写的,分为了三个部分,见三段代码 代码:主程序代码 import timefrom selenium import webdriverfrom private_info import * import send_mail def signin_and_email(): #谷歌浏览器驱动的位置 driver=webdriver.Chrome("D:/...../chromedriver") driver.get('http://****.edu.cn/login.p

Python 实现网课实时监控自动签到、打卡功能

响应国家停课不停学的号召,学生们都开始了网上授课,但由于课程繁多,消息繁杂,经常错过课堂签到,针对这一难题,博客主作为Python爱好者,完全使用Python语言写了本篇博客,希望能够帮助小伙伴们完成上课签到问题(注:只是帮你签到,而不是叫你代签,我的出发点是帮助记性不是很好的同学签到,防止漏签被老师点名),所以希望大家能理解博主的苦心. 话不多说,献上效果图两张 进入正式教程 ①Python环境 Python3.6及以上版本,需要配备的库requests,json,time 代码运行软件:Py

python获取微信企业号打卡数据并生成windows计划任务

由于公司的系统用的是Java版本,开通了企业号打卡之后又没有预算让供应商做数据对接,所以只能自己捣鼓这个,以下是个人设置的一些内容,仅供大家参考 安装python python的安装,这里就不详细写了,大家可自行度娘或google. 安装第三方库 python安装好之后别忘记配置环境变量!另外,所以的内容都是安装在服务器上的,且服务器需要能够上外网,否则,只能配置在本地,因为需要外网连接微信企业号的接口.这里需要用到几个第三方库: python的pip命令,一般python安装好之后都会默认有,

Python + selenium + crontab实现每日定时自动打卡功能

前言 近几日迫于被辅导员三番五次的提醒每日一报打卡,就想着去写个脚本挂在服务器上定时执行.经过我不懈的努力,最终选择了seleniumseleniumselenium,因为简单( 安装selenium库 $ sudo pip install selenium 安装chromdriver 因为我有代理所以直接在官网下载的,那这里你可以选择用淘宝镜像源. 这里为了方便,我直接放命令了.Chromedriver版本我这里选择的是80.0.3987.16(注意要和一会儿下载的Chrome版本一致). 下

python+selenium 简易地疫情信息自动打卡签到功能的实现代码

由于学校要求我们每天都要在官网打卡签到疫情信息,多多少少得花个1分钟操作,程序员的尊严告诉我们坚决不能手动打卡.正巧最近学了selenium,于是画了个5分钟写了个自动打卡签到地小程序. 测试环境:python3.7 , selenium,chrome浏览器 seleium和chromedriver的配置在这里就不讲了,这里放个连接 首先找到学校信息门户的登录页: http://my.hhu.edu.cn/login.portal #导入selenium中的webdriver from sele

Python实现i人事自动打卡的示例代码

我司使用的打卡软件是 i 人事,不过我这记性,经常漏了打卡签退,定了闹钟都会忘,今天又被老大屌了.于是准备抓一下签到接口,利用 crontab 来实现自动签到签退. 环境配置 这里使用的是 Fiddler 进行抓包,Fiddler 是一个 HTTP 调试代理工具,以代理服务器的形式实现对网络数据流的监听.之所以没有用 Wireshark,一是因为我不是很熟悉 wireshark 的筛选器,二是因为本文使用模拟器(手机应用后台流量多,不便于分析)来抓包,代理服务器方式更方便. 安装Fiddler

Python实现钉钉/企业微信自动打卡的示例代码

每天急匆匆赶地铁上班的时候总会一不小心就会忘记打卡,尤其是软件打卡,那有没有什么办法可以解决忘打卡的问题呢?今天给大家推荐一下一款神器,利用Python实现定时自动打卡. 1 前期工具准备 不用说的Python 一部24小时可以放公司的安卓手机或电脑安装模拟器 ADB工具 2 ADB的安装配置 去下载ADB安装包,安装后在环境变量Path中添加目录 2.1 UIautomator2的安装 # 安装 uiautomator2(PC端) pip3 install -U uiautomator2 3

基于python+selenium自动健康打卡的实现代码

每天都要记得健康打卡 尊敬的老师,我忘了这次的健康打卡,反思的时候我想了很多东西,反省了很多事情,自己也很懊悔,触犯了学校的规定,深刻认识到自己所犯错误的严重性- 卡!那是小学生才有的检讨.作为一个有点懒的人,对于每次的健康打卡,都是做着重复性的填写,这让本人很是头疼,那就找找止疼药吧 使用的工具 需要有一定的python,html基础,和实践能力(毕竟实践出真知,实践能力强,你可以忽略前两个,你是最棒的!): Pycharm ,在pycharm官网里面下载社区版或专业版(没其他的用途推荐用社区

如何基于Python实现自动扫雷

这篇文章主要介绍了如何基于Python实现自动扫雷,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第二种方式. 一.准备工作 我的版本是 python 3.6.1 python的第三方库: win32api win32gui win32con Pillow numpy opencv 可通过 pip install --upgrade Som

python selenium实现发送带附件的邮件代码实例

这篇文章主要介绍了python selenium实现发送带附件的邮件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 163邮件登录首页 登录成功断言是否有退出按钮 点击退出退出登录 代码如下 from selenium import webdriver import unittest import time class VisitSogouByChrome(unittest.TestCase): def setUp(self): # 启

Python实现自动打开电脑应用的示例代码

由于时间原因,有时候可能会错过某个上网课的时间段.因此想要实现自动定时启动DingDing. 新手一枚,如有不当勿喷望大佬指正. 自动打开DingDing可以由两种方法实现: 通过找出找出软件在电脑中快捷方式的位置(电脑屏幕中的坐标),使用代码模拟鼠标进行双击打开. 通过输入软件在电脑中的安装路径打开软件. 1.第一种方法: ​在python中,使用pip install pyautogui 安装第三方库,在此库中,可以使用pyautogui.position()获取当前鼠标放置位置的坐标.我们

python 实现自动远程登陆scp文件实例代码

 python 实现自动远程登陆scp文件实例代码 实现实例代码: #!/usr/bin/expect if {$argc!=3} { send_user "Usage: $argv0 {path1} {path2} {Password}\n\n" exit } set path1 [lindex $argv 0] set path2 [lindex $argv 1] set Password [lindex $argv 2] spawn scp ${path1} ${path2} e

Python selenium抓取微博内容的示例代码

Selenium简介与安装 Selenium是什么? Selenium也是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE.Mozilla Firefox.Mozilla Suite等. 安装 直接使用pip命令安装即可! pip install selenium Python抓取微博有两种方式,一是通过selenium自动登录后从页面直接爬取,二是通过api. 这里采用selenium的方式. 程序: from selen

python + selenium 刷B站播放量的实例代码

B站UP主的主要收益来源(播放量获取的奖励.用户充电.广告等等) 首先做up主最直接的就是做视频,当你的粉丝过1000或者视频总播放超过10万时可以申请创造激励,申请创造激励之后,你的原创视频播放会给你带来收益,平均1000播放3元左右,根据你视频的质量上下浮动,如果你的视频被顶上首页那很自然的你的视频你会获得大量的流量,当然视频的点赞投币都会影响视频被顶上首页的概率. python selenium 模块 selenium模块是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏

基于python+selenium的二次封装的实现

这是个人对selenium.webdriver写的一些常用操作的二次封装,也就相当于重写了,不再使用自带的框架,用自己写的框架完成.这样的话使代码更简洁,用自己的思想完成代码的编写. 首先在根目录下创建子目录名为Common作为公用数据,名字随自己取,在Common目录下创建basepage.py和dir_config文件.(关于这两个py文件要用来做什么,后面有说到) 首先我们打开dir_config文件 看名字就可以很清楚的看到这是要干什么. logs_dir = os.path.join(

python+selenium识别验证码并登录的示例代码

由于工作需要,登录网站需要用到验证码.最初是研究过验证码识别的,但是总是不能获取到我需要的那个验证码.直到这周五,才想起这事来,昨天顺利的解决了. 下面正题: python版本:3.4.3 所需要的代码库:PIL,selenium,tesseract 先上代码: #coding:utf-8 import subprocess from PIL import Image from PIL import ImageOps from selenium import webdriver import t

Python Selenium Cookie 绕过验证码实现登录示例代码

之前介绍过通过cookie 绕过验证码实现登录的方法.这里并不多余,会增加分析和另外一种方法实现登录. 1.思路介绍  1.1.直接看代码,内有详细注释说明 # FileName : Wm_Cookie_Login.py # Author : Adil # DateTime : 2018/3/20 19:47 # SoftWare : PyCharm from selenium import webdriver import time url = 'https://system.address'

Python selenium爬取微信公众号文章代码详解

参照资料:selenium webdriver添加cookie: https://www.jb51.net/article/193102.html 需求: 想阅读微信公众号历史文章,但是每次找回看得地方不方便. 思路: 1.使用selenium打开微信公众号历史文章,并滚动刷新到最底部,获取到所有历史文章urls. 2.对urls进行遍历访问,并进行下载到本地. 实现 1.打开微信客户端,点击某个微信公众号->进入公众号->打开历史文章链接(使用浏览器打开),并通过开发者工具获取到cookie