日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Ubuntu下利用python实现自动打卡系统全过程

發布時間:2023/12/31 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ubuntu下利用python实现自动打卡系统全过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Ubuntu下利用python實現自動打卡系統全過程

系統版本:Debian or Ubuntu
Python版本:3.xx以上
實現功能:1.能自動打卡并定時啟動;2.截圖保存打卡信息;3.發送郵件通知。
因為學校規定要求每天打卡,博主人懶又經常忘記打卡導致輔導員經常在大群里@我,屬實尷尬。故干脆把吃灰的香橙派H616(無桌面版Ubuntu sever鏡像)拿來掛打卡腳本。欸,舒服了。

1.安裝python環境和用到的包

先安裝 pip3工具 和相應的庫

sudo apt install -y python3-pip python3-dev python3-setuptools libxml2-dev libxslt1-dev

因為網頁上有中文所以需要安裝中文字庫,否則截圖里會有亂碼

sudo apt-get -y install fontconfig xfonts-utils

也可以手動添加字庫

再安裝python包

pip3 install wheel selenium pillow yagmail

這里是selenium和chrom_driver安裝教程鏈接

新建chrominum文件,把下載下來的.deb文件都復制進去

cd ./chromium/ sudo dpkg -i *.deb

我在安裝時出現包依賴錯誤:dpkg: error processing package ***(–install): dependency problems - leaving unconfigured
解決方案:sudo apt install -f
在安裝pillow時會出現很多錯誤比如:The headers or library files could not be found for jpeg
解決方案: sudo apt-get install libjpeg-dev zlib1g-dev
pillow庫的依賴很多還會有其他錯誤,奇奇怪怪的錯誤挨著百度就好了

2.碼代碼

整體流程框圖

