我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python实现自动打卡小程序

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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"})
    class="lazy" data-src = div.find_all("img")[2].attrs["class="lazy" data-src"] # 从html中解析出图片链接
    r = requests.get(class="lazy" data-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)

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python实现自动打卡小程序

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python如何实现自动打卡小程序

这篇文章主要介绍了python如何实现自动打卡小程序,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下from selenium import webdriverfr
2023-06-14

怎么通过Python实现定时打卡小程序

这篇文章主要为大家展示了“怎么通过Python实现定时打卡小程序”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么通过Python实现定时打卡小程序”这篇文章吧。只需在自己的python项目下随
2023-06-21

怎么利用Python实现自动打卡签到

这篇文章主要介绍了怎么利用Python实现自动打卡签到,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。需求描述我们需要登录考勤系统(网页端,非手机端)进行签到,如果不想每天都早
2023-06-22

基于Python如何实现自动抠图小程序

本篇文章为大家展示了基于Python如何实现自动抠图小程序,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬
2023-06-26

Python实现微信小程序自动操作工具

这篇文章主要为大家详细介绍了如何利用Python实现微信小程序自动化操作的小工具,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
2023-01-29

JavaScript怎么实现微信小程序打卡时钟

今天小编给大家分享一下JavaScript怎么实现微信小程序打卡时钟的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、项目展
2023-06-30

怎么使用python代码实现钉钉自动打卡

本篇内容介绍了“怎么使用python代码实现钉钉自动打卡”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!准备环境Android 手机一部(我用
2023-06-16

uniapp微信小程序打卡功能的详细实现流程

最近因为工作需要,搭建了一个加班打卡的小程序,下面这篇文章主要给大家介绍了关于uniapp微信小程序打卡功能的详细实现流程,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2022-12-15

微信小程序如何实现卡片层叠滑动

本篇内容主要讲解“微信小程序如何实现卡片层叠滑动”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微信小程序如何实现卡片层叠滑动”吧!实现效果:1.左右滑动时,向相应方向移动一个卡片位置;2.点击某
2023-06-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录