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中的rfind()方法使用详解
May 19 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
May 25 Python
简单实现python数独游戏
Mar 30 Python
mac 安装python网络请求包requests方法
Jun 13 Python
利用Python将文本中的中英文分离方法
Oct 31 Python
导入tensorflow时报错:cannot import name 'abs'的解决
Oct 10 Python
Python 生成一个从0到n个数字的列表4种方法小结
Nov 28 Python
Pytoch之torchvision.transforms图像变换实例
Dec 30 Python
pytorch 自定义参数不更新方式
Jan 06 Python
如何在python中执行另一个py文件
Apr 30 Python
Pycharm 跳转回之前所在页面的操作
Feb 05 Python
python中字符串String及其常见操作指南(方法、函数)
Apr 06 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
论建造顺序的重要性
2020/03/04 星际争霸
学习php分页代码实例
2013/10/24 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
2017/03/15 PHP
php获取ip及网址的简单方法(必看)
2017/04/01 PHP
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
第一个JavaScript入门基础 document.write输出
2010/02/22 Javascript
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
2011/02/26 Javascript
Backbone.js的一些使用技巧
2015/07/01 Javascript
JS简单限制textarea内输入字符数量的方法
2015/10/14 Javascript
基于js实现的限制文本框只可以输入数字
2016/12/05 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
javascript删除html标签函数cIsHTML
2017/01/09 Javascript
深入理解JavaScript继承的多种方式和优缺点
2017/05/12 Javascript
详解angular ui-grid之过滤器设置
2017/06/07 Javascript
jQuery.validate.js表单验证插件的使用代码详解
2018/10/22 jQuery
vue集成chart.js的实现方法
2019/08/20 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
2019/12/16 Javascript
TypeScript 运行时类型检查补充工具
2020/09/28 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
python显示生日是星期几的方法
2015/05/27 Python
Python实现通过文件路径获取文件hash值的方法
2017/04/29 Python
Python在图片中插入大量文字并且自动换行
2019/01/02 Python
利用python实现对web服务器的目录探测的方法
2019/02/26 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
2019/06/21 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
2019/08/20 Python
Tensorflow累加的实现案例
2020/02/05 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
2020/03/06 Python
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
新东网科技Java笔试题
2012/07/13 面试题
园艺师求职信
2014/04/27 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
2014年中班下学期工作总结
2014/12/11 职场文书
沈阳故宫导游词
2015/01/31 职场文书
未中标通知书
2015/04/17 职场文书