Python自动签到脚本

最近发现了一个非常不错的下载电子书的网站www.iamtxt.com,里面电子书资源非常丰富,常见的电子书在里面基本都能找的到,并且电子书资源都是用户自己上传的,所以版权方面能稍微好一些。另外,这个网站下载资源是需要积分的,不过积分基本每天签到就能够用,每天签到的两个积分就可以下载一本书。其实还是很人性化的,想下书的时候签到下一本就好了,书一次不要下太多,否则都不会看,这个一直都是真理。

好了闲话不多说,我们今天的任务还是要实现一个自动签到系统,所以需要用脚本去模拟网站登录和签到动作。为了安全起见,我们先注册了一个临时测试的账号,用这个账号来登录,并用Chrome浏览器查看网站的请求操作。分析之后发现网站登录直接就是一个POST请求,甚至密码都是明文的,我们来看看Chrome中得到的记录:

Chrome中抓到的登录请求

注意登录成功之后就要停止记录,否则自动跳转后这个登录请求就找不到了。。。

从抓到的请求来看,实际的登录操作非常简单基础,没有验证码,甚至密码都没有加密,这个还真是。。希望网站数据库中密码是加密的,否则,我勒个去。。

先不管了,我们来试试用脚本来模拟这个请求操作吧,首先我们把必要的请求头,POST数据和网址什么的都复制下来,然后贴到Python中重新格式化:

login_url = "http://www.iamtxt.com/e/member/doaction.php"
login_header = {"accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3","accept-language":"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7","cache-control":"max-age=0","content-type":"application/x-www-form-urlencoded","upgrade-insecure-requests":"1"}
login_params = {
    "ecmsfrom":"http%3A%2F%2Fwww.iamtxt.com%2Fe%2Fmember%2Fdoaction.php%3Fenews%3Dexit",
    "enews":"login",
    "tobind":"0",
    "username":"testuser",
    "password":"password123",
    "lifetime":"315360000",
    "Submit": "+%E7%99%BB+%E5%BD%95+"
}

内容简单,我们直接上requests,不过通过之前的测试,我发现网站登录之后的鉴权是基于Cookie的,所以我们在使用Requests的时候也要留着这些cookie信息,每次请求都手动加cookie明显过于繁琐,幸好requests提供一种session的请求方式,可以自动保留cookie的相关信息,所以我们先来生成一个session然后用session的方式进行请求:

import requests

r = requests.session()
echo = r.post(login_url, headers=login_header, data=login_params)

这样就完成了一个请求,是不是很简单,我们再来继续看看签到的记录,Chrome中调试模式发现签到操作同样是一个POST请求,数据也只有一个userid,那么就直接再来一个吧:

checkin_params = {"userid":"0"}
echo = r.post("http://www.iamtxt.com/e/extend/signin.php", data=checkin_params)

好了,到这里一个自动签到的脚本就完成了,过程异常顺利。

本来我还打算将cookie保存,后面直接通过保存的cookie请求签到,后来发现网站也没那么多限制,每次都当成新的浏览器,直接生成新的cookie就好了,session也不用保存了,最后我们将完整的脚本贴出来:

import requests
import pickle

login_url = "http://www.iamtxt.com/e/member/doaction.php"
login_header = {"accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3","accept-language":"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7","cache-control":"max-age=0","content-type":"application/x-www-form-urlencoded","upgrade-insecure-requests":"1"}
login_params = {
    "ecmsfrom":"http%3A%2F%2Fwww.iamtxt.com%2Fe%2Fmember%2Fdoaction.php%3Fenews%3Dexit",
    "enews":"login",
    "tobind":"0",
    "username":"testusuer",
    "password":"password123",
    "lifetime":"315360000",
    "Submit": "+%E7%99%BB+%E5%BD%95+"
}
r = requests.session()
echo = r.post(login_url, headers=login_header, data=login_params)
checkin_params = {"userid":"0"}
echo = r.post("http://www.iamtxt.com/e/extend/signin.php", data=checkin_params)
print(echo.text)
r.close()

PS:里面的用户名和密码都是假的。

把这个脚本放到VPS上,crontab上面加上一条就可以自动签到了,是不是很帅?哈哈。


本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。

相关文章

发表新评论