Python + selenium + crontab实现每日定时自动打卡功能


Posted in Python onMarch 31, 2020

前言

近几日迫于被辅导员三番五次的提醒每日一报打卡,就想着去写个脚本挂在服务器上定时执行。经过我不懈的努力,最终选择了seleniumseleniumselenium,因为简单(

安装selenium库

$ sudo pip install selenium

安装chromdriver

因为我有代理所以直接在官网下载的,那这里你可以选择用淘宝镜像源。

Python + selenium + crontab实现每日定时自动打卡功能

这里为了方便,我直接放命令了。Chromedriver版本我这里选择的是80.0.3987.16(注意要和一会儿下载的Chrome版本一致)。

下载

$ wget https://npm.taobao.org/mirrors/chromedriver/80.0.3987.16/chromedriver_linux64.zip

解压

$ unzip chromedriver_linux64.zip -d .

放到相应目录并授予可执行权限

$ sudo cp chromedriver /usr/bin && sudo chmod +x /usr/bin/chromedriver

安装Chrome安装依赖

$ sudo apt-get install libxss1 libappindicator1 libindicator7

安装Chrome

$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb$ sudo dpkg -i google-chrome*.deb$ sudo apt-get install -f

查看版本

$ google-chrome --version

测试调试

$ google-chrome --headless --remote-debugging-port=9222 https://chromium.org --disable-gpu

编写脚本创建脚本并授予权限

$ touch dailyReport.py && touch dailyReport.log && sudo chmod +x dailyReport.py

内容

# encoding=utf8
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time


class DailyReport(object):
 def __init__(self):
 self.chrome_options = webdriver.ChromeOptions()
 self.chrome_options.add_argument('--headless')
 self.chrome_options.add_argument('--disable-gpu')
 self.chrome_options.add_argument('--no-sandbox') # 这个配置很重要
 self.client = None
 # self.client = webdriver.Chrome(chrome_options=self.chrome_options)
 self.index_url = 'https://xxxxx/xxxx/login'
 self.report_url = 'https://xxxx/xxxx/report'
 self.data = [
  ('用户名', '密码'),
  ('xxxx', 'xxxx'),
  ('xxxx', 'xxxx'),
  ('xxxx', 'xxxx'),
  ('xxxx', 'xxxx')
 ]

 def login(self, _username, _password):
 try:
  self.client = webdriver.Chrome(chrome_options=self.chrome_options)
  print(self.get_current_time() + ' ' + _username + u'开始进行打卡'.encode('utf-8'))
  self.client.get(self.index_url)
  username = self.client.find_element_by_name("username")
  password = self.client.find_element_by_name('password')
  username.send_keys(_username)
  password.send_keys(_password)
  login_button = self.client.find_element_by_xpath('//*[@id="form1"]/div[4]/button')
  login_button.click()
 except NoSuchElementException:
  print(self.get_current_time(), u'登录异常!'.encode('utf-8'))
 else:
  # time.sleep(2)
  print(self.get_current_time() + ' ' + u'登录成功!'.encode('utf-8'))

 def post_data(self):
 try:
  self.client.get(self.report_url)
  submit_button = self.client.find_element_by_xpath('//*[@id="p1_ctl00_btnSubmit"]/span/span')
  submit_button.click()
  ensure_button = self.client.find_element_by_xpath('//*[@id="fineui_26"]/span/span')
  ensure_button.click()
  # print (client.page_source.encode('utf-8'))
 except NoSuchElementException:
  print(self.get_current_time(), u' 提交表单异常! 打卡失败!'.encode('utf-8'))
 else:
  # time.sleep(2)
  print(self.get_current_time() + ' ' + u'打卡成功!\n'.encode('utf-8'))
 finally:
  time.sleep(5)
  self.client.quit()
  print(u'浏览器退出...\n--------------\n'.encode('utf-8'))

 def run(self):
 for msg in self.data:
  self.login(msg[0], msg[1])
  self.post_data()
 print('Python script completed at ' + self.get_current_time() + '\n--------------\n')

 @staticmethod
 def get_current_time():
 return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

if __name__ == '__main__':
 obj = DailyReport()
 obj.run()

脚本内容需要根据不同网站做对应的修改。

脚本定时执行

这里我们利用LinuxLinuxLinux的内置命令crontabcrontabcrontab,关于crontabcrontabcrontab的用法请自行百度ororor谷歌。

$ crontab -e

如果是首次使用,应该会让你选择编辑器,我选择的vimvimvim,然后在最后一行加入一行

0 0 * * * python ~/dailyReport.py >> ~/dailyReport.log

这样就可以做到每天00:0000:0000:00自动执行脚本了。

Chrome在服务器端运行参考博文:https://3water.com/article/183899.htm

到此这篇关于Python + selenium + crontab实现每日定时自动打卡的文章就介绍到这了,更多相关python 定时自动打卡内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python实现CET查分的方法
Mar 10 Python
浅析Python中MySQLdb的事务处理功能
Sep 21 Python
Python实现生成随机日期字符串的方法示例
Dec 25 Python
Python中defaultdict与lambda表达式用法实例小结
Apr 09 Python
Python获取系统所有进程PID及进程名称的方法示例
May 24 Python
python实现比较文件内容异同
Jun 22 Python
python生成每日报表数据(Excel)并邮件发送的实例
Feb 03 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
Django项目中添加ldap登陆认证功能的实现
Apr 04 Python
Python处理时间日期坐标轴过程详解
Jun 25 Python
python实现文字版扫雷
Apr 24 Python
Python极值整数的边界探讨分析
Sep 15 Python
python实现udp聊天窗口
Mar 31 #Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
Mar 31 #Python
Python sorted排序方法如何实现
Mar 31 #Python
解决Django中checkbox复选框的传值问题
Mar 31 #Python
Python文本文件的合并操作方法代码实例
Mar 31 #Python
Python调用接口合并Excel表代码实例
Mar 31 #Python
Python如何批量获取文件夹的大小并保存
Mar 31 #Python
You might like
PHP图片库imagemagick安装方法
2014/09/23 PHP
php中spl_autoload详解
2014/10/17 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
jquery ajax提交整个表单元素的快捷办法
2013/03/27 Javascript
javascript实现yield的方法
2013/11/06 Javascript
JavaScript中Cookie操作实例
2015/01/09 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
jQuery操作cookie
2016/08/08 Javascript
javascript 组合按键事件监听实现代码
2017/02/21 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
JS同步、异步、延迟加载的方法
2018/05/05 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
2019/05/05 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
2019/10/26 Javascript
实现vuex原理的示例
2020/10/21 Javascript
Vue router安装及使用方法解析
2020/12/02 Vue.js
[03:58]2014DOTA2国际邀请赛 龙宝赛后解密DK获胜之道
2014/07/14 DOTA
用Python实现协同过滤的教程
2015/04/08 Python
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
python实现颜色空间转换程序(Tkinter)
2015/12/31 Python
python实现简单点对点(p2p)聊天
2017/09/13 Python
pandas中Timestamp类用法详解
2017/12/11 Python
Python数据结构与算法之完全树与最小堆实例
2017/12/13 Python
python实现redis三种cas事务操作
2017/12/19 Python
python实现校园网自动登录的示例讲解
2018/04/22 Python
Python利用神经网络解决非线性回归问题实例详解
2019/07/19 Python
python 的 scapy库,实现网卡收发包的例子
2019/07/23 Python
Jupyter加载文件的实现方法
2020/04/14 Python
HTML5页面无缝闪开的问题及解决方案
2020/06/11 HTML / CSS
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
施工安全生产承诺书
2014/05/23 职场文书
临时用工协议书范本
2014/10/29 职场文书
2014年煤矿工作总结
2014/11/24 职场文书
入党申请书怎么写?
2019/06/11 职场文书
《女娲补天》读后感5篇
2019/12/31 职场文书
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js