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实现自动打卡系统全过程相关推荐

  1. 打卡签到python代码_如何利用Python实现自动打卡签到

    需求描述 我们需要登录考勤系统(网页端,非手机端)进行签到,如果不想每天都早早起来打卡签到,就可以通过写程序实现这一功能. 业务梳理 通过长时间的早起打卡签到发现规律,我每天只是不停的点击,签到,都是 ...

  2. python 打卡程序_如何利用Python实现自动打卡签到

    需求描述 我们需要登录考勤系统(网页端,非手机端)进行签到,如果不想每天都早早起来打卡签到,就可以通过写程序实现这一功能. 业务梳理 通过长时间的早起打卡签到发现规律,我每天只是不停的点击,签到,都是 ...

  3. 利用python脚本自动发布服务之arcmap篇

    最近在学习arcpy,参考官方帮助文档及一些博客文章练习了下利用python脚本自动发布各中server服务,顺便将把发布的流程以及遇到的问题进行记录总结.用的是Python2.x,ArcGIS Pr ...

  4. 利用Python实现自动批量图片格式转换

    文章目录 利用Python实现自动批量图片格式转换 0.背景 1.简单思路 2.进一步改进 3.最终版本 4.总结 利用Python实现自动批量图片格式转换 0.背景 在一个漫画网站下载了一些图片,但 ...

  5. Python进行网页自动打卡系统

    Python进行网页自动打卡系统 安装Python 下载Chromedriver 安装selenium 设置定时自动运行 Python程序 安装Python 可以直接Python官网下载,需要进行路径 ...

  6. Ubuntu下使用Python调用乐视三合一摄像头

    Ubuntu下使用Python调用乐视三合一摄像头 前言 配置过程 参考资料 前言 ​ 上一篇文章https://blog.csdn.net/qq_44847636/article/details/1 ...

  7. Ubuntu下,Python版本查询、默认版本更改、终端字体背景颜色设置、Ubuntu中文语言设置、VMware中界面大小调整

    Ubuntu下,Python初步配置及终端设置 1.Python 版本查询 2.如何修改Ubuntu默认Python版本 3.Ubuntu终端字体颜色调整 4.Ubuntu中文语言设置 5.VMwar ...

  8. Ubuntu下利用JDK的Keytool配置Tomcat7.0的SSL协议

    Ubuntu下利用JDK的Keytool配置Tomcat7.0的SSL协议: 1.用JDK自带的Keytool生成服务器证书:   1)打开终端控制台,转向tomcat主目录,执行生成keystore ...

  9. ubuntu下使用python将ppt转成图片_Ubuntu下使用Python实现游戏制作中的切分图片功能...

    本文实例讲述了Ubuntu下使用Python实现游戏制作中的切分图片功能.分享给大家供大家参考,具体如下: why 拿到一个人物行走的素材,要用TexturePacker打包.TexturePacke ...

  10. Ubuntu下增加Python的PATH环境变量

    Ubuntu下增加Python的PATH环境变量 1. Ubuntu专有方式 编辑 /etc/ld.so.conf 文件,如果以下语句不存在,则加入: include /etc/ld.so.conf. ...

最新文章

  1. Java Calendar 类的时间操作
  2. SQL脚本:监控当前重做日志文件使用情况
  3. [转载]编译中的常见分析方法
  4. 显微镜自动聚焦原理是什么_什么是共聚焦显微镜?你了解过共聚焦显微镜吗?...
  5. in-place数据交换
  6. mysql查询只能是等式连接_mysql连接查询
  7. 立即修复!微软史上最严重漏洞之一 Netlogon 细节被公开,三秒接管企业网络
  8. 少样本文本分类 InductionNet
  9. 关于UIControl响应事件说明
  10. 2021-07-31mysql连接 基本语句
  11. 单容水箱液位pid控制实验报告_过程控制实验-单容水箱液位控制系统
  12. linux tar压缩文件命令,linux解压压缩命令tar详解
  13. 微信公众号中视频下载的2种方法
  14. 独立站谷歌付费广告关键词选词技巧实操
  15. 支付宝支付之“单笔转账到支付宝账户接口”的调用(生成签名、上传应用公钥、下载SDK、接口调用、报错自动排查、查看错误码)
  16. 微信小程序中使用Echarts(折线图)
  17. 解读测试能力素质模型
  18. 入职宇宙条之后,我知道了这些
  19. 北京师范大学网络教育高级c 语言作业答案,北京师范大学网络教育教育心理学离线作业及答案...
  20. 搜狗输入法如何java_搜狗拼音输入法LINUX版安装

热门文章

  1. ASCII码值转化十六进制,十进制数;十六进制字符值转十进制,ASCII码值;
  2. 看不懂简明python教程_简明python教程
  3. android 计步器acc,基于加速度的门限检测计步算法设计
  4. win10如何固定ip地址
  5. Error:Execution failed for task ‘:app:preDebugAndroidTestBuild’. Conflict with dependency ‘com.andr
  6. Apache-Commons-FileIOUtils工具类常用方法使用
  7. 仿QQ音乐(HTML+CSS)
  8. 7 个有趣的 Python 实战项目,超级适合练手
  9. Faster R-CNN算法
  10. Fast R-CNN算法