#mermaid-svg-EF7lhgUDGfRv5FNP .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-EF7lhgUDGfRv5FNP .label text{fill:#333}#mermaid-svg-EF7lhgUDGfRv5FNP .node rect,#mermaid-svg-EF7lhgUDGfRv5FNP .node circle,#mermaid-svg-EF7lhgUDGfRv5FNP .node ellipse,#mermaid-svg-EF7lhgUDGfRv5FNP .node polygon,#mermaid-svg-EF7lhgUDGfRv5FNP .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-EF7lhgUDGfRv5FNP .node .label{text-align:center;fill:#333}#mermaid-svg-EF7lhgUDGfRv5FNP .node.clickable{cursor:pointer}#mermaid-svg-EF7lhgUDGfRv5FNP .arrowheadPath{fill:#333}#mermaid-svg-EF7lhgUDGfRv5FNP .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-EF7lhgUDGfRv5FNP .flowchart-link{stroke:#333;fill:none}#mermaid-svg-EF7lhgUDGfRv5FNP .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-EF7lhgUDGfRv5FNP .edgeLabel rect{opacity:0.9}#mermaid-svg-EF7lhgUDGfRv5FNP .edgeLabel span{color:#333}#mermaid-svg-EF7lhgUDGfRv5FNP .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-EF7lhgUDGfRv5FNP .cluster text{fill:#333}#mermaid-svg-EF7lhgUDGfRv5FNP div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-EF7lhgUDGfRv5FNP .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-EF7lhgUDGfRv5FNP text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-EF7lhgUDGfRv5FNP .actor-line{stroke:grey}#mermaid-svg-EF7lhgUDGfRv5FNP .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-EF7lhgUDGfRv5FNP .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-EF7lhgUDGfRv5FNP #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-EF7lhgUDGfRv5FNP .sequenceNumber{fill:#fff}#mermaid-svg-EF7lhgUDGfRv5FNP #sequencenumber{fill:#333}#mermaid-svg-EF7lhgUDGfRv5FNP #crosshead path{fill:#333;stroke:#333}#mermaid-svg-EF7lhgUDGfRv5FNP .messageText{fill:#333;stroke:#333}#mermaid-svg-EF7lhgUDGfRv5FNP .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-EF7lhgUDGfRv5FNP .labelText,#mermaid-svg-EF7lhgUDGfRv5FNP .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-EF7lhgUDGfRv5FNP .loopText,#mermaid-svg-EF7lhgUDGfRv5FNP .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-EF7lhgUDGfRv5FNP .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-EF7lhgUDGfRv5FNP .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-EF7lhgUDGfRv5FNP .noteText,#mermaid-svg-EF7lhgUDGfRv5FNP .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-EF7lhgUDGfRv5FNP .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-EF7lhgUDGfRv5FNP .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-EF7lhgUDGfRv5FNP .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-EF7lhgUDGfRv5FNP .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EF7lhgUDGfRv5FNP .section{stroke:none;opacity:0.2}#mermaid-svg-EF7lhgUDGfRv5FNP .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-EF7lhgUDGfRv5FNP .section2{fill:#fff400}#mermaid-svg-EF7lhgUDGfRv5FNP .section1,#mermaid-svg-EF7lhgUDGfRv5FNP .section3{fill:#fff;opacity:0.2}#mermaid-svg-EF7lhgUDGfRv5FNP .sectionTitle0{fill:#333}#mermaid-svg-EF7lhgUDGfRv5FNP .sectionTitle1{fill:#333}#mermaid-svg-EF7lhgUDGfRv5FNP .sectionTitle2{fill:#333}#mermaid-svg-EF7lhgUDGfRv5FNP .sectionTitle3{fill:#333}#mermaid-svg-EF7lhgUDGfRv5FNP .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EF7lhgUDGfRv5FNP .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-EF7lhgUDGfRv5FNP .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EF7lhgUDGfRv5FNP .grid path{stroke-width:0}#mermaid-svg-EF7lhgUDGfRv5FNP .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-EF7lhgUDGfRv5FNP .task{stroke-width:2}#mermaid-svg-EF7lhgUDGfRv5FNP .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EF7lhgUDGfRv5FNP .taskText:not([font-size]){font-size:11px}#mermaid-svg-EF7lhgUDGfRv5FNP .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EF7lhgUDGfRv5FNP .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-EF7lhgUDGfRv5FNP .task.clickable{cursor:pointer}#mermaid-svg-EF7lhgUDGfRv5FNP .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-EF7lhgUDGfRv5FNP .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-EF7lhgUDGfRv5FNP .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-EF7lhgUDGfRv5FNP .taskText0,#mermaid-svg-EF7lhgUDGfRv5FNP .taskText1,#mermaid-svg-EF7lhgUDGfRv5FNP .taskText2,#mermaid-svg-EF7lhgUDGfRv5FNP .taskText3{fill:#fff}#mermaid-svg-EF7lhgUDGfRv5FNP .task0,#mermaid-svg-EF7lhgUDGfRv5FNP .task1,#mermaid-svg-EF7lhgUDGfRv5FNP .task2,#mermaid-svg-EF7lhgUDGfRv5FNP .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-EF7lhgUDGfRv5FNP .taskTextOutside0,#mermaid-svg-EF7lhgUDGfRv5FNP .taskTextOutside2{fill:#000}#mermaid-svg-EF7lhgUDGfRv5FNP .taskTextOutside1,#mermaid-svg-EF7lhgUDGfRv5FNP .taskTextOutside3{fill:#000}#mermaid-svg-EF7lhgUDGfRv5FNP .active0,#mermaid-svg-EF7lhgUDGfRv5FNP .active1,#mermaid-svg-EF7lhgUDGfRv5FNP .active2,#mermaid-svg-EF7lhgUDGfRv5FNP .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-EF7lhgUDGfRv5FNP .activeText0,#mermaid-svg-EF7lhgUDGfRv5FNP .activeText1,#mermaid-svg-EF7lhgUDGfRv5FNP .activeText2,#mermaid-svg-EF7lhgUDGfRv5FNP .activeText3{fill:#000 !important}#mermaid-svg-EF7lhgUDGfRv5FNP .done0,#mermaid-svg-EF7lhgUDGfRv5FNP .done1,#mermaid-svg-EF7lhgUDGfRv5FNP .done2,#mermaid-svg-EF7lhgUDGfRv5FNP .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-EF7lhgUDGfRv5FNP .doneText0,#mermaid-svg-EF7lhgUDGfRv5FNP .doneText1,#mermaid-svg-EF7lhgUDGfRv5FNP .doneText2,#mermaid-svg-EF7lhgUDGfRv5FNP .doneText3{fill:#000 !important}#mermaid-svg-EF7lhgUDGfRv5FNP .crit0,#mermaid-svg-EF7lhgUDGfRv5FNP .crit1,#mermaid-svg-EF7lhgUDGfRv5FNP .crit2,#mermaid-svg-EF7lhgUDGfRv5FNP .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-EF7lhgUDGfRv5FNP .activeCrit0,#mermaid-svg-EF7lhgUDGfRv5FNP .activeCrit1,#mermaid-svg-EF7lhgUDGfRv5FNP .activeCrit2,#mermaid-svg-EF7lhgUDGfRv5FNP .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-EF7lhgUDGfRv5FNP .doneCrit0,#mermaid-svg-EF7lhgUDGfRv5FNP .doneCrit1,#mermaid-svg-EF7lhgUDGfRv5FNP .doneCrit2,#mermaid-svg-EF7lhgUDGfRv5FNP .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-EF7lhgUDGfRv5FNP .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-EF7lhgUDGfRv5FNP .milestoneText{font-style:italic}#mermaid-svg-EF7lhgUDGfRv5FNP .doneCritText0,#mermaid-svg-EF7lhgUDGfRv5FNP .doneCritText1,#mermaid-svg-EF7lhgUDGfRv5FNP .doneCritText2,#mermaid-svg-EF7lhgUDGfRv5FNP .doneCritText3{fill:#000 !important}#mermaid-svg-EF7lhgUDGfRv5FNP .activeCritText0,#mermaid-svg-EF7lhgUDGfRv5FNP .activeCritText1,#mermaid-svg-EF7lhgUDGfRv5FNP .activeCritText2,#mermaid-svg-EF7lhgUDGfRv5FNP .activeCritText3{fill:#000 !important}#mermaid-svg-EF7lhgUDGfRv5FNP .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EF7lhgUDGfRv5FNP g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-EF7lhgUDGfRv5FNP g.classGroup text .title{font-weight:bolder}#mermaid-svg-EF7lhgUDGfRv5FNP g.clickable{cursor:pointer}#mermaid-svg-EF7lhgUDGfRv5FNP g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-EF7lhgUDGfRv5FNP g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-EF7lhgUDGfRv5FNP .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-EF7lhgUDGfRv5FNP .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-EF7lhgUDGfRv5FNP .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-EF7lhgUDGfRv5FNP .dashed-line{stroke-dasharray:3}#mermaid-svg-EF7lhgUDGfRv5FNP #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-EF7lhgUDGfRv5FNP #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-EF7lhgUDGfRv5FNP #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-EF7lhgUDGfRv5FNP #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-EF7lhgUDGfRv5FNP #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-EF7lhgUDGfRv5FNP #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-EF7lhgUDGfRv5FNP #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-EF7lhgUDGfRv5FNP #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-EF7lhgUDGfRv5FNP .commit-id,#mermaid-svg-EF7lhgUDGfRv5FNP .commit-msg,#mermaid-svg-EF7lhgUDGfRv5FNP .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EF7lhgUDGfRv5FNP .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EF7lhgUDGfRv5FNP .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EF7lhgUDGfRv5FNP g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EF7lhgUDGfRv5FNP g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-EF7lhgUDGfRv5FNP g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-EF7lhgUDGfRv5FNP g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-EF7lhgUDGfRv5FNP g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-EF7lhgUDGfRv5FNP g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-EF7lhgUDGfRv5FNP .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-EF7lhgUDGfRv5FNP .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-EF7lhgUDGfRv5FNP .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-EF7lhgUDGfRv5FNP .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-EF7lhgUDGfRv5FNP .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-EF7lhgUDGfRv5FNP .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-EF7lhgUDGfRv5FNP .edgeLabel text{fill:#333}#mermaid-svg-EF7lhgUDGfRv5FNP .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EF7lhgUDGfRv5FNP .node circle.state-start{fill:black;stroke:black}#mermaid-svg-EF7lhgUDGfRv5FNP .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-EF7lhgUDGfRv5FNP #statediagram-barbEnd{fill:#9370db}#mermaid-svg-EF7lhgUDGfRv5FNP .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-EF7lhgUDGfRv5FNP .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-EF7lhgUDGfRv5FNP .statediagram-state .divider{stroke:#9370db}#mermaid-svg-EF7lhgUDGfRv5FNP .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-EF7lhgUDGfRv5FNP .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-EF7lhgUDGfRv5FNP .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-EF7lhgUDGfRv5FNP .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-EF7lhgUDGfRv5FNP .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-EF7lhgUDGfRv5FNP .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-EF7lhgUDGfRv5FNP .note-edge{stroke-dasharray:5}#mermaid-svg-EF7lhgUDGfRv5FNP .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-EF7lhgUDGfRv5FNP .error-icon{fill:#522}#mermaid-svg-EF7lhgUDGfRv5FNP .error-text{fill:#522;stroke:#522}#mermaid-svg-EF7lhgUDGfRv5FNP .edge-thickness-normal{stroke-width:2px}#mermaid-svg-EF7lhgUDGfRv5FNP .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-EF7lhgUDGfRv5FNP .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-EF7lhgUDGfRv5FNP .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-EF7lhgUDGfRv5FNP .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-EF7lhgUDGfRv5FNP .marker{fill:#333}#mermaid-svg-EF7lhgUDGfRv5FNP .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-EF7lhgUDGfRv5FNP {color: rgba(0, 0, 0, 0.75);font: ;}輸入賬戶密碼等讀取config.json獲取用戶信息進入網站登入打卡頁面填寫各種信息和驗證碼提交打卡結果并截圖
1.打卡模塊

