前言
近几日迫于被辅导员三番五次的提醒每日一报打卡,就想着去写个脚本挂在服务器上定时执行。经过我不懈的努力,最终选择了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
查看版本
$ 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://www.zalou.cn/article/183899.htm
到此这篇关于Python + selenium + crontab实现每日定时自动打卡的文章就介绍到这了,更多相关python 定时自动打卡内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!