亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python實現i人事自動打卡的示例代碼

 更新時間:2020年01月09日 09:22:45   作者:Alliot  
這篇文章主要介紹了Python實現i人事自動打卡的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

我司使用的打卡軟件是 i 人事,不過我這記性,經常漏了打卡簽退,定了鬧鐘都會忘,今天又被老大屌了。于是準備抓一下簽到接口,利用 crontab 來實現自動簽到簽退。

環(huán)境配置

這里使用的是 Fiddler 進行抓包,Fiddler 是一個 HTTP 調試代理工具,以代理服務器的形式實現對網絡數據流的監(jiān)聽。之所以沒有用 Wireshark,一是因為我不是很熟悉 wireshark 的篩選器,二是因為本文使用模擬器(手機應用后臺流量多,不便于分析)來抓包,代理服務器方式更方便。

安裝Fiddler

先安裝 Fiddler( 官網地址 ),安裝完成之后需要安裝 fiddlercertmaker 證書生成工具( 官網地址 )

Fiddler配置

如圖,打開Fiddler,Tools 選擇 Fiddler Options,將圖中所標識地方勾選,配置后點擊 OK 保存并重啟 Fiddler

 

再次打開該選項卡,點擊 Action 生成證書到桌面(文件名 FiddlerRoot.cer)

 

將該證書文件上傳到模擬器即可。

模擬器配置

記錄 Windows 當前網卡的 IP 備用。

打開模擬器,在模擬器內的系統(tǒng)設置中選擇 “安全”,選擇 “從 SD 卡安裝”,選擇前面上傳的證書,安裝即可。(過程中會要求設置屏保密碼,設置即可)

選擇模擬器內的 WiFi 連接,長按當前的 WiFi,選擇修改網絡,選擇手動配置代理,地址填前面記錄的 Windows 本地 IP,端口為 8888,保存后重啟模擬器即可。

 

開始抓包

配置過濾器

打開 Fiddler 后,打開模擬器,這時候在 Fiddler 會監(jiān)聽到大量的流量信息,便于查找,我們需要使用過濾器,如圖,在 Fiddler 界面右側,選擇 “Filters”并勾選,選擇 “Use Filters”,在 “Hosts” 項目中,選擇 “Show only the following Hosts”,并填入 “www.ihr360.com” 這樣能過濾掉除 i 人事以外的域名流量信息,同時,在 “Request Headers” 中,勾選 “Show only if URL contains”,填入 “gateway/attendance/aggregate/attendance/api/sign/doSign” ,點擊右上角的 Actions,選擇 “Run Filterset now” 以生效過濾器。在 Fiddler 左側的流量信息欄中,使用 Ctrl + X 清除當前所有流量信息。

模擬器簽到

將模擬器的模擬定位定位到需要打卡的位置,打開 i 人事,點擊考勤打卡,打卡簽到,這時候在 Fiddler 中會出現一條監(jiān)聽到的請求,雙擊打開,如圖所示,

 

可以看到,實際上打卡簽到動作就是一條 POST 請求。我們了解了這條 POST 請求的基本內容后就可以利用 Python 的 requests 模塊來模擬提交了。

模擬請求

模擬 POST 請求很簡單,這里就不多說,直接貼代碼(很爛=.=! ,能用就行啦…勿噴…):

#!/usr/bin/env python3
# www.iots.vip 
# Alliot 
# 2020-1-8 
import requests
import json
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
from time import strftime, localtime
# 忽略 requests 請求認證警告
requests.packages.urllib3.disable_warnings()
# 郵件設置
server = 'smtp.163.com'
port = '25'
sender = '發(fā)件人郵箱'
passwd = '密碼(授權碼)'
receiver = '收件人'
# i 人事簽到接口地址
url = "https://www.ihr360.com/gateway/attendance/aggregate/attendance/api/sign/doSign"
# 抓包簽到請求頭
headersValue = {
  'Cookie': 'SESSION=XXXXXXXXXXXXXX; Path=/; HttpOnly',
  'accept': 'application/json;charset=UTF-8',
  'appKey': 'com.irenshi.personneltreasure',
  'appVersion': 'XXXX',
  'osVersion': 'XXXX',
  'udid': 'XXXXXX',
  'user-agent': 'IRENSHI_APP_AGENT',
  'os': 'Android',
  'irenshilocale': 'zh_CN',
  'Content-Type': 'application/json; charset=utf-8',
  'Content-Length': '272',
  'Host': 'www.ihr360.com',
  'Connection': 'Keep-Alive',
  'Accept-Encoding': 'gzip',
}
# 抓包請求 json
jsonValue = {
  "deviceToken": " ",
  "deviceType": "NORMAL",
  "latitude": XXX,
  "locationName": "XXX",
  "longitude": XXX,
  "phoneName": "MI6",
  "signSource": "APP",
  "wifiMac": "XXX",
  "wifiName": "Alliot",
}
# 簽到方法
def doSign(url, jsonValue, headersValue):
  r = requests.post(url, json=jsonValue, headers=headersValue, verify=False)
  global results
  results = json.loads(r.text)
  print(strftime("%Y-%m-%d %H:%M:%S", localtime()))
  return results
