美文网首页
readfree.me自动签到脚本(python)

readfree.me自动签到脚本(python)

作者: iHandle | 来源:发表于2019-04-02 10:49 被阅读0次

更新

再见


image

前言

去年暑假的时候我入手了一台压泡面神器。在找电子书资源的时候,我发现了Readfree这个非常不错的电子书分享网站。Readfree网站上的电子书资源非常丰富,而且总体质量也比较高。不过,这个网站的资源并非完全免费开放下载,只有持有积分的注册会员才有下载资格(1本书花费1个积分)。目前获得积分的方法有三种:

  1. 签到,可获取1~3个积分
  2. 充值(好像是10元1000个积分)
  3. 上传新资源,根据被下载数获得积分奖励(10:1)

对于不想掏钱的用户来说,就只能盯准方法1和3了。然而如果想要通过3获得积分,意味着要上传一本网站上没有的书籍或者是已有的书籍的新的版本,并且质量要够好才能吸引其他用户下载,而且奖励比例还是10:1。相对而言,坚持每天签到获取积分的速度会更快而且更有保障。对于这种机械重复的任务,把它丢给计算机执行无疑是最明智的选择。

获取cookie

让人头疼的是,Readfree在登录的时候不仅要用户名和密码,还要输入验证码,如图所示:


对于验证码自动识别这种事情,我还是懒得去折腾了(其实是不会),所以我还是直接用cookie登录好了。

获取cookie的方法:先在chrome里登录了Readfree,然后通过Chrome的开发者工具查看cookie(Chrome查看cookie的方法可以参考这里

可以看到Readfree的cookie有5个字段,如下图所示:

其中,需要复制到脚本上使用的是sessionidcsrftokenHm_lvt_375aa6d601368176e50751c1c6bf0e82这3个字段。Hm_lpvt_375aa6d601368176e50751c1c6bf0e82这个字段在脚本运行时指定为当前时间即可。

签到脚本

1. 构造cookie字典

在Chrome获取cookie后, 构造cookie字典。

timestamp = '%d'%(int(time.time())) #获取当前时间
cookie = {
    'Hm_lvt_375aa6d601368176e50751c1c6bf0e82': '[此处需要填写]',
    'Hm_lpvt_375aa6d601368176e50751c1c6bf0e82': timestamp,
    'sessionid': '[此处需要填写]',
    'csrftoken': '[此处需要填写]'
}
2. 登录

cookie字典准备好之后,使用requests进行登录。

check_url = 'http://readfree.me/accounts/checkin'
res = requests.get(check_url,cookies=cookie)
结果验证

经过我的实际测试,Readfree的cookie实际只有大概一个月一个星期的有效期。如果每次签到都验证结果,就能及时发现cookie过期了。验证的方法是在https://readfree.me/accounts/profile/[Readfree用户名]/checkin/这里获取签到记录表,然后查看最新一条签到记录的日期是否与当天一致。

验证代码如下:

# 这一行与上面一段代码衔接
if res.status_code == 200:

    # 找到最新一条签到记录
    confirm_url = 'https://readfree.me/accounts/profile/[此处需要修改为你的readfree用户名]/checkin/'
    re = requests.get(confirm_url, cookies=cookie)
    soup = BeautifulSoup(re.text, features="html.parser")
    latest_rec = soup.find('tr', class_='info')
    if latest_rec is None:
        print('签到失败,可能是cookie过期了')

    else:
        latest_time = latest_rec.td.text

        # 检查它的日期是不是今天
        date = time.strftime("%Y-%m-%d", time.localtime())
        if latest_time.startswith(date):
           print('签到成功')
        else:
             # 不知道是不是有这种情况
             print('签到失败')
else:
    print('无法访问readfree.me')

定时执行

以Linux为例,使用crontab定时运行脚本,每天00:00的时候自动签到.(不熟悉crontab的话可以参考这里

根据自动签到脚本readfree.py放置的目录给crontab添加以下格式的定时计划:

@daily python PATH_TO_YOUR_readfree.py >/dev/null 2>&1

假如readfree.py文件是放在目录/home/abc下的,那么以上命令应该改为:

@daily python /home/abc/readfree.py >/dev/null 2>&1

>/dev/null 2>&1 语句含义: 不会输出任何信息到控制台,也不会有任何信息输出到文件中。

签到结果推送到iOS设备

Bark是一款iOS软件,它允许你将自定义通知推送到你的iOS设备。(Bark使用方法)
所以只要把脚本中print负责输出的内容丢给Bark,即可在iOS设备上看到签到的情况。
例如:

requests.post('https://api.day.app/[你的key]/签到成功')

附上:完整代码

参考

readfree.me 自动签到脚本获取免费积分

相关文章

网友评论

      本文标题:readfree.me自动签到脚本(python)

      本文链接:https://www.haomeiwen.com/subject/gacibqtx.html