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检测网站链接是否已存在
Apr 07 Python
Python使用Matplotlib实现Logos设计代码
Dec 25 Python
详解用Python处理HTML转义字符的5种方式
Dec 27 Python
tensorflow训练中出现nan问题的解决
Feb 10 Python
python 梯度法求解函数极值的实例
Jul 10 Python
Python3内置模块random随机方法小结
Jul 13 Python
Python Subprocess模块原理及实例
Aug 26 Python
python Opencv计算图像相似度过程解析
Dec 03 Python
Python 实现进度条的六种方式
Jan 06 Python
python程序实现BTC(比特币)挖矿的完整代码
Jan 20 Python
Python爬虫入门教程01之爬取豆瓣Top电影
Jan 24 Python
用Python简陋模拟n阶魔方
Apr 17 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
递归列出所有文件和目录
2006/10/09 PHP
PHP实现递归复制整个文件夹的类实例
2015/08/03 PHP
thinkphp jquery实现图片上传和预览效果
2020/07/22 PHP
php字符集转换
2017/01/23 PHP
使用jQuery.fn自定义jQuery翻页插件
2013/01/20 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
javascript批量修改文件编码格式的方法
2015/01/27 Javascript
jQuery+css实现的tab切换标签(兼容各浏览器)
2016/01/28 Javascript
通过网页查看JS源码中汉字显示乱码的解决方法
2016/10/26 Javascript
vue生成token并保存到本地存储中
2018/07/17 Javascript
React Native开发封装Toast与加载Loading组件示例
2018/09/08 Javascript
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
2019/09/24 Javascript
构建大型 Vue.js 项目的10条建议(小结)
2019/11/14 Javascript
JS实现简易留言板增删功能
2020/02/08 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
2020/11/06 Javascript
Pyramid添加Middleware的方法实例
2013/11/27 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
Python爬虫:将headers请求头字符串转为字典的方法
2019/08/21 Python
Python日志syslog使用原理详解
2020/02/18 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
2020/03/10 Python
Python读取VOC中的xml目标框实例
2020/03/10 Python
Python return语句如何实现结果返回调用
2020/10/15 Python
美国知名女性服饰品牌:New York & Company
2017/03/23 全球购物
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
英国最大的独立摄影零售商:Park Cameras
2019/11/27 全球购物
Yahoo的PHP面试题
2014/05/26 面试题
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
护理专业的自荐信
2013/10/22 职场文书
法学毕业生自荐信
2013/11/13 职场文书
跟单文员的岗位职责
2013/11/14 职场文书
音乐教师个人工作总结
2015/02/06 职场文书
考研导师推荐信范文
2015/03/27 职场文书
学生乘坐校车安全责任书
2015/05/11 职场文书
超市啤酒狂欢夜策划方案范文!
2019/07/03 职场文书
关于Python使用turtle库画任意图的问题
2022/04/01 Python
python神经网络学习 使用Keras进行简单分类
2022/05/04 Python