虾米自动签到的python脚本


这个页面已经不再维护更新了,你可以从这里了解最新的进展


一个练手的小脚本,暂时只是实现了签到,还没有很完备的错误处理,而且在实现“全自动签到”上还没有想出什么合理的方案,先把代码贴上现丑了……

使用方法很简单
[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’

(已连续签到\d+天)

‘)
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()

# Checkin
checkin_pattern = re.compile(r’‘)
checkin_result = checkin_pattern.search(login_response)
if not checkin_result:
# Checkin Already | Login Failed
result = check(login_response)
if result :
print ‘[Succeed] Checkin Already!’, email, result
else:
print ‘[Error] Login Failed!’
return
checkin_url = ‘http://www.xiami.com’ + checkin_result.group(1)
checkin_headers = {‘Referer’:’http://www.xiami.com/web’, ‘User-Agent’:’Opera/9.60′,}
checkin_request = urllib2.Request(checkin_url, None, checkin_headers)
checkin_response = urllib2.urlopen(checkin_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脚本”

  1. 博主你好,提个建议,建议你将这个Python程序与Google app engine结合起来,实现无需打开电脑即可自动签到

  2. 如果使用gae的话可能更好一些,gae使用人数现在不少,很多人都知道怎么创建和上传gae应用

  3. 能否写一个新浪微盘的签到脚本能,有消息给我发个邮件吧,谢谢

    • @iux hi,iux,感谢你的支持,不过因为我不用新浪微盘,所以短期内可能不会写类似的脚本,非常不好意思~

  4. 额博主你好,我根据你的py代码改成了PHP版,但是好像没有成功,我检查了半天也没有发现问题在哪里,你能帮我看看检查一下么。我自己测试了一下代码好像就是最后签到的CURL模拟出错了,麻烦了。
    代码再这里:https://gist.github.com/4368496

      • 额,应该不是这个问题呢,我之前设置过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 还有点感性趣了! 呵呵!!!

  5. @qice 说实话,我写的时候没太关注你说的那些细节,Python里面是有一个原生的opener来封装这些了,我只是调用了这个接口,并没有任何更多的操作,可能这个cookie的变化是通用的机制吧,在python里已经考虑到了。

    • @bugreport 感谢你的指正哈!那个好像是一开始写这个博客的时候,斜杠被忽略了?不过这个毕竟不靠谱哈,还是看github上的源码吧。

Leave a Reply to iux Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.