
最近微信跳一跳非常的火热,很多玩家也第一时间接触了这款游戏,但是怎么才能获得高分呢?很多玩家就不是特别清楚了,最近网上流传出了使用Python脚本实现微信跳一跳高分的神奇 *** 作。今天我便给大家带来微信跳一跳小程序Python脚本高分 *** 作方法的详细解读,一起来看看用Python怎么实现微信跳一跳的高分吧。
微信跳一跳Python脚本高分视频:
点击观看
原理说明
将手机点击到《跳一跳》小程序界面
用 ADB 工具获取当前手机截图,并用 ADB 将截图 pull 上来
计算按压时间
手动版:用 Matplotlib 显示截图,用鼠标先点击起始点位置,然后点击目标位置,计算像素距离;
自动版:靠棋子的颜色来识别棋子,靠底色和方块的色差来识别棋盘;
用 ADB 工具点击屏幕蓄力一跳
目录:
1 PC网页爬虫
2 H5网页爬虫
3 微信小程序爬虫
4 手机APP爬虫
爬取超级猩猩的课表,该平台仅提供了微信小程序这一个途径,前面两种针对html网页的爬取方式都不再适用。
采用抓包分析是我们制定方案的第一步。
我用的Mac电脑,fiddler只有一个简化版,所以另找了Charles这个类似的软件。启动Charles的代理,在手机WIFI中设置好对应的代理就可以开抓了。但是,抓到的>
创建步骤:
1申请免费且支持python的服务器,新浪云sae,新建SAE应用之后,有两种代码提交方式,建议使用SVN(因为git支持代码提交,但不支持环境配置);
2将对应版本的信息复制到微信开发-基本配置-URL,提交显示错误,因为还没有写代码,可以先用web框webpy架写个网页;
查看webpy使用说明:>
查看ase进行python开发入门说明:>
3配置信息,告诉新浪云需要什么运行环境。点击代码管理-编辑代码,将用到的第三方库信息写入configyaml,注意破折号,冒号后面空格!!
libraries:- name: webpy
version: "036"
- name: lxml
version: "234"
在indexwsgi文件中写入python启动程序
新建文件,写入接受微信get请求验证的Python文件
4在indexwgsi中写入以下信息:
#coding=utf-8import os
import sae
import web
from weixinInterface import WeixinInterface
#配置web的路由
urls = (
'/weixin','WeixinInterface'
)
#拼接路径
app_root=ospathdirname(__file__)
templates_root = ospathjoin(app_root,'templates')
#渲染模版
render = webtemplaterender(templates_root)
#启动app
app = webapplication(urls,globals())wsgifunc()
application = saecreate_wsgi_app(app)
5在自己编写的Python文件中写入微信验证和接受信息的程序
#coding=utf-8import hashlib
import web
import time
import os
from lxml import etree
#hashlib用于加密,md5,hash等
#lxml用来解析xml文件
class WeixinInterface(object):
#初始化
def __init__(self):
#拼接路径
selfapp_root = ospathdirname(__file__)
selftemplates_root = ospathjoin(selfapp_root,'templates')
#渲染模版
selfrender = webtemplaterender(selftemplates_root)
#使用get方法,接收微信的get请求,看开发者文档的说明
#
6假设接收文字信息,按照开发者文档的要求,配置template文件夹下reply_textxml文件
$def with(toUser,fromUser,createtime,content)<xml>
<ToUserName><![CDATA[$toUser]]></ToUserName>
<FromUserName><![CDATA[$fromUser]]></FromUserName>
<CreateTime>$createtime</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[$content]]></Content>
</xml>
拿到微信公众号的OpenID之后,就要使用微信派的微信文章接口;通过输入微信公众号的OpenID和微信派网站提供的Token的话,就可以获取返回的json格式的公众号文章列表和文章内容。
由于接口的返回格式是json格式的;各大网站如果想要这些公众号文章的数据的话,还有经过自己的二次加工。
1)打开微信进入应用后点击导航栏我,接着点击钱包,进入钱包后点击城市服务。 2)接着点击城市热力图,接着点击上方搜索栏。 3)搜索找到你要去的地方,就可以查看到该地区的热力图和提示
1、首先F12或者右键审查元素进入开发者模式,点击Emulation。
2、其次点击Network,把Spoofuseragent改成Other,并把下面的带复制进去,有三句。
3、然后回车然后刷新页面即可。Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。
导出微信聊天db文件
手机端导出
发现现在的Android手机都很难root,而db文件肯定在微信的应用目录下。拿不出来的。
电脑端导出(mac)
从~/Library/Containers/comtencentxinWeChat/Data/Library/Application\ Support/comtencentxinWeChat下找到对应账号的数据存储目录。
屏幕快照 2019-10-17 下午54638png
Message
存储聊天消息
Contact
存储联系人信息
获取db密钥
打开微信
命令行运行 lldb -p $(pgrep WeChat)
在 lldb 中输入 br set -n sqlite3_key, 回车
还是在 lldb 中,输入 c, 回车
扫码登录微信
这时候回到 lldb 界面, 输入 memory read --size 1 --format x --count 32 $rsi, 回车
命令行回显结果
0x000000000000: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd
0x000000000008: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd
0x000000000010: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd
0x000000000018: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd
忽略左边的地址( 0x000000000000: ,0x000000000008:),从左到右,从上到下,把形如 0xab 0xcd 的数据拼起来,然后去掉所有的 "0x"和空格、换行, 得到 64 个字符的字符串,这就是 微信数据库的 key
可以遇到的问题(来自网上,我在使用过程中没有这个问题))
db 文件要在另一台 PC 或 Mac 上 登录微信, 才能被关闭,否则里面的聊天记录不是最新的;当然也可以强制调用 wal_checkpoint, 不过作为土办法,在另一台电脑上登一下微信也无妨。
那么wal_checkpoint是什么?是一个sqlite命令,可以参考:>
db browser for sqlite
db数据库可视化工具,打开需要查看的数据库文件:
屏幕快照 2019-10-17 下午64343png
先输入0x,然后把上面得到的密钥复制进来。由于编码的问题,可能复制进来会出现打不开的情况,你可以先把密钥复制到软件执行sql语句的地方,然后在复制。一会python读取db数据库会参考上面的设置参数。
python解密db数据库
这里需要使用sqlite来 *** 作数据库,而sqlite本身是不支持加密和解密的,那么这部分就需要我们自己来完成,但是网上已经有开源库了。
使用到的python库
加密解密db库——pysqlcipher3。
加密算法库——sqlcipher。
微信db加密库——wcdb
参考文档
>
db解密
路径配置
# 加密DB文件绝对路径,微信DB加密方案参考: >解密
import pysqlcipher3dbapi2 as sqliteimport config as cfdef decrypt(path, fileName):# ———————————————————————————————————数据库 *** 作———————————————————————————————————
# 参考:
# 连接数据库如果文件不存在,会自动在当前目录创建:
db = sqliteconnect(path + fileName)
# 创建一个Cursor:
db_cursor = dbcursor()
# ————————————————————————————————————解密数据DB———————————————————————————————————
# sqlcipher加密解密参考:
# sqlcipher开源库地址:
# sqlcipherApi:/
db_cursorexecute("PRAGMA key='" + cfDB_KEY + "';")
db_cursorexecute("PRAGMA cipher_compatibility=3;")
db_cursorexecute("PRAGMA cipher_page_size=1024;")
db_cursorexecute("PRAGMA kdf_iter=64000;")
db_cursorexecute("PRAGMA cipher_hmac_algorithm=HMAC_SHA1;")
db_cursorexecute("PRAGMA cipher_kdf_algorithm=PBKDF2_HMAC_SHA1;")
# 将解密文件导入新的DB文件
decrypt = cfDB_OUT_PATH + 'decrypt_' + fileName
db_cursorexecute("ATTACH DATABASE '" + decrypt + "' AS db_de KEY '" + cfDB_NEW_KEY + "'; -- empty key will disable encryption")
db_cursorexecute("SELECT sqlcipher_export('db_de');")
db_cursorexecute("DETACH DATABASE db_de;")
db_cursorclose()
更多加密参数设置参考:sqlcipher使用文档
将数据库导出为json
import pysqlcipher3dbapi2 as sqliteimport config as cf_wximport dbToJsondef parse(path, fileName):db = sqliteconnect(path + fileName)
db_cursor = dbcursor()
all_table = db_cursorexecute("SELECT name FROM sqlite_master WHERE type = 'table';")fetchall()
print(all_table)
for x in all_table:
table_name = x[0]
print("Searching", table_name)
try:
t = db_cursorexecute('SELECT FROM ' + table_name + ';')
dbToJsontableToFile(db_cursor,table_name)
print('\n')
except BaseException as e:
print(e)
continue
db_cursorclose()
dbclose()
import jsonimport numpy as npimport config as cf_wxclass MyEncoder(jsonJSONEncoder):
def default(self, obj):
if isinstance(obj, npndarray):
return objtolist()
elif isinstance(obj, bytes):
# utf-8会报错:'utf-8' codec can't decode byte 0xfc in position 14: invalid start byte
return str(obj, encoding='ISO-8859-15')
return jsonJSONEncoderdefault(self, obj)def tableToJson(cursor, table):
query = 'SELECT FROM ' + table
rows = cursorexecute(query)
items = []
for row in rows:
item = {}
for key in cursordescription:
itemupdate({key[0]: value for value in row})
itemsappend(item)
# 注意不要写道for里面了,不然数据结果不对
js = jsondumps(items, ensure_ascii=False, cls=MyEncoder, indent=4)
print(js)
print('--------------------------------')def tableToFile(cursor, table):
query = 'SELECT FROM ' + table
rows = cursorexecute(query)
items = []
for row in rows:
item = {}
# 参考:
for idx, col in enumerate(cursordescription):
value = row[idx]
itemupdate({col[0]: value})
itemsappend(item)
# 注意不要写道for里面了,不然数据结果不对
json_name = ""
if(tableendswith('db')):
json_name = table[:(table__len__ - 3)]
else:
json_name = table file = open(cf_wxDB_OUT_JSON_PATH + json_name + "json", 'w+')
# ensure_ascii默认为True,汉字会被编码成'\u4e00\u6839\u806a'
js = jsondumps(items, ensure_ascii=False, cls=MyEncoder, indent=4)
filewrite(js)
fileclose()
关联
查看聊天消息数据发现,不能把聊天消息数据表和对应的聊天人对应起来,因为消息表并没有存是和谁在聊天。如果不能和对应的人联系起来,岂不是感觉很不好。那这里就要用到联系人数据库了,密钥和上面的一样。打开联系人的数据查看:
屏幕快照 2019-10-17 下午73041png
这是其中一个联系人,将"m_nsUsrName"进行32 MD5后得到32为字符串。在者字符串前面加上"Chat_"就是这个联系人在消息数据库里面对应的表名。这样就可以通过这个字符串在消息数据库里找到对应的聊天消息了。
importrandom classWebChat(object): def__init__(self, appid=None, secret=None, code=None): selfappid=appid selfsecret=secret selfcode=code deftoken
需求:生成微信小程序二维码并携带参数,扫码跳转指定页面 获取WxMaService对象 WxMaDefaultConfigImplconfig=newWxMaDefaultConfigImpl();configsetMsgDataFor
以上就是关于《微信跳一跳》通过Python脚本获得高分教程全部的内容,包括:《微信跳一跳》通过Python脚本获得高分教程、4种Python爬虫(3. 微信小程序,如,超级猩猩)、如何用Python进行微信二次开发等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)