# 郵件提醒方法
def sendMail(server, port, sender, passwd, msg):
  smtp = smtplib.SMTP()
  smtp.connect(server, port)
  smtp.login(sender, passwd)
  smtp.sendmail(msg['From'], msg['To'], msg.as_string())
  smtp.quit()
  print('郵件發(fā)送成功email has send out !')
def newMail(status):
  msg = MIMEText(str(results), 'plain', 'utf-8')
  msg['From'] = formataddr(["AlliotSigner", sender])
  msg['To'] = formataddr(["Alliot", receiver])
  if status == None:
    msg['Subject'] = '打卡失敗-_-!'
    print("打卡失敗")
  else:
    msg['Subject'] = '自動打卡成功'
    print("打卡成功")
  sendMail(server, port, sender, passwd, msg)
# 簽到并郵件通知結果,不用通知則改為 doSign(url, jsonValue, headersValue) 即可
newMail(doSign(url, jsonValue, headersValue)["data"])
# doSign(url, jsonValue, headersValue)

修改其中的配置為上文抓到的數據即可(這里注意, headersValue 請求頭為字典格式, jsonValue 則為 Json 格式,執(zhí)行報錯的時候檢查一下是否是格式錯誤。)

上傳到服務器中,執(zhí)行:

python3 ihr.py # 你的文件名

執(zhí)行后,打開 i 人事查看是否成功產生一次簽到記錄,成功即可添加進計劃任務。

定時執(zhí)行

利用 crontab 來實現自動執(zhí)行。關于 crontab 的具體使用,可見 Linux下crontab的使用與注意事項 | Alliot's blog

我是定義每周工作日的 8 點 18 點打卡,crontab 配置為:

0 8,18 * * mon,tue,wed,thu,fri,sat /usr/bin/python3 /alliot/ihr.py>>/alliot/ihr_log.txt

后記

整個流程很簡單粗暴,其實一般后臺都是能看出來的,因為每次的簽到位置都是一樣,所以如果想要逼真一點,可以在請求中經緯度、位置名里使用范圍的隨機數等等… 不過,還是那句話: 可以,但沒必要。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • django框架如何集成celery進行開發(fā)

    django框架如何集成celery進行開發(fā)

    本文給大家詳細講解了在django框架中如何集成celery進行開發(fā),步驟非常詳細,有需要的小伙伴可以參考下
    2017-05-05
  • pandas添加自增列的2種實現方案

    pandas添加自增列的2種實現方案

    這篇文章主要介紹了pandas添加自增列的2種實現方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 10分鐘用Python快速搭建全文搜索引擎詳解流程

    10分鐘用Python快速搭建全文搜索引擎詳解流程

    讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章帶你用python花10分鐘迅速搭建一個好玩的Python全文搜索引擎,大家可以在過程中查缺補漏,提升水平
    2021-10-10
  • JavaScript實現一維數組轉化為二維數組

    JavaScript實現一維數組轉化為二維數組

    下面小編就為大家分享一篇JavaScript實現一維數組轉化為二維數組,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 淺析Python 中幾種字符串格式化方法及其比較

    淺析Python 中幾種字符串格式化方法及其比較

    在 Python 中,提供了很多種字符串格式化的方式,分別是 %-formatting、str.format 和 f-string 。這篇文章主要介紹了Python 中幾種字符串格式化方法及其比較,需要的朋友可以參考下
    2019-07-07
  • Python實現的數據結構與算法之隊列詳解

    Python實現的數據結構與算法之隊列詳解

    這篇文章主要介紹了Python實現的數據結構與算法之隊列,詳細分析了隊列的定義、功能與Python實現隊列的相關技巧,以及具體的用法,需要的朋友可以參考下
    2015-04-04
  • python實現證件照換底功能

    python實現證件照換底功能

    這篇文章主要為大家詳細介紹了python實現證件照換底功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 淺析Flask如何使用日志功能

    淺析Flask如何使用日志功能

    這篇文章主要為大家詳細介紹了Flask是如何使用日志功能的,文中的示例代碼講解詳細,對我們深入了解Flask有一定的幫助,需要的可以參考一下
    2023-05-05
  • Python OpenCV中的resize()函數的使用

    Python OpenCV中的resize()函數的使用

    這篇文章主要介紹了Python OpenCV中的resize()函數的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • Python 下載Bing壁紙的示例

    Python 下載Bing壁紙的示例

    這篇文章主要介紹了Python 下載Bing壁紙的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09

最新評論