挑重點講講將這個驗證碼識別吧。我嘗試過本地的tessocr-OCR文本識別率感人,驗證碼純隨便。想用Opencv又感覺太浪費了。所以就去百度申請了一個ocr的api,免費的,有幾千調用次數。欸,白嫖就很舒服了。還有個小難點,這個驗證碼無法直接扒取,只能通過截圖保存。因此,需要在整張頁面中做一個自適定位并截取的工作。
附代碼:

def Analyze_code(screen_shot,chrom_driver):element = chrom_driver.find_element_by_xpath('//*[@id="app"]/div/div[3]/div[7]/div/img') #找驗證碼圖片#print(element.location) # 打印元素坐標#print(element.size) # 打印元素大小left = element.location['x']top = element.location['y']/2 #這里要除以2,不知道為啥得到的y軸像素有問題right = element.location['x'] + element.size['width']bottom = element.location['y'] + element.size['height']image = Image.open(screen_shot)cropped = image.crop((left, top, right, bottom))cropped.save('pil_cut_thor.png')#調用tesserocr的image_to_text()方法,傳入image對象完成識別# cropped = image.crop(( 720-200, 2400-300,720,2400-180)) # (left, upper, right, lower)# cropped.save("pil_cut_thor.png")time.sleep(0.2)'''#本地識別#新建Image對象#調用tesserocr的image_to_text()方法,傳入image對象完成識別check = Image.open("pil_cut_thor.png")time.sleep(0.2)result = tesserocr.image_to_text(check)print(result)return result'''#在線識別# 二進制方式打開圖片文件f = open("pil_cut_thor.png", 'rb')img = base64.b64encode(f.read())params = {"image":img}access_token = '自己申請’request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"request_url = request_url + "?access_token=" + access_tokenheaders = {'content-type': 'application/x-www-form-urlencoded'}response = requests.post(request_url, data=params, headers=headers)if response:print (response.json())response_json = json.dumps(response.json()) #解析jsonraw_check_num = json.loads(response_json)['words_result'][0]['words']check_num = raw_check_num.replace( " ","")print("驗證碼為:"+check_num)return check_num
2.郵件發送模塊

