虾米签到脚本
每天做同一件事,有时候会忘记做没做。你明明记得已经做完了啊,最后发现没做时已经晚了。。
就拿虾米和百度贴吧的签到来说,连续了几天签到后,由于忙着工作的事情,每次都是忘记了我今天签到了没,有时候记得是签了,但是过后才发现没签到时已经完蛋了。。
一怒之下,在网上找了下签到脚本,有2种方式,一个是在linux的机器上面定期执行,第二个就是利用Google Appengine来帮完成签到。
后者设置起来非常麻烦,但是他的优点就是不用使用你自己的系统,不受系统限制。你想让他什么时候签到都可以。
前者的话需要一个unix系统,并且需要安装python(好像基本上都是内置的了)。
如果你的系统是windows的话,可以研究下Google Appengine来实现签到。
我使用的是前者。放着vps不用就是浪费。。
我现在用的是在网上的脚本下修改过的,能发送邮件通知当天的签到结果,防止出现异常情况。
详细的代码如下
#!/usr/bin/python3 #coding=utf-8 import datetime import re from urllib.request import urlopen,install_opener,build_opener,Request,HTTPHandler,HTTPCookieProcessor from http.cookiejar import CookieJar from urllib.parse import urlencode import smtplib from email.mime.text import MIMEText from email.utils import formatdate from email.header import Header #发信服务器 smtpHost = 'smtp.qq.com' #端口 sslPort = '465' #发件人 fromMail = 'someone@shiniv.com' #用户名 username = '123456' #密码 password = '123456' #在此填写账户名(可多账户) user_info=[ {"email":"10000@qq.com","password":"123456"}, ] site_urls={ "index":r"http://www.xiami.com/web", "login":r"http://www.xiami.com/web/login", "signin":r"http://www.xiami.com/task/signin", } login_form={ 'LoginButton':'登陆', 'remember': 1, } #flags site_flags={ "logged-in":r"我的虾米", "login-failed":"email或者密码错误", "identify-required":"请输入验证码", "not-signed-in":"还没有加入虾米网", "signed-in":"我的留言", } headers = {'Referer':'http://www.xiami.com/web/login', 'User-Agent':'Mozilla/5.0',} uid_re="/web/friends/id/([0-9]*)\"" #========================= def login(n): cookie_support= HTTPCookieProcessor(CookieJar()) opener = build_opener(cookie_support, HTTPHandler) install_opener(opener) lf=login_form lf.update(user_info[n]) login_url = 'http://www.xiami.com/web/login' login_data = urlencode(lf).encode("utf-8") login_headers = {'Referer':'http://www.xiami.com/web/login', 'User-Agent':'Opera/9.60',} login_request = Request(login_url, login_data, login_headers) content = urlopen(login_request).read().decode("utf-8") login_flag = None if content.find(site_flags["login-failed"])!=-1: print("%s %s:邮箱或密码错误.\r\n"%(datetime.datetime.now(),user_info[n]["email"])) sendmail(user_info[n]["email"], "账号 %s 登陆失败。\n账号或密码错误,请手动到虾米签到" %(user_info[n]["email"])) if content.find(site_flags["identify-required"])!=-1: print("%s %s:需要输入验证码.\r\n"%(datetime.datetime.now(),user_info[n]["email"])) sendmail(user_info[n]["email"], "账号 %s 登陆失败。\n需要输入验证码,请手动到虾米签到" %(user_info[n]["email"])) if content.find(site_flags["logged-in"])!=-1: print("%s %s:登陆成功."%(datetime.datetime.now(),user_info[n]["email"])) login_flag = 'success' if login_flag==None: return profile_url="http://www.xiami.com/web/profile" profile_request = Request(profile_url,headers=login_headers) content = urlopen(profile_request).read().decode("utf-8") install_opener(opener) UID=re.findall(uid_re,content)[0] checkin_url="http://www.xiami.com/web/checkin/id/"+UID checkin_headers = {'Referer':'http://www.xiami.com/web/', 'User-Agent':'Opera/9.99',} checkin_request = Request(checkin_url, None, checkin_headers) checkin_response = urlopen(checkin_request).read().decode("utf-8") checkin_pattern = re.compile(r'<a class="check_in" href="(.*?)">') checkin_result = checkin_pattern.search(checkin_response) if not checkin_result: pattern = re.compile(r'<div class="idh">已连续签到(\d+)天</div>') result = pattern.search(checkin_response) if result: sendmail(user_info[n]["email"], "亲,账号%s今天已经签到过了,当前已经签到了%s天" %(user_info[n]["email"], result.group(1))) return None; else : sendmail(user_info[n]["email"], "账号%s签到失败,请手动到虾米签到" %(user_info[n]["email"])) return None checkin_url = 'http://www.xiami.com' + checkin_result.group(1) checkin_headers = {'Referer':'http://www.xiami.com/web', 'User-Agent':'BH_Toolchain0.5',} checkin_request = Request(checkin_url, None, checkin_headers) checkin_response = urlopen(checkin_request).read().decode("utf-8") pattern = re.compile(r'<div class="idh">已连续签到(\d+)天</div>') result = pattern.search(checkin_response) if result: sendmail(user_info[n]["email"], "亲,你的账号%s签到成功,当前已经签到%s天" %(user_info[n]["email"], result.group(1))) return None else : sendmail(user_info[n]["email"], "账号%s签到失败,请手动到虾米签到" %(user_info[n]["email"])) return None def sendmail(email, message): #邮件标题和内容 subject = u'[虾米签到]签到结果' body = u'签到结果:\n' + message #初始化邮件 encoding = 'utf-8' mail = MIMEText(body.encode(encoding),'plain',encoding) mail['Subject'] = Header(subject,encoding) mail['From'] = fromMail mail['To'] = email mail['Date'] = formatdate() try: smtp = smtplib.SMTP_SSL(smtpHost,sslPort) smtp.ehlo() smtp.login(username,password) smtp.sendmail(fromMail,email,mail.as_string()) smtp.close() print('send mail seccessfully') except Exception: print ('Error: unable to send email') #========================= if __name__=="__main__": for i in range(len(user_info)): login(i)
保存成为一个.py文件
需要注意的是 这个脚本必须需要python3
如果不是的话得升级成python3才能正常使用。
再将他加进系统的计划任务中
1 0 * * * python3 /your_python_code_path/xiami_sign.py
每天0点1分的时候,就会帮你自动签到,而且会发送邮件报告当前签到情况。
【声明】本文 虾米签到脚本 为柠之漠然原创文章,转载请注明出自
枫之落叶
并保留本文有效链接:https://blog.shiniv.com/2013/10/xiami-auto-sign-script-code/ , 转载请保留本声明!