Bymunije

4 minute read

Readfree每天签到可获取1~3个积分,每天其实还是挺麻烦的,所以折腾了自动签到

获取cookie

在chrome中登录Readfree后,点击地址栏前面的文档簿:

点击cookie 获得sessionid,csrftoken,Hm_lvt_375aa6d601368176e50751c1c6bf0e82 字段内容

Readfree的cookie大概一个星期的有效期,当cookie过期后需重复上述步骤修改

签到脚本

# -*- coding: utf-8 -*- 
import requests
import time
from bs4 import BeautifulSoup

# 登录
def login(cookie):

    url = 'http://readfree.me/accounts/checkin'
    res = requests.get(url, cookies=cookie)

    if res.status_code == 200:
        return confirm(cookie)
    else:
        return '无法访问readfree.me'

# 确认是否签到成功
def confirm(cookie):

    # 找到最新一条签到记录
    url = 'https://readfree.me/accounts/profile/[此处需要修改为你的readfree用户名]/checkin/'
    res = requests.get(url, cookies=cookie)
    soup = BeautifulSoup(res.text, features="html.parser")
    latest_rec = soup.find('tr', class_='info')

    if latest_rec is None:
        return '签到失败,可能是cookie过期了'

    latest_time = latest_rec.td             # 最后一次签的时间
    latest_score = latest_time.find_next()  # 最后一次签到获得的积分
    total_score = latest_score.find_next()  # 最后一次签到后的总积分

    # 检查最后一次签到的日期是不是今天
    date = time.strftime("%Y-%m-%d", time.localtime())

    if latest_time.text.startswith(date):
        message = '本次签到获得' + latest_score.text[1:] + '个积分,累计积分:' + total_score.text
        return message

    else:
        # 不知道有没有这种情况
        return '签到失败,cookie可能没过期'



# 准备cookie用于登录
# 可以在Chrome等浏览器手动登录后获取cookie, 根据对应字段修改下面的值即可
timestamp = '%d' % (int(time.time()))
cookie = {
    'Hm_lvt_375aa6d601368176e50751c1c6bf0e82': '[此处需要修改]',
    'Hm_lpvt_375aa6d601368176e50751c1c6bf0e82': timestamp,
    'sessionid': '[此处需要修改]',
    'csrftoken': '[此处需要修改]'
}

result = login(cookie)
print(result)

## 将签到结果推送到手机的Bark app(可选功能)
## 如果你的Bark app里显示的推送链接是 https://api.day.app/abcdefg/这里改成你自己的推送内容
## push_url 就设置为'https://api.day.app/abcdefg/'
## 推送的内容由后面的message变量提供
## 将结果推送的Bark app(可选功能)

# bark_url = '[此处需要修改Bark推送链接]'
# requests.post(bark_url+result)

windows任务计划

在win10的设置中搜索任务计划程序,然后在右侧单击创建任务,然后触发器-> 新建,在高级设置中可设定重复次数。

操作窗口配置任务,程序或脚本(P)中为python安装路径,添加参数中为脚本,起始于为脚本路径,配置完成后就可以进入windows的任务计划库

  • 当手动执行顺利,但任务执行报0x1的错误,应该是系统权限问题。在常规窗口,运行权限默认是只在用户登录是运行,这样当没有登录的情况下定时任务无法执行,更改运行权限为不管用户是否登录都要运行,点击确认会提示输入密码。

  • 若输入密码提示错误信息:所指定的账户名称无效,可在安全选项-> 更改用户或组重新输入用户名并保存,用户名参考创建者,可参考这里

Linux定时执行crontab

设置环境变量EDITOR,可参考这里

cron进程根据EDITOR来确定使用哪个编辑器编辑crontab文件,UNIX和LINUX用户可使用vi,做法是在HOME目录下的. profile文件中加入下面一行:

EDITOR=vi; export EDITOR

然后保存并退出。

编辑crontab文件

当EDITOR环境变量设置为vi,添加、删除或编辑crontab文件中的条目就可以用下面命令在vi编辑crontab文件:

crontab -e

然后保存并退出。如果修改了某些条目或添加了新的条目,那么在保存该文件时, cron会对其进行必要的完整性检查。出现crontab: installing new crontab即编辑成功,如果其中的某个域出现了超出允许范围的值,会给出提示,下面是一个例子:

# 每天八点半执行readfree.py
30 8 * * * /usr/software/anaconda3/bin/python3.6 /home/usrname/Read/readfree.py >> /home/usrname/Read/log1.txt 2>&1

列出crontab文件

使用-l参数列出crontab文件:

crontab -l

输出30 8 * * * /usr/software/anaconda3/bin/python3.6 /home/usrname/Read/readfree.py >> /home/usrname/Read/log1.txt 2>&1

而且可以使用下面的方法对crontab文件备份:

crontab -l > /home/usrname/Read/mycron

删除crontab文件

crontab -r

crontab的坑

可参考这里

  • 1.python命令和程序文件路径都需要绝对路径
  • 2.文件可执行权限chmod +x readfree.py
  • 3.报错ImportError: No module named bs4,可能是sys.path问题,参考这里 比如命令行进入python,得到:
['', '/usr/software/anaconda3/lib/python36.zip', '/usr/software/anaconda3/lib/python3.6', '/usr/software/anaconda3/lib/python3.6/lib-dynload', '/usr/software/anaconda3/lib/python3.6/site-packages', '/usr/software/anaconda3/lib/python3.6/site-packages/glob2-0.4.1-py3.6.egg', '/usr/software/anaconda3/lib/python3.6/site-packages/tqdm-4.7.2-py3.6.egg']

但crontab执行时为:

['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

,需要在crontab命令中使用usr/software/anaconda3/bin/python3.6 /home/usrname/Read/readfree.py,同时在python文件中添加相应命令,包括行首添加的#!/usr/software/anaconda3/bin/python和文中添加的

import sys
# print(sys.path)
sys.path.append('/usr/software/anaconda3/lib/python3.6/site-packages/')
comments powered by Disqus