去email網站申請一個郵箱,并開通SMTP服務

import yagmail # 郵件發送模塊 import time#通過郵件將新生成的文件發送到自己的郵箱 def send_email(user_name,email,staus):yag = yagmail.SMTP(user='你的郵箱',password='密碼',host='主域名)t = time.localtime()send_time=time.strftime("%Y-%m-%d %H:%M:%S",t)contents = [user_name+'同學你好,你在'+send_time+'打卡'+staus[0]+'('+staus[1]+'),截圖已經上傳到附件,請查收']contents = contents + [staus[2]]yag.send(email, '請查看'+user_name+'的打卡結果', contents)print('------郵件發送成功啦!')
3.定時啟動

這里直接百度cron 或者 crontab,網上有更詳細的教程,這里只做簡單記錄
這里是可供參考的教程
首先編輯定時任務列表

sudo crontab -e

第一次使用會讓你選擇編輯器,我這里選vim,大家隨意。
在文件中添加

0 9 * * * /home/orangepi/auto_test/test.py >> /home/orangepi/auto_test/test.log 2>&1

每天上午9點執行我的test.py腳本,并打印日志文件
注意自己板子上的時區。而且crontab執行腳本不會進入腳本所在路徑,所以有文件操作的地方需要注意路徑問題,即相對路徑會操作失敗,需要轉換成絕對路徑。:

orangepi@orangepizero2: timedatectl set-timezone Asia/Shanghai orangepi@orangepizero2: date -R Wed, 12 May 2021 13:47:56 +0800 absolutepath=os.path.dirname(os.path.abspath(__file__))+'/'

效果圖展示

運行的界面

保存的截圖

收到的郵件

總結

以上是生活随笔為你收集整理的Ubuntu下利用python实现自动打卡系统全过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。