时间:2021-05-22
前言
近几日迫于被辅导员三番五次的提醒每日一报打卡,就想着去写个脚本挂在服务器上定时执行。经过我不懈的努力,最终选择了seleniumseleniumselenium,因为简单(
安装selenium库
$ sudo pip install selenium
安装chromdriver
因为我有代理所以直接在官网下载的,那这里你可以选择用淘宝镜像源。
这里为了方便,我直接放命令了。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=utf8from selenium import webdriverfrom selenium.common.exceptions import NoSuchElementExceptionimport timeclass 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在服务器端运行参考博文:
到此这篇关于Python + selenium + crontab实现每日定时自动打卡的文章就介绍到这了,更多相关python 定时自动打卡内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例为大家分享了python实现自动打卡小程序的具体代码,供大家参考,具体内容如下"""湖南大学疫情防控每日自动打卡程序v1.0author:Liutime
需要实现看门狗功能,定时检测另外一个程序是否在运行,使用crontab仅可以实现检测程序是否正在运行,无法做到扩展,如:手动重启、程序升级(如果只需要实现自动升
很多人在linux下使用crontab实现PHP执行定时任务却未能成功,不能生成缓存。本文就linux下使用crontab实现定时PHP计划任务失败的原因做一分
在liunx系统中要想每隔一分钟执行一个命令,最普遍的方法就是crontab了,如果不想使用crontab,经同事指点在程序中可以用定时器实现这种功能,于是就开
本文实例为大家分享了selenium+python京东自动登录及秒杀的代码,供大家参考,具体内容如下运行环境:python2.7python安装selenium