这个页面已经不再维护更新了,你可以从这里了解最新的进展
一个练手的小脚本,暂时只是实现了签到,还没有很完备的错误处理,而且在实现“全自动签到”上还没有想出什么合理的方案,先把代码贴上现丑了……
使用方法很简单
[bash]
python xiami_auto_checkin.py email password
[/bash]
即把用户名(email)和密码作为参数传进去即可
如果你只是签固定的一个帐号,也可以直接将代码中的读参数改成赋值
这个代码只是最初的版本,你可以在这里看到最新的进展
[python]
#!/usr/bin/python
# encoding:utf-8
import re
import sys
import urllib
import urllib2
import cookielib
def check(response):
“””
docstring for check
“””
pattern = re.compile(r’
‘)
result = pattern.search(response)
if result: return result.group(1)
return False
pass
def main():
“””
docstring for main
“””
# Get email and password
if len(sys.argv) != 3:
print ‘[Error] Please input email & password as sys.argv!’
return
email = sys.argv[1]
password = sys.argv[2]
# Init
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
urllib2.install_opener(opener)
# Login
login_url = ‘http://www.xiami.com/web/login’
login_data = urllib.urlencode({’email’:email, ‘password’:password, ‘LoginButton’:’登陆’,})
login_headers = {‘Referer’:’http://www.xiami.com/web/login’, ‘User-Agent’:’Opera/9.60′,}
login_request = urllib2.Request(login_url, login_data, login_headers)
login_response = urllib2.urlopen(login_request).read()
# Result
result = check(checkin_response)
if result:
print ‘[Succeed] Checkin Succeed!’, email, result
else:
print ‘[Error] Checkin Failed!’
pass
if __name__==’__main__’:
main()
[/python]
有任何问题,欢迎批评指正,更多更新信息,请参见这里
24 responses to “虾米自动签到的python脚本”
如果要验证码呢?
这个可以扩展到115网盘领取空间。。。
@艳文 我最近正准备hack一个呢,不过115的那个有点复杂,虾米的手机版,所以比较方便
博主你好,提个建议,建议你将这个Python程序与Google app engine结合起来,实现无需打开电脑即可自动签到
如果使用gae的话可能更好一些,gae使用人数现在不少,很多人都知道怎么创建和上传gae应用
@pan 很感谢你的建议,我会抽时间折腾一下GAE的,感谢关注。
能否写一个新浪微盘的签到脚本能,有消息给我发个邮件吧,谢谢
@iux hi,iux,感谢你的支持,不过因为我不用新浪微盘,所以短期内可能不会写类似的脚本,非常不好意思~
额博主你好,我根据你的py代码改成了PHP版,但是好像没有成功,我检查了半天也没有发现问题在哪里,你能帮我看看检查一下么。我自己测试了一下代码好像就是最后签到的CURL模拟出错了,麻烦了。
代码再这里:https://gist.github.com/4368496
@怡红公子 你好,之前没发现链接挂了……现在已经更新了url
最新的脚本可以参见 https://github.com/huxuan/xiami_auto_checkin/blob/master/xiami_auto_checkin.py
大概看下可能应该没有设置UA的原因,不太懂PHP的说……
额,应该不是这个问题呢,我之前设置过UA,也是不行的说,而且没设置UA之前的登陆和抓页面什么的都没有问题~_~哎!
@怡红公子 除了UA和Cookie,其他应该就是参数传递的问题了,你可以对比一下login和checkin时的url,data和header,看看有什么差别,另外感觉你的代码里没有确认是否登录成功,这个可以通过抓取关键字,也就是我代码里的check函数来判断,还有就是我使用的还是旧版的页面,如果你使用了新页面也有可能一些验证规则改了。
恩,COOKIE是肯定没有问题的,因为我有一个步骤就是利用登陆获得的cookie抓取首页来着。check的时候没有传送data,header倒是全部一个不落的都往里头扔进去测试了一遍,发现也没啥关系o(╯□╰)o
登陆认证是否成功这个还没有做,因为还没完成的把这个流程写下来,卡在check那边了T_T
什么是老版的页面啊?我看你的不也是通过手机页面check的么~?
@怡红公子 这个好久以前写的了,反正一直能正常工作,所以就没太管,我是怀疑你可能登陆那步就没有成功,所以先验证是否登录成功是必须的。
@怡红公子:
还是 Cookie 中t_sign_auth 的问题!
Python 脚本中 访问网站的时候生成的 Cookie 是没有 t_sign_auth,但是 当它再去访问首页获取签到URL的时候,这个Cookie就发生了变化,所以只要在你访问首页获取签到URL时 再生成一次Cookie 就行了!
@博主:
对于Python中, 后面 check In 中没发现有再生成 Cookie 的语句,为啥Cookie就变了呢? 最近对 python 还有点感性趣了! 呵呵!!!
按照@qice 的提示已经成功了…=_=! 没想到cookies登陆之后还会改变,真尴尬!
@qice 说实话,我写的时候没太关注你说的那些细节,Python里面是有一个原生的opener来封装这些了,我只是调用了这个接口,并没有任何更多的操作,可能这个cookie的变化是通用的机制吧,在python里已经考虑到了。
报个bug:
line14 : d+ -> \d+
@bugreport 感谢你的指正哈!那个好像是一开始写这个博客的时候,斜杠被忽略了?不过这个毕竟不靠谱哈,还是看github上的源码吧。
谢谢博主分享那么好的东西,不过可以整合到GOOGLE APP ENGINE就更好了。。