一个用于百度贴吧自动签到的python脚本
百度贴吧签到送经验,但是有时候稍微忙点就忘记去签到导致签到不连续了,所以就想到用python脚本挂在服务器,让他自动帮签到,免去了忘记去签到而断掉连续签到的尴尬。
首先要在脚本的相同路径下新建一个config文件。一行一个帐号,cookie需要自己手动记录下来。
保存了config文件后,下面就是要让系统自动的去执行这个脚本。
将脚本和config文件都放在用户的主目录下面,然后输入命令crontab -e新加一条计划任务。
0 0 * * * 就是每天的0点让系统自动执行后面的语句
>> /var/log/baiduautocheckin.log 这个就是将执行脚本的输入记录在文件内,以在文件末尾添加新的数据。
0 0 * * * /usr/bin/python /home/shiniv/BaiduAutoCheckin.py >> /home/shiniv/log/baiduautocheckin.log 2>&1
保存退出,这样系统就能每天帮你去签到,就不会让这个签到数断掉了。
下面就是主要代码
#!/usr/bin/python #coding=utf-8 # # Author: 柠之漠然 <shiniv.ning@gmail.com> # # 使用说明: # 1.安装python 2.x # 2.在脚本当前目录下建立'config'文件 # config文件中,一行一个账号,格式为 # ID1,email1,cookie1 # 不希望收到邮件提醒的email写'x' (邮件提醒在网络不好时可能引起错误导致崩溃) # ID2,x,cookie2 # cookie可以在贴吧页面ctrl+shift+k执行alert(document.cookie);得到 # *最好是手机版贴吧的cookie # *如果要获得多个账号的cookie,切换账号时要直接'清除cookie'不能'注销' # 3.执行 python BaiduAutoCheckin.py # import os import re import urllib import urllib2 import smtplib import threading from email.mime.text import MIMEText # getBars def getBars(cookie,again=10): req=urllib2.Request( url='http://wapp.baidu.com/m?tn=bdFBW&tab=favorite', headers={ 'cookie':cookie, 'User-Agent':'mozilla firefox' } ) if again>0: try: res=urllib2.urlopen(req,timeout=15).read() except: return getBars(cookie,again-1) barList=re.findall(r'(?:\d+\.<a data-cke-saved-href="[^" href="[^" ]+"="">)([^<]+)(?:)',res) if barList: return barList else: return None else: return None # 签到函数 def sign(bar,cookie,again=20): req=urllib2.Request( url='http://wapp.baidu.com/f/?kw='+urllib.quote(bar), headers={ 'cookie':cookie, 'User-Agent':'mozilla firefox' } ) try: res=urllib2.urlopen(req,timeout=10).read() except: return sign(bar,cookie) # 得到地址 addr=re.search(r'(?<=<a href=")[^"]+(?=">签到)',res) # 不能签到或者签到过 if not addr: return '0' # 替换'amp;' addr=re.sub(r'amp;','',addr.group()) req=urllib2.Request( url='http://wapp.baidu.com'+addr, headers={ 'cookie':cookie, 'User-Agetn':'mozilla firefox' } ) try: res=urllib2.urlopen(req,timeout=10).read() except: # 超时 return sign(bar,cookie) success=re.search(r'(?<="light">)\d(?=<\/span>)',res) if not success: if again: return sign(bar,cookie,again-1) return '-1' return success.group() # sendmail def sendMail(usr,email,text): if email=='x': return msg=MIMEText(text,'plain','utf-8') msg['Subject']=usr+'百度贴吧签到结果' msg['From']='shiniv' msg['To']=email+';' try: smtp=smtplib.SMTP_SSL('smtp.gmail.com','25') smtp.login('邮箱地址','密码') smtp.sendmail('发件人邮箱',email+';',msg.as_string()) print '发送成功' except Exception ,e: print '发送失败' print e finally: smtp.quit() # 每个ID的线程 class thread(threading.Thread): def __init__(self,usr,email,cookie): self.usr=usr self.email=email self.cookie=cookie self.logs="" threading.Thread.__init__(self) # run def run(self): bars=getBars(self.cookie) if not bars: print '%s 获取贴吧列表失败!\n' % self.usr return print '%s 共有%d个吧需要签到\n' % (self.usr,len(bars)) self.logs+='======>'+self.usr+' 开始签到!\n' for bar in bars: res=sign(bar,self.cookie) if res=='0': self.logs+=bar+'吧今天已经签到!\n' elif res=='-1': self.logs+=bar+'吧\t###\t签到失败!请自己补签\n' else: self.logs+=bar+'吧签到成功,经验+'+res+'\n' self.logs+='======>'+self.usr+' 签到完成!\n\n' print self.logs return sendMail(self.usr,self.email,self.logs) # 启动,读配置文件 def init(): path = os.path.dirname(os.path.abspath(__file__)) if os.path.exists(path+'/config'): f=open('config') # 开线程 for line in f: args=line.split(',') thread(args[0],args[1],args[2]).start() f.close() else: print '%s没有配置文件!' % path os._exit(-1) init()
【声明】本文 一个用于百度贴吧自动签到的python脚本 为柠之漠然原创文章,转载请注明出自
枫之落叶
并保留本文有效链接:https://blog.shiniv.com/2013/09/a-python-script-for-xiami-autosign/ , 转载请保留本声明!
问下我把BaiduAutoCheckin.py和配置文件(命名为config.sys)一起放在F:checktieba下 运行时为什么显示
F:没有配置文件! 哪里不对了?
我把这句path = os.path.dirname(os.path.abspath(__file__))改成path = os.path.dirname(os.path.abspath(‘F:checktieba’))了