欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)i人事自動(dòng)打卡的示例代碼

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

我司使用的打卡軟件是 i 人事,不過(guò)我這記性,經(jīng)常漏了打卡簽退,定了鬧鐘都會(huì)忘,今天又被老大屌了。于是準(zhǔn)備抓一下簽到接口,利用 crontab 來(lái)實(shí)現(xiàn)自動(dòng)簽到簽退。

環(huán)境配置

這里使用的是 Fiddler 進(jìn)行抓包,F(xiàn)iddler 是一個(gè) HTTP 調(diào)試代理工具,以代理服務(wù)器的形式實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)數(shù)據(jù)流的監(jiān)聽(tīng)。之所以沒(méi)有用 Wireshark,一是因?yàn)槲也皇呛苁煜?wireshark 的篩選器,二是因?yàn)楸疚氖褂媚M器(手機(jī)應(yīng)用后臺(tái)流量多,不便于分析)來(lái)抓包,代理服務(wù)器方式更方便。

安裝Fiddler

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

Fiddler配置

如圖,打開(kāi)Fiddler,Tools 選擇 Fiddler Options,將圖中所標(biāo)識(shí)地方勾選,配置后點(diǎn)擊 OK 保存并重啟 Fiddler

 

再次打開(kāi)該選項(xiàng)卡,點(diǎn)擊 Action 生成證書到桌面(文件名 FiddlerRoot.cer)

 

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

模擬器配置

記錄 Windows 當(dāng)前網(wǎng)卡的 IP 備用。

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

選擇模擬器內(nèi)的 WiFi 連接,長(zhǎng)按當(dāng)前的 WiFi,選擇修改網(wǎng)絡(luò),選擇手動(dòng)配置代理,地址填前面記錄的 Windows 本地 IP,端口為 8888,保存后重啟模擬器即可。

 

開(kāi)始抓包

配置過(guò)濾器

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

模擬器簽到

將模擬器的模擬定位定位到需要打卡的位置,打開(kāi) i 人事,點(diǎn)擊考勤打卡,打卡簽到,這時(shí)候在 Fiddler 中會(huì)出現(xiàn)一條監(jiān)聽(tīng)到的請(qǐng)求,雙擊打開(kāi),如圖所示,

 

可以看到,實(shí)際上打卡簽到動(dòng)作就是一條 POST 請(qǐng)求。我們了解了這條 POST 請(qǐng)求的基本內(nèi)容后就可以利用 Python 的 requests 模塊來(lái)模擬提交了。

模擬請(qǐng)求

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

#!/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 請(qǐng)求認(rèn)證警告
requests.packages.urllib3.disable_warnings()
# 郵件設(shè)置
server = 'smtp.163.com'
port = '25'
sender = '發(fā)件人郵箱'
passwd = '密碼(授權(quán)碼)'
receiver = '收件人'
# i 人事簽到接口地址
url = "https://www.ihr360.com/gateway/attendance/aggregate/attendance/api/sign/doSign"
# 抓包簽到請(qǐng)求頭
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',
}
# 抓包請(qǐng)求 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'] = '自動(dòng)打卡成功'
    print("打卡成功")
  sendMail(server, port, sender, passwd, msg)
# 簽到并郵件通知結(jié)果,不用通知?jiǎng)t改為 doSign(url, jsonValue, headersValue) 即可
newMail(doSign(url, jsonValue, headersValue)["data"])
# doSign(url, jsonValue, headersValue)

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

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

python3 ihr.py # 你的文件名

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

定時(shí)執(zhí)行

利用 crontab 來(lái)實(shí)現(xiàn)自動(dòng)執(zhí)行。關(guān)于 crontab 的具體使用,可見(jiàn) Linux下crontab的使用與注意事項(xiàng) | Alliot's blog

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

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

后記

整個(gè)流程很簡(jiǎn)單粗暴,其實(shí)一般后臺(tái)都是能看出來(lái)的,因?yàn)槊看蔚暮灥轿恢枚际且粯?,所以如果想要逼真一點(diǎn),可以在請(qǐng)求中經(jīng)緯度、位置名里使用范圍的隨機(jī)數(shù)等等… 不過(guò),還是那句話: 可以,但沒(méi)必要。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • django框架如何集成celery進(jìn)行開(kāi)發(fā)

    django框架如何集成celery進(jìn)行開(kāi)發(fā)

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

    pandas添加自增列的2種實(shí)現(xiàn)方案

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

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

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

    JavaScript實(shí)現(xiàn)一維數(shù)組轉(zhuǎn)化為二維數(shù)組

    下面小編就為大家分享一篇JavaScript實(shí)現(xiàn)一維數(shù)組轉(zhuǎn)化為二維數(shù)組,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 淺析Python 中幾種字符串格式化方法及其比較

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

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

    Python實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之隊(duì)列詳解

    這篇文章主要介紹了Python實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之隊(duì)列,詳細(xì)分析了隊(duì)列的定義、功能與Python實(shí)現(xiàn)隊(duì)列的相關(guān)技巧,以及具體的用法,需要的朋友可以參考下
    2015-04-04
  • python實(shí)現(xiàn)證件照換底功能

    python實(shí)現(xiàn)證件照換底功能

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

    淺析Flask如何使用日志功能

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

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

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

    Python 下載Bing壁紙的示例

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

最新評(píng)論