js破解学习一

记得学习

目标网页:https://www.huanhuanhuishou.com/gujia/47.html
思路参考:https://mp.weixin.qq.com/s/e39SdyAQwIegVJoEFGz_mg
目标:抓取手机的最高回收价

一、抓包

打开网页以后看源代码中 ctrl+f 找不到价格,所以去Network中找
直接找的XHR,发现没有找到数据的字段
但是在
Request URL: https://www.huanhuanhuishou.com//Goods/getEvaluateData?goods_id=47
中看到一串字符:J6T6d5C1J1T5I0y1Y29kZSUyMiUzQSUyMjEwMDAwJTIyJTJDJTIyb…
然后看了大佬的分享
在Initiator中进入js代码

开始调试这段js
1、在xhr.send打上断点,f5刷新
在这里插入图片描述
2、在Call Stack中查看调用
在这里插入图片描述
3、找到decode,在decode打上断点看,str返回的就是网页数据,里面有最高回收价
在这里插入图片描述
4、进入decode函数,开始用python代码复制js代码
中间本来想用import execjs直接调用js代码的
但是不会用
所以就手写

在这里插入图片描述
主要就是这3个函数
str_replace()替换

str_split()切片

decode()解密

总体代码:

import requests
import base64
from math import ceil
from urllib.request import unquote
from binascii import Error

def get_code_data():
	url = 'https://www.huanhuanhuishou.com//Goods/getEvaluateData'
	params = {'goods_id':47}
	headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0'}
	r = requests.get(url,headers=headers,params=params)
	if r.status_code == 200:
		res = r.text
		code = r.headers['Content-Text']
	return res,code
def str_replace(strs):
	'''
	用py代码模拟js代码-替换
	:params findstrs:["O0O0O", "o000o", "oo00o"]
	:params replacestrs:["=", "+", "/"]
	:params strs:需要解密的字段
	'''
	findstrs = ["O0O0O", "o000o", "oo00o"]
	replacestrs = ["=", "+", "/"]
	lens = len(findstrs)
	i = 0
	while i < lens:
		temp = findstrs[i]
		if temp == "+" or temp == "=" or temp == "/":
			re_ = '\\' + temp + '/g'
		else:
			re_ = '/' + temp + '/g'
		strs = strs.replace(re_,replacestrs[i])
		i+=1
	return strs

def str_split(res,lens):
	'''
	用py代码模拟js代码-切片
	:params res:网页返回的字段res
	:params lens:长度2
	'''
	strlen = len(res)
	count = ceil(strlen/lens)
	i = 0
	reArray = []
	while i < count:
		data = res[i*lens:i * lens + lens]
		reArray.append(''.join(data))
		i += 1
	return reArray

if __name__ == '__main__':
	res,code = get_code_data()
	res = str_replace(res)
	res = str_split(res,2)
	keyArr = list(code)
	for k in keyArr:
		if k != ';':
			k = int(k)
			res[k] = res[k][0]
	strArr = ''.join(res)
	Base = base64.b64decode(strArr).decode('utf-8')
	res2 = unquote(Base,encoding='utf-8')
	print(res2)

现在还有一个问题就是有时正确,有时错误
在这里插入图片描述
会报错UnicodeDecodeError错误,待改进
在这里插入图片描述
然后这个又正确。。。
python
总结一下这些个内置函数的
replace() 字符串替换
ceil() 向上取整 math模块函数
unquote() url解码

JavaScript
lenght() 求字符暗沉长度
eval() 让电脑运行代码
replace() 字符串替换
Math.ceil() 向上取整
decodeURLComponent() url解码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值