设为首页 收藏本站
查看: 771|回复: 0

[经验分享] 用python写的开心网收菜偷菜的小工具

[复制链接]

尚未签到

发表于 2017-5-8 10:25:57 | 显示全部楼层 |阅读模式
[size=small;]        其实原理很简单,首先用firfox的插件httpfox来获取登录、查看菜地和偷菜的http请求,再使用python的urllib来模拟发送http请求,对回应数据进行分析,就ok了。
[size=small;]        第一步:登录
[size=small;]        第二部:进入花园,获取verify代码
[size=small;]        第三步:查看有成熟菜的好友列表
[size=small;]        第四步:查看某个好友的菜地信息
[size=small;]        第五步:开偷
 
 
[size=small;]        代码如下:
 
[size=small;]#-*- coding:utf-8 -*-import urllibimport socketimport http.cookiejar import randomimport timeimport sysclass farm:        cj = http.cookiejar.cookiejar()    is_login = false    user = ""        password = ""    verify = ""    steal_list = []        def __init__(self,user,password,steal_list):        self.user = user        self.password = password        self.steal_list = steal_list.split(",")            def login(self):        url = "http://www.kaixin001.com/login/login.php";        opener = urllib.request.build_opener(urllib.request.httpcookieprocessor(self.cj))        print("正在登陆开心网....")        f = opener.open(url,"url=/home/&amp;email=" + self.user + "&amp;password=" + self.password)        f.read()        url = "http://www.kaixin001.com/!house/garden/index.php"        print("正在进入农场....")        f = opener.open(url)        data = f.read()                idx = str(data).find("var g_verify = \"");                if idx == -1:            return        idx2 = str(data).find("\"",idx + 18)        if idx2 == -1:            return        is_login = true        self.verify = str(data)[idx+16:idx2]        print("获取key=" + self.verify)    def _havest_one(self,farm_num,fuid):        if self.verify == "":            print("用户尚未登录!")            return        opener = urllib.request.build_opener(urllib.request.httpcookieprocessor(self.cj))        url = "http://www.kaixin001.com/!house/!garden/havest.php?farmnum=" + farm_num + "&amp;seedid=0&amp;fuid=" + fuid + "&amp;r=" + str(random.uniform(0,1))        f = opener.open(url)        data = str(f.read().decode("utf-8"))                if not self.validate(data) :            self.login()            return                index1 = data.find("<ret>")        index2 = data.find("</ret>")        result = data[index1+5:index2]                if result == "succ":                        name = data[data.find("<seedname>")+10:data.find("</seedname>")]            if fuid != "0":                print("★★☆☆成功偷了id(" + fuid + ")家的" + name + "!★★☆☆")            else:                print("★★☆☆成功收获了自己的" + name + "!★★☆☆")        else:            index1 = data.find("<reason>")            index2 = data.find("</reason>")            reason = data[index1+8:index2]            if fuid != "0":                print("!!!!偷id(" + fuid + ")家的菜失败,失败原因:" + reason + "!")            else:                print("!!!!收获自己家的菜失败,失败原因:" + reason + "!")        time.sleep(3)    def validate(self,str):        if str.find("您需要登录后才能继续浏览或操作") != -1:            return false        return true        def havest(self,fuid):        if self.verify == "":            print("用户尚未登录!")            return                opener = urllib.request.build_opener(urllib.request.httpcookieprocessor(self.cj))        url = "http://www.kaixin001.com/!house/!garden/getconf.php?verify=" + self.verify + "&amp;fuid=" + fuid + "&amp;r=" + str(random.uniform(0,1))        f = opener.open(url)        data = f.read()        result = str(data.decode("utf-8"))        if not self.validate(result) :            self.login()            return                    index = result.find("<farmnum>")        name = result[result.find("<name>")+6:result.find("</name>")]        while index != -1:            index2 = result.find("</farmnum>",index)            num = result[index+9:index2]            index3 = result.find("<cropsstatus>",index)            index4 = result.find("</cropsstatus>",index)                        if index3 == -1 or index4 == -1:                index = result.find("<farmnum>",index+10)                continue            status = result[index3+13:index4]            status_str = "状态未知(" + status + ")";            if status == "1":                status_str = "未成熟"            if status == "2":                status_str = "已成熟"            if status == "3":                status_str = "没东西"            index3 = result.find("<name>",index)            index4 = result.find("</name>",index)            fname = "未知"            if index3 != -1 and index4 != -1:                fname = result[index3+6:index4]            print(name + "的第" + num + "块地[" + fname + "]" + status_str)            #成熟的            if status == "2":                flag = false                for f in self.steal_list:                    if f == fname :                        self._havest_one(num,fuid)                        flag = true                if not flag:                    print("●●○○" + fname + "太便宜了,不偷!!!!")            index = result.find("<farmnum>",index+10)    def friend_list(self):        opener = urllib.request.build_opener(urllib.request.httpcookieprocessor(self.cj))        url = "http://www.kaixin001.com/!house/!garden/getfriendmature.php?verify=" + self.verify + "&amp;r=" + str(random.uniform(0,1))        f = opener.open(url)        data = f.read()        result = str(data.decode("utf-8"))        index = result.find("\"uid\":")        while index != -1:            index2 = result.find(",",index)            uid = result[index+6:index2]            index3 = result.find("\"realname\":",index)            index4 = result.find(",",index3)            if index3 == -1 or index4 == -1:                index = result.find("\"uid\":",index+3)                continue            name = result[index3+11:index4]            print("uid=" + uid + ",name=" + name)            self.havest(uid)            time.sleep(5)                        index = result.find("\"uid\":",index+3) f = farm(sys.argv[1],sys.argv[2],sys.argv[3])f.login()while true:    f.havest("0")    time.sleep(10)    f.friend_list()    time.sleep(10)<font size="3">  
</font> 
 
[size=small;] 
[size=small;]使用方法:
[size=small;]1、下载安装python3.1
[size=small;]2、保存上边的文本为farm.py
[size=small;]3、命令行下敲入
[size=small;];farm.py 开心网用户名 开心网密码 要偷的菜的列表(半角逗号分割)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-374553-1-1.html 上篇帖子: Head First 设计模式——观察者模式(Observer Pattern)——Python实现(2) 下篇帖子: Python:通过远程监控用户输入来获取淘宝账号和密码的实验(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表