Ajax通过传输数据到前端中使用前端的jsDOM操作写入数据 原页面中不记录原数据
查看Fetch/XHR中的数据
数据在这些包中
访问每个页面发现规律为
movie/?limit=10&offset=?
? = 页面索引
使用scarpy生成爬虫
spa1grab中的代码
发现每次的token都不同
一个经典的js前端加密观察源码
寻找到token加密地点
onFetchData: function() {
var t = this;
this.loading = !0;
var a = (this.page - 1) * this.limit # 获取当前页面的定位数据
, e = Object(i["a"])(this.$store.state.url.index, a); #this.$store.state.url.index是一个他定义的字符串 返回的是当前页面的api调用路径 然后传入定位的数据 返回token
this.$axios.get(this.$store.state.url.index, { #连接url进行请求
params: {
limit: this.limit,
offset: a,
token: e
}
Object(i["a"])() == Object.i.a 调用这个a这个函数
a这个函数是什么?
function i() {
// 获取当前时间(单位:秒)
var t = Math.round((new Date).getTime() / 1e3).toString();
// 将函数的参数放入数组中
var e = arguments.length;
var r = new Array(e);
for (var i = 0; i < e; i++) {
r[i] = arguments[i];
}
// 在数组末尾添加当前时间
r.push(t);
// 将数组的元素拼接成一个字符串,然后进行 SHA-1 加密
var o = n.SHA1(r.join(",")).toString(n.enc.Hex);
// 将 SHA-1 加密后的结果和当前时间用逗号拼接成一个字符串
var c = n.enc.Base64.stringify(n.enc.Utf8.parse([o, t].join(",")));
// 返回经过 Base64 编码的字符串
return c;
}
然后爬取后发现不对
又看了看发现这玩意的token是不刷新就可以一直用的.....
然后搞得了捋一下思路
思路
核心代码在这里,首先这个n.SHA1这个函数看起来是一个用SHA1加密后返回 其实不是
思路
核心代码在这里,首先这个n.SHA1这个函数看起来是一个用SHA1加密后返回 其实不是
点进去看到其实是被混淆后的函数名
他返回了两个数据 这里的e是前面的传入的
这里我猜测就是返回了一个数组
在t.init(r)中 我猜测是返回了一个数组
重点代码是在finalize中 会将处理好的加密数据返回给前面的数组
在finalize中 t&& this._append(t) t必须存在才会执行this._append(t)
这里t是会存在的
在_append函数中可以看到
在第一行中 typeof t && (t = h.parse(t))
parse函数中对t赋值了所以parse的返回值很重要
先进入了第一层 parse 然后又调用了f.parse 接码url其中的函数 encodeURLComponent
在跟进这里对我们的t进行了处理 最后返回了一个数组记录为a
然后一路返回到第二句话我们跟进
简单来说这里就是使用了a数组复制了一份相同的数组但是这个数组有一个属性就是sigBytes a数组当时使用的t 也就是 '/api/movie,0 ....'这个的长度
这个有sigBytes属性的数组我们称为b
然后将自己的._DataBytes加上b数组的sigBytes大小
然后到最关键也是比较麻烦的函数了
_doFinalize
将之前的数据全部拿到了
t = this._data是数组b
e=t.words 是数组a
r= 是8倍的数组长度
将数组设置了一些他需要的参数
然后直接返回了 注意这里 只有最后一个的this._hash会被返回
this._hash就是他每次不同数据的处理的加密会改变的部分所以我们要知道this._hash的改变(因为这里返回了this._hash一点点看过来也是最终的返回值)
在一顿调试下发现在this_process()中改变了this._hash的值,this._hash是有默认值的为
_hash = [
1732584193,
4023233417,
2562383102,
271733878,
3285377520
]
进入这个函数看到
r = this.data b数组
n = r.words a数组
i = r.sigBytes
o = this.blockSize
这是最关键的几个参数
这里都是预备数据的部分
在_doProcessBlock中就是最后的数据赋值
在这个函数中把前面的this._hash和a数组b数组都哪来进行对this._hash赋值
然后就开始返回
出来后就是this_hash返回的值又去执行了.toString(n.enc.Hex)
进入
在进入就可以看到最后的加密过程 这里传入的t就是this_hash
最后就可以得到o了
这个是获取当前时间然后加密后的数据 然后传入n.SHA1中
路捋清楚了就可以写脚本加密了
// 引入 CryptoJS 库
const b = require('crypto-js');
for (var t111 = Math.round((new Date).getTime() / 1e3).toString(), e = arguments.length, r123 = new Array(e), i = 0; i < e; i++)
r123[i] = arguments[i];
var t ='/api/movie,10,'+t111
for (var e = t.length, r2 = [], n = 0; n < e; n++)
r2[n >>> 2] |= (255 & t.charCodeAt(n)) << 24 - n % 4 * 8;
rs = {
"words": r2,
"sigBytes": t.length
}
var t1 = rs, e = r2, r1 = 8 * t.length, n = 8 * t.length;
e[n >>> 5] |= 128 << 24 - n % 32,
e[14 + (n + 64 >>> 9 << 4)] = Math.floor(r1 / 4294967296),
e[15 + (n + 64 >>> 9 << 4)] = r1,
t1.sigBytes = 4 * e.length
e[n >>> 5] |= 128 << 24 - n % 32,
e[14 + (n + 64 >>> 9 << 4)] = Math.floor(r1 / 4294967296),
e[15 + (n + 64 >>> 9 << 4)] = r1,
t1.sigBytes = 4 * e.length
e =
{
"words": e,
"sigBytes": t.sigBytes
}
function _doProcessBlock(t, e, r1) {
for (var r = r1, n = r[0], i = r[1], o = r[2], s = r[3], a = r[4], f = 0; f < 80; f++) {
if (f < 16)
c[f] = 0 | t[e + f];
else {
var h = c[f - 3] ^ c[f - 8] ^ c[f - 14] ^ c[f - 16];
c[f] = h << 1 | h >>> 31
}
var u = (n << 5 | n >>> 27) + a + c[f];
u += f < 20 ? 1518500249 + (i & o | ~i & s) : f < 40 ? 1859775393 + (i ^ o ^ s) : f < 60 ? (i & o | i & s | o & s) - 1894007588 : (i ^ o ^ s) - 899497514,
a = s,
s = o,
o = i << 30 | i >>> 2,
i = n,
n = u
}
r[0] = r[0] + n | 0,
r[1] = r[1] + i | 0,
r[2] = r[2] + o | 0,
r[3] = r[3] + s | 0,
r[4] = r[4] + a | 0
}
_hash = [
1732584193,
4023233417,
2562383102,
271733878,
3285377520
]
var r = e
n = rs
, i = r.sigBytes
, o = 16
, s = 4 * o
, a = i / s;
a = e ? 1 : t.max((0 | a) - 0, 0);
var f = a * o
, h = 64
c = []
if (f) {
for (var u = 0; u < f; u += o){
_doProcessBlock(r2,u,r1=_hash)
}
r.sigBytes -= h
}
n = {
"words": _hash,
"sigBytes": 20
}
function stringify(n) {
for (var e = n["words"], r = 20, n = [], i = 0; i < r; i++) {
var o = e[i >>> 2] >>> 24 - i % 4 * 8 & 255;
n.push((o >>> 4).toString(16)),
n.push((15 & o).toString(16))
}
return n.join("")
}
o = stringify(n)
c = b.enc.Base64.stringify(b.enc.Utf8.parse([o, t111].join(",")));
console.log(c)
这里的c就是最后的加密数据了
使用subprocess库将加密的数据去除后扔给token
import re
import subprocess
import requests
result = subprocess.run(['node', 'encryption.js'], capture_output=True)
q = re.compile("'(.*?)'").findall(str(result.stdout))[0].replace('\\n', '')
start_urls = [
f"https://spa2.scrape.center/api/movie/?limit=10&offset=10&token={q}"]
print(start_urls)
harder = {
'Accept': 'application/json, text/plain, */*',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en-GB;q=0.8,en;q=0.7',
'Connection': 'keep-alive',
'Host': 'spa2.scrape.center',
'Referer': 'https://spa2.scrape.center/',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0',
'sec-ch-ua': 'Microsoft Edge;v="119", Chromium;v="119", Not?A_Brand;v="24"', # 修正此行
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': 'Windows'
}
print(requests.get(start_urls[0], headers=harder).text)
{"count":102,"results":[{"id":11,"name":"V字仇杀队","alias":"V for Vendetta",
"cover":"https://p1.meituan.net/movie/06ec3c1c647942b1e40bca84036014e9490863.jpg@464w_644h_1e_1c","categories":
["剧情","动作","科幻","惊悚"],"published_at":"2005-12-11","minute":132,"score":8.9,"regions":["美国","英国","德国"]},
{"id":12,"name":"少年派的奇幻漂流","alias":"Life of Pi","cover":"https://p0.meituan.net/movie/34998e31c6d07475f1add6b8b16fd21d192579.jpg@464w_644h_1e_1c","categories":["剧情","奇幻","冒险"],"published_at":"2012-11-22","minute":127,"score":8.9,"regions":["美国","中国台湾","英国","加拿大"]},{"id":13,"name":"美丽心灵","alias":"A Beautiful Mind","cover":"https://p0.meituan.net/movie/7b7d1f8aa36d7a15463ce6942708a1a7265296.jpg@464w_644h_1e_1c",
"categories":["剧情","传记"],"published_at":"2001-12-13","minute":135,"score":8.8,"regions":["美国"]},{"id":14,"name":"初恋这件小事","alias":"สิ่งเล็กเล็กที่เรียกว่า...รัก","cover":
"https://p1.meituan.net/movie/05bc2f0ccf97aacfa64fcac4f237cf8082385.jpg@464w_644h_1e_1c","categories":["喜剧","爱情"],"published_at":"2012-06-05","minute":118,"score":8.9,"regions":["泰国"]},{"id":15,"name":"借东西的小人阿莉埃蒂","alias":"借りぐらしのアリエッティ","cover":"https://p1.meituan.net/movie/640cc32445df972b066c9a04b194da141104515.jpg@464w_644h_1e_1c","categories":["动画","奇幻","冒险"],"published_at":"2010-07-17","minute":94,"score":8.8,"regions":["日本"]},{"id":16,"name":"一一","alias":"Yi yi: A One and a Two","cover"
:"https://p0.meituan.net/movie/6cb23356f9d8e0b506349561c633310d102189.jpg@464w_644h_1e_1c","categories":["剧情","爱情","家庭"],"published_at":"2000-05-15","minute":173,"score":8.8,"regions":["中国台湾","日本"]},{"id":17,"name":"美丽人生","alias":"La vita è bella","cover":"https://p1.meituan.net/movie/580d81a2c78bf204f45323ddb4244b6c6821175.jpg@464w_644h_1e_1c","categories":["战争","剧情","爱情"]
,"published_at":"2020-01-03","minute":116,"score":9.1,"regions":["意大利"]},
{"id":18,"name":"海上钢琴师","alias":"La leggenda del pianista sull'oceano",
"cover":"https://p0.meituan.net/movie/609e45bd40346eb8b927381be8fb27a61760914.jpg@464w_644h_1e_1c","categories"
:["剧情","爱情","音乐"],"published_at":"2019-11-15","minute":126,"score":9.1,"regions":["意大利"]},{"id":19,"name":
"千与千寻","alias":"千と千尋の神隠し","cover":"https://p0.meituan.net/movie/30b20139e68c46d02e0893277d633b701292458.jpg@464w_644h_1e_1c","categories"
:["动画","冒险","奇幻","家庭"],"published_at":"2019-06-21","minute":125,"score":9.1,"regions":["日本"]},{"id":20,"name":"迁徙的鸟","alias":"The Travelling Birds","cover":"https://p1.meituan.net/movie/a1634f4e49c8517ae0a3e4adcac6b0dc43994.jpg@464w_644h_1e_1c","categories":["纪录片"],"published_at":"2001-12-12","minute":98,"score":9.1,"regions":["法国","德国","意大利","西班牙","瑞士"]}]}
使用爬虫架构scrapy生成爬虫 给传入数据
import scrapy
import subprocess
import re
page = 0
class Spa2grabSpider(scrapy.Spider):
name = "spa2grab"
allowed_domains = ["spa2.scrape.center"]
start_urls = []
for i in range(1, 11):
urls = f'/api/movie,{i * 10},'
result = subprocess.run(['node', 'encryption.js', urls], capture_output=True)
q = re.compile("'(.*?)'").findall(str(result.stdout))[0].replace('\\n', '')
start_urls.append(f"https://spa2.scrape.center/api/movie/?limit=10&offset={i * 10}&token={q}")
def parse(self, response):
global page
q = response.body.decode('utf-8')
p = open(f'JSON\\ssr2-{page}.json', 'w', encoding='utf-8')
p.write(q)
p.close()
page += 1
保存数据
就是简单的下滑刷新获取hrx 看包的规律就行了
import scrapy
ia = 0
class Spa3grbgSpider(scrapy.Spider):
name = "spa3grbg"
allowed_domains = ["spa3.scrape.center"]
start_urls = [f"https://spa3.scrape.center/api/movie/?limit=10&offset={i * 10}" for i in range(0, 11)]
def parse(self, response):
global ia
q = open(f'{ia}.json', 'w', encoding='utf-8')
q.write(response.body.decode('utf-8'))
ia += 1
没什么区别 没有反爬抓数据就是一套流程
没啥能说的
这题跟SPA2是一样的加密过程不同的是
他混淆了函数名但其实和之前也差不多
所以直接跳过前面相同的部分 只放截图了
从这里开始就有点不一样了
在这个函数当中由于混淆所以导致没有直接显示函数加密 其实这里就是base64加密返回而已 我们看看这里面是什么结构
_0x104b5b = _0x358b1f['encode'](_0x3c8435);
在这里面中调用了几个函数
return _0x4a7a4c ? _0x3b6a4b(String(_0x53d700))['replace'](/[+\/]/g, function(_0x4f1724) { return '+' == _0x4f1724 ? '-' : '_'; })['replace'](/=/g, '') : _0x3b6a4b(String(_0x53d700)); }
_0x3b6a4b函数
一路跟进可以看到一个
_0x2931cf['btoa'](_0x17bb1d); 这个btoa其实就是base64的加密函数我们点开他的属性
可以看到_0x2931cf 就是一个加密库的对象
最后返回一个base64过的数据
最后就能得到数据了
已经知道是怎么加密的了把这些代码复制下来就行了
编写加密token的脚本
for (var _0x5da681 = Math['round'](new Date()['getTime']() / 0x3e8)['toString'](), _0x2a83dd = arguments['length'], _0x31a891 = new Array(_0x2a83dd), _0x596a02 = 0x0; _0x596a02 < _0x2a83dd; _0x596a02++)
_0x31a891[_0x596a02] = arguments[_0x596a02];
_0x5cf7f1 = '/api/movie,'+_0x5da681
function stringify(_0x1e1ac6) {
for (var _0xed1d96 = _0x1e1ac6['words'], _0x261fc7 = _0x1e1ac6['sigBytes'], _0x25fa39 = [], _0x5c53ae = 0x0; _0x5c53ae < _0x261fc7; _0x5c53ae++) {
var _0x42cb9a = _0xed1d96[_0x5c53ae >>> 0x2] >>> 0x18 - _0x5c53ae % 0x4 * 0x8 & 0xff;
_0x25fa39['push']((_0x42cb9a >>> 0x4)['toString'](0x10)),
_0x25fa39['push']((0xf & _0x42cb9a)['toString'](0x10));
}
return _0x25fa39['join']('');
}
function _doProcessBlock(_0x5bf1ea, _0x8534dc,_hash) {
_0x352ec6=[]
for (var _0x3ce8f2 = _hash, _0x261089 = _0x3ce8f2[0x0], _0x1b02d9 = _0x3ce8f2[0x1], _0xbe4c94 = _0x3ce8f2[0x2], _0x5ea3f1 = _0x3ce8f2[0x3], _0x134614 = _0x3ce8f2[0x4], _0x2878b8 = 0x0; _0x2878b8 < 0x50; _0x2878b8++) {
if (_0x2878b8 < 0x10)
_0x352ec6[_0x2878b8] = 0x0 | _0x5bf1ea[_0x8534dc + _0x2878b8];
else {
var _0x4cf16a = _0x352ec6[_0x2878b8 - 0x3] ^ _0x352ec6[_0x2878b8 - 0x8] ^ _0x352ec6[_0x2878b8 - 0xe] ^ _0x352ec6[_0x2878b8 - 0x10];
_0x352ec6[_0x2878b8] = _0x4cf16a << 0x1 | _0x4cf16a >>> 0x1f;
}
var _0x3da440 = (_0x261089 << 0x5 | _0x261089 >>> 0x1b) + _0x134614 + _0x352ec6[_0x2878b8];
_0x3da440 += _0x2878b8 < 0x14 ? 0x5a827999 + (_0x1b02d9 & _0xbe4c94 | ~_0x1b02d9 & _0x5ea3f1) : _0x2878b8 < 0x28 ? 0x6ed9eba1 + (_0x1b02d9 ^ _0xbe4c94 ^ _0x5ea3f1) : _0x2878b8 < 0x3c ? (_0x1b02d9 & _0xbe4c94 | _0x1b02d9 & _0x5ea3f1 | _0xbe4c94 & _0x5ea3f1) - 0x70e44324 : (_0x1b02d9 ^ _0xbe4c94 ^ _0x5ea3f1) - 0x359d3e2a,
_0x134614 = _0x5ea3f1,
_0x5ea3f1 = _0xbe4c94,
_0xbe4c94 = _0x1b02d9 << 0x1e | _0x1b02d9 >>> 0x2,
_0x1b02d9 = _0x261089,
_0x261089 = _0x3da440;
}
_0x3ce8f2[0x0] = _0x3ce8f2[0x0] + _0x261089 | 0x0,
_0x3ce8f2[0x1] = _0x3ce8f2[0x1] + _0x1b02d9 | 0x0,
_0x3ce8f2[0x2] = _0x3ce8f2[0x2] + _0xbe4c94 | 0x0,
_0x3ce8f2[0x3] = _0x3ce8f2[0x3] + _0x5ea3f1 | 0x0,
_0x3ce8f2[0x4] = _0x3ce8f2[0x4] + _0x134614 | 0x0;
}
for (var _0x41bd9f = _0x5cf7f1['length'], _0x2d0ca7 = [], _0x427403 = 0x0; _0x427403 < _0x41bd9f; _0x427403++)
_0x2d0ca7[_0x427403 >>> 0x2] |= (0xff & _0x5cf7f1['charCodeAt'](_0x427403)) << 0x18 - _0x427403 % 0x4 * 0x8;
_0x2d0ca7,_0x41bd9f
_0x2d0ca7 = {
"words": _0x2d0ca7,
"sigBytes": _0x41bd9f
}
var _0x361552 = []
, _0x3bebb4 = _0x2d0ca7['words']
, _0x9d2e2a = 0
, _0x122646 = _0x2d0ca7['sigBytes'];
for (_0x4f2b63 = 0x0; _0x4f2b63 < _0x122646; _0x4f2b63 += 0x4)
_0x361552[_0x9d2e2a + _0x4f2b63 >>> 0x2] = _0x3bebb4[_0x4f2b63 >>> 0x2];
_nDataBytes = _0x2d0ca7["sigBytes"],
_0x135766 = _0x2d0ca7
, _0x883405 = _0x135766['words']
, _0x3785b2 = 0x8 * _nDataBytes
, _0x298e2b = 0x8 * _0x135766['sigBytes'];
_0x883405[_0x298e2b >>> 0x5] |= 0x80 << 0x18 - _0x298e2b % 0x20,
_0x883405[0xe + (_0x298e2b + 0x40 >>> 0x9 << 0x4)] = Math['floor'](_0x3785b2 / 0x100000000),
_0x883405[0xf + (_0x298e2b + 0x40 >>> 0x9 << 0x4)] = _0x3785b2,
_0x135766['sigBytes'] = 0x4 * _0x883405['length']
_hash=[
1732584193,
4023233417,
2562383102,
271733878,
3285377520
]
var _0x24b14e = _0x135766
, _0x411856 = _0x2d0ca7['words']
, _0xf6d078 = _0x2d0ca7['sigBytes']
, _0x4f0cfc = 16
, _0x18e951 = 0x4 * _0x4f0cfc
, _0x4de16e = _0xf6d078 / _0x18e951;
_0x4de16e = 1
var _0x229cc1 = _0x4de16e * _0x4f0cfc
, _0xb08f1 = 64
if (_0x229cc1) {
for (var _0x2be887 = 0x0; _0x2be887 < _0x229cc1; _0x2be887 += _0x4f0cfc)
_doProcessBlock(_0x411856, _0x2be887,_hash);
var _0xf15233 = _0x411856['splice'](0x0, _0x229cc1);
_0x24b14e['sigBytes'] -= _0xb08f1;
}
_hash ={
'sigBytes' : 20,
'words' : _hash
}
function _0x243a2c(_0x17bb1d) {
return btoa(_0x17bb1d);
}
function _0x2eaa23(_0x4df29c) {
if (_0x4df29c['length'] < 0x2) {
var _0x560718 = _0x4df29c['charCodeAt'](0x0);
return _0x560718 < 0x80 ? _0x4df29c : _0x560718 < 0x800 ? _0x3139f6(0xc0 | _0x560718 >>> 0x6) + _0x3139f6(0x80 | 0x3f & _0x560718) : _0x3139f6(0xe0 | _0x560718 >>> 0xc & 0xf) + _0x3139f6(0x80 | _0x560718 >>> 0x6 & 0x3f) + _0x3139f6(0x80 | 0x3f & _0x560718);
}
_0x560718 = 0x10000 + 0x400 * (_0x4df29c['charCodeAt'](0x0) - 0xd800) + (_0x4df29c['charCodeAt'](0x1) - 0xdc00);
return _0x3139f6(0xf0 | _0x560718 >>> 0x12 & 0x7) + _0x3139f6(0x80 | _0x560718 >>> 0xc & 0x3f) + _0x3139f6(0x80 | _0x560718 >>> 0x6 & 0x3f) + _0x3139f6(0x80 | 0x3f & _0x560718);
}
function _0x5d413d(_0x5bada1) {
_0x1c5ffc = '/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g'
return _0x5bada1['replace'](_0x1c5ffc, _0x2eaa23);
}
function _0x3b6a4b(_0x3d0c02) {
return _0x243a2c(_0x5d413d(_0x3d0c02));
}
function _0x45ae25(_0x53d700, _0x4a7a4c) {
return _0x4a7a4c ? _0x3b6a4b(String(_0x53d700))['replace'](/[+\/]/g, function(_0x4f1724) {
return '+' == _0x4f1724 ? '-' : '_';
})['replace'](/=/g, '') : _0x3b6a4b(String(_0x53d700));
}
n = stringify(_hash)+','+_0x5da681
q = _0x45ae25(n)
console.log(q)
在python中调用
import re
import scrapy
import subprocess
page = 0
class Spa6grabSpider(scrapy.Spider):
name = "spa6grab"
start_urls = []
for i in range(1, 11):
urls = f'/api/movie,{i * 10},'
result = subprocess.run(['node', 'Encrypttoken.js', urls], capture_output=True)
q = re.compile("'(.*?)'").findall(str(result.stdout))[0].replace('\\n', '')
start_urls.append(f"https://spa6.scrape.center/api/movie?limit=10&offset={i*10}&token={q}")
def parse(self, response):
global page
q = response.body.decode('utf-8')
p = open(f'JSON\\ssr6-{page}.json', 'w', encoding='utf-8')
p.write(q)
p.close()
page += 1
最终获取数据
我感觉他这种函数加密之后.... 跟容易逆向了 因为之前的函数名可能相同属性相同导致变量覆盖的问题被完美解决了 他混淆后每个数据都不一样的名字
Object(_0x2fa7bd['a'])(this['$store']['state']['url']['index']);
_0x2fa7bd 这里是一个地址是 看样子大概率就是一个类的a方法
function _0x456254() {
for (var _0x5da681 = Math['round'](new Date()['getTime']() / 0x3e8)['toString'](), _0x2a83dd = arguments['length'], _0x31a891 = new Array(_0x2a83dd), _0x596a02 = 0x0; _0x596a02 < _0x2a83dd; _0x596a02++)
_0x31a891[_0x596a02] = arguments[_0x596a02];
_0x31a891['push'](_0x5da681);
var _0xf7c3c7 = _0x189cbb['SHA1'](_0x31a891['join'](','))['toString'](_0x189cbb['enc']['Hex'])
, _0x3c8435 = [_0xf7c3c7, _0x5da681]['join'](',')
, _0x104b5b = _0x358b1f['encode'](_0x3c8435);
return _0x104b5b;
}
看到一个典型的加密 只不过函数名被混淆了
for (var _0x5da681 = Math['round'](new Date()['getTime']() / 0x3e8)['toString'](), _0x2a83dd = arguments['length'], _0x31a891 = new Array(_0x2a83dd), _0x596a02 = 0x0; _0x596a02 < _0x2a83dd; _0x596a02++)
_0x31a891[_0x596a02] = arguments[_0x596a02];
返回当前时间的时间戳差不多
var _0xf7c3c7 = _0x189cbb['SHA1'](_0x31a891['join'](','))['toString'](_0x189cbb['enc']['Hex'])
, _0x3c8435 = [_0xf7c3c7, _0x5da681]['join'](',')
, _0x104b5b = _0x358b1f['encode'](_0x3c8435);
_0xf7c3c7 通过了加密得到了一个加密数值 发现每次都不一样所以加密的关键在这里
两个函数 init是初始化的意思 前面初始化了这个数组 在使用数组执行了['finalize']函数
return new _0x46bc23['init'](_0x3360f2)['finalize'](_0x343681);
传入了(_0x343681);'/api/movie,1699678917'
这里的(_0xcbc8c9) 就是'/api/movie,1699678917'
'finalize': function(_0xcbc8c9) {
_0xcbc8c9 && this['_append'](_0xcbc8c9);
var _0x5b1b52 = this['_doFinalize']();
return _0x5b1b52;
},
一路追过去看到这个
'parse': function(_0x5cf7f1) {
for (var _0x41bd9f = _0x5cf7f1['length'], _0x2d0ca7 = [], _0x427403 = 0x0; _0x427403 < _0x41bd9f; _0x427403++)
_0x2d0ca7[_0x427403 >>> 0x2] |= (0xff & _0x5cf7f1['charCodeAt'](_0x427403)) << 0x18 - _0x427403 % 0x4 * 0x8;
return new _0x4c95df['init'](_0x2d0ca7,_0x41bd9f);
}
返回一个加密过的数组
不是很理解这题
直接拿他的mian.js得了
import scrapy
class Spa7grabSpider(scrapy.Spider):
name = "spa7grab"
allowed_domains = ["spa7.scrape.center"]
start_urls = ["https://spa7.scrape.center/js/main.js"]
def parse(self, response):
print(response.body.decode('utf-8'))
const players = [
{
name: '凯文-杜兰特',
image: 'durant.png',
birthday: '1988-09-29',
height: '208cm',
weight: '108.9KG'
}, {
name: '勒布朗-詹姆斯',
image: 'james.png',
birthday: '1984-12-30',
height: '206cm',
weight: '113.4KG'
}, {
name: '斯蒂芬-库里',
image: 'curry.png',
birthday: '1988-03-14',
height: '191cm',
weight: '83.9KG'
}, {
name: '詹姆斯-哈登',
image: 'harden.png',
birthday: '1989-08-26',
height: '196cm',
weight: '99.8KG'
}, {
name: '扬尼斯-安特托昆博',
image: 'antetokounmpo.png',
birthday: '1994-12-06',
height: '211cm',
weight: '109.8KG'
}, {
name: '拉塞尔-威斯布鲁克',
image: 'westbrook.png',
birthday: '1988-11-12',
height: '191cm',
weight: '90.7KG'
}, {
name: '凯里-欧文',
image: 'irving.png',
birthday: '1992-03-23',
height: '188cm',
weight: '88.5KG'
}, {
name: '安东尼-戴维斯',
image: 'davis.png',
birthday: '1993-03-11',
height: '208cm',
weight: '114.8KG'
}, {
name: '乔尔-恩比德',
image: 'embiid.png',
birthday: '1994-03-16',
height: '213cm',
weight: '127.0KG'
}, {
name: '克雷-汤普森',
image: 'thompson.png',
birthday: '1990-02-08',
height: '198cm',
weight: '97.5KG'
}, {
name: '考瓦伊-莱昂纳德',
image: 'leonard.png',
birthday: '1991-06-29',
height: '201cm',
weight: '102.1KG'
}, {
name: '达米安-利拉德',
image: 'lillard.png',
birthday: '1990-07-15',
height: '188cm',
weight: '88.5KG'
}, {
name: '卡梅罗-安东尼',
image: 'anthony.png',
birthday: '1984-05-29',
height: '203cm',
weight: '108KG'
}, {
name: '尼科拉-约基奇',
image: 'jokic.png',
birthday: '1995-02-19',
height: '213cm',
weight: '128.8KG'
}, {
name: '卡尔-安东尼-唐斯',
image: 'towns.png',
birthday: '1995-11-15',
height: '211cm',
weight: '112.5KG'
}, {
name: '克里斯-保罗',
image: 'paul.png',
birthday: '1985-05-06',
height: '185cm',
weight: '79.4KG'
},
]
new Vue({
el: '#app',
data: function () {
return {
players,
key: 'fipFfVsZsTda94hJNKJfLoaqyqMZFFimwLt'
}
},
methods: {
getToken(player) {
let key = CryptoJS.enc.Utf8.parse(this.key)
const {name, birthday, height, weight} = player
let base64Name = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(name))
let encrypted = CryptoJS.DES.encrypt(`${base64Name}${birthday}${height}${weight}`, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
})
return encrypted.toString()
}
}
})
数据在eval里面被压缩了 把内容复制出来然后使用网站格式化数据
eval(function(p, a, c, k, e, r) {
e = function(c) {
return (c < 62 ? '' : e(parseInt(c / 62))) + ((c = c % 62) > 35 ? String.fromCharCode(c + 29) : c.toString(36))
};
if ('0'.replace(0, e) == 0) {
while (c--) r[e(c)] = k[c];
k = [function(e) {
return r[e] || e
}];
e = function() {
return '[0-9a-zA-D]'
};
c = 1
};
while (c--)
if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]);
return p
}('g h=[{0:\'凯文-杜兰特\',4:\'durant.5\',1:\'b-09-c\',2:\'i\',3:\'108.j\'},{0:\'勒布朗-詹姆斯\',4:\'james.5\',1:\'k-12-30\',2:\'206cm\',3:\'113.l\'},{0:\'斯蒂芬-库里\',4:\'curry.5\',1:\'b-7-14\',2:\'m\',3:\'83.j\'},{0:\'詹姆斯-哈登\',4:\'harden.5\',1:\'1989-n-26\',2:\'196cm\',3:\'99.8\'},{0:\'扬尼斯-安特托昆博\',4:\'antetokounmpo.5\',1:\'o-12-d\',2:\'p\',3:\'109.8\'},{0:\'拉塞尔-威斯布鲁克\',4:\'westbrook.5\',1:\'b-11-12\',2:\'m\',3:\'90.7KG\'},{0:\'凯里-欧文\',4:\'irving.5\',1:\'1992-7-23\',2:\'q\',3:\'r.9\'},{0:\'安东尼-戴维斯\',4:\'davis.5\',1:\'1993-7-11\',2:\'i\',3:\'114.8\'},{0:\'乔尔-恩比德\',4:\'embiid.5\',1:\'o-7-16\',2:\'s\',3:\'127.0KG\'},{0:\'克雷-汤普森\',4:\'thompson.5\',1:\'t-u-n\',2:\'198cm\',3:\'97.9\'},{0:\'考瓦伊-莱昂纳德\',4:\'leonard.5\',1:\'1991-d-c\',2:\'201cm\',3:\'102.1KG\'},{0:\'达米安-利拉德\',4:\'lillard.5\',1:\'t-07-15\',2:\'q\',3:\'r.9\'},{0:\'卡梅罗-安东尼\',4:\'anthony.5\',1:\'k-v-c\',2:\'203cm\',3:\'108KG\'},{0:\'尼科拉-约基奇\',4:\'jokic.5\',1:\'w-u-19\',2:\'s\',3:\'128.8\'},{0:\'卡尔-安东尼-唐斯\',4:\'towns.5\',1:\'w-11-15\',2:\'p\',3:\'112.9\'},{0:\'克里斯-保罗\',4:\'paul.5\',1:\'1985-v-d\',2:\'185cm\',3:\'79.l\'},];new Vue({el:\'#app\',data:function(){x{h,a:\'NAhwcEVLEnRoJA7acv6eZGvXWjtijppyHXh\'}},methods:{getToken(y){e a=6.f.z.A(this.a);g{0,1,2,3}=y;e B=6.f.Base64.stringify(6.f.z.A(0));e C=6.DES.encrypt(`${B}${1}${2}${3}`,a,{D:6.D.ECB,padding:6.pad.Pkcs7});x C.toString()}}})', [], 40, 'name|birthday|height|weight|image|png|CryptoJS|03|8KG|5KG|key|1988|29|06|let|enc|const|players|208cm|9KG|1984|4KG|191cm|08|1994|211cm|188cm|88|213cm|1990|02|05|1995|return|player|Utf8|parse|base64Name|encrypted|mode'.split('|'), 0, {})) < /script>
Javascript格式化在线工具 - Coding.Tools
JJEncode解码
$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$$__+$._$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$$_+$._$$+$.__+"\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$.___+(![]+"")[$._$_]+$.$_$_+"\\"+$.__$+$.$$$+$.__$+$.$$$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$$_+$._$$+"=[{\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+":'\\"+$._+$.$_$+$.__$+$.$$$_+$.$$$$+"\\"+$._+$.$$_+$.$_$+$.$___+$.$$$+"-\\"+$._+$.$$_+$.$$$+$.$_$+$.$$__+"\\"+$._+$.$_$+$.__$+$.$$$+$.___+"\\"+$._+$.$$$+$._$_+$.$$$+$.$__$+"',\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$_$+$.$_$_+"\\"+$.__$+$.$__+$.$$$+$.$$$_+":'"+$.$$_$+$._+"\\"+$.__$+$.$$_+$._$_+$.$_$_+"\\"+$.__$+$.$_$+$.$$_+$.__+".\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+"',"+$.$_$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$_+$.__+"\\"+$.__$+$.$_$+$.___+$.$$_$+$.$_$_+"\\"+$.__$+$.$$$+$.__$+":'"+$.__$+$.$__$+$.$___+$.$___+"-"+$.___+$.$__$+"-"+$._$_+$.$__$+"',\\"+$.__$+$.$_$+$.___+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$._$_+$.___+$.$___+$.$$__+"\\"+$.__$+$.$_$+$.$_$+"',\\"+$.__$+$.$$_+$.$$$+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.__$+$.___+$.$___+"."+$.$__$+"\\"+$.__$+$.__$+$._$$+"\\"+$.__$+$.___+$.$$$+"'},{\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+":'\\"+$._+$.$_$+$._$_+$.$$_$+$._$_+"\\"+$._+$.$_$+$.$$$_+$.___+$._$$+"\\"+$._+$.$$_+$.$$$+$.__$+$.$$$+"-\\"+$._+$.$___+$.$_$_+$.$$$+$.$__$+"\\"+$._+$.$_$+$.$__$+$.$$__+$.$$_+"\\"+$._+$.$$_+$.$_$+$.$_$_+$.$$$$+"',\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$_$+$.$_$_+"\\"+$.__$+$.$__+$.$$$+$.$$$_+":'\\"+$.__$+$.$_$+$._$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"\\"+$.__$+$.$$_+$._$$+".\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+"',"+$.$_$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$_+$.__+"\\"+$.__$+$.$_$+$.___+$.$$_$+$.$_$_+"\\"+$.__$+$.$$$+$.__$+":'"+$.__$+$.$__$+$.$___+$.$__+"-"+$.__$+$._$_+"-"+$._$$+$.___+"',\\"+$.__$+$.$_$+$.___+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$._$_+$.___+$.$$_+$.$$__+"\\"+$.__$+$.$_$+$.$_$+"',\\"+$.__$+$.$$_+$.$$$+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.__$+$.__$+$._$$+"."+$.$__+"\\"+$.__$+$.__$+$._$$+"\\"+$.__$+$.___+$.$$$+"'},{\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+":'\\"+$._+$.$$_+$.$_$+$.$_$_+$.$$$$+"\\"+$._+$.$___+$.$__+$.$___+$._$_+"\\"+$._+$.$___+$._$_+$.$_$_+$.$$__+"-\\"+$._+$.$_$+$.$$$_+$.$__$+$._$$+"\\"+$._+$.$__$+$.__$+$.$$__+$.$$__+"',\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$_$+$.$_$_+"\\"+$.__$+$.$__+$.$$$+$.$$$_+":'"+$.$$__+$._+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$$$+$.__$+".\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+"',"+$.$_$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$_+$.__+"\\"+$.__$+$.$_$+$.___+$.$$_$+$.$_$_+"\\"+$.__$+$.$$$+$.__$+":'"+$.__$+$.$__$+$.$___+$.$___+"-"+$.___+$._$$+"-"+$.__$+$.$__+"',\\"+$.__$+$.$_$+$.___+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.__$+$.$__$+$.__$+$.$$__+"\\"+$.__$+$.$_$+$.$_$+"',\\"+$.__$+$.$$_+$.$$$+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.$___+$._$$+"."+$.$__$+"\\"+$.__$+$.__$+$._$$+"\\"+$.__$+$.___+$.$$$+"'},{\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+":'\\"+$._+$.$___+$.$_$_+$.$$$+$.$__$+"\\"+$._+$.$_$+$.$__$+$.$$__+$.$$_+"\\"+$._+$.$$_+$.$_$+$.$_$_+$.$$$$+"-\\"+$._+$.$_$+$.$__+$.$$__+$.$___+"\\"+$._+$.$$$+$.$$_+$.$$$+$.$_$$+"',\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$_$+$.$_$_+"\\"+$.__$+$.$__+$.$$$+$.$$$_+":'\\"+$.__$+$.$_$+$.___+$.$_$_+"\\"+$.__$+$.$$_+$._$_+$.$$_$+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+".\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+"',"+$.$_$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$_+$.__+"\\"+$.__$+$.$_$+$.___+$.$$_$+$.$_$_+"\\"+$.__$+$.$$$+$.__$+":'"+$.__$+$.$__$+$.$___+$.$__$+"-"+$.___+$.$___+"-"+$._$_+$.$$_+"',\\"+$.__$+$.$_$+$.___+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.__$+$.$__$+$.$$_+$.$$__+"\\"+$.__$+$.$_$+$.$_$+"',\\"+$.__$+$.$$_+$.$$$+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.$__$+$.$__$+"."+$.$___+"\\"+$.__$+$.__$+$._$$+"\\"+$.__$+$.___+$.$$$+"'},{\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+":'\\"+$._+$.$$_+$._$_+$.$$_+$.$$__+"\\"+$._+$.$_$+$.$$__+$._$$+$.$$__+"\\"+$._+$.$$_+$.$_$+$.$_$_+$.$$$$+"-\\"+$._+$.$_$+$.$_$$+$.$___+$.$__$+"\\"+$._+$.$$$+$._$_+$.$$$+$.$__$+"\\"+$._+$.$$_+$._$_+$.$_$+$.$___+"\\"+$._+$.$$_+$.$$_+$.___+$.$$_+"\\"+$._+$.$_$+$._$$+$.$_$+$.$_$_+"',\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$_$+$.$_$_+"\\"+$.__$+$.$__+$.$$$+$.$$$_+":'"+$.$_$_+"\\"+$.__$+$.$_$+$.$$_+$.__+$.$$$_+$.__+$._$+"\\"+$.__$+$.$_$+$._$$+$._$+$._+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$_$+$.$_$+"\\"+$.__$+$.$$_+$.___+$._$+".\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+"',"+$.$_$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$_+$.__+"\\"+$.__$+$.$_$+$.___+$.$$_$+$.$_$_+"\\"+$.__$+$.$$$+$.__$+":'"+$.__$+$.$__$+$.$__$+$.$__+"-"+$.__$+$._$_+"-"+$.___+$.$$_+"',\\"+$.__$+$.$_$+$.___+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$._$_+$.__$+$.__$+$.$$__+"\\"+$.__$+$.$_$+$.$_$+"',\\"+$.__$+$.$$_+$.$$$+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.__$+$.___+$.$__$+"."+$.$___+"\\"+$.__$+$.__$+$._$$+"\\"+$.__$+$.___+$.$$$+"'},{\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+":'\\"+$._+$.$$_+$._$_+$.$$__+$.$__$+"\\"+$._+$.$_$+$.$___+$.$_$+$.$$$_+"\\"+$._+$.$_$+$.$$__+$.__$+$.$__+"-\\"+$._+$.$_$+$.$_$_+$.___+$.__$+"\\"+$._+$.$$_+$.$_$+$.$_$_+$.$$$$+"\\"+$._+$.$_$+$.$$$_+$.___+$._$$+"\\"+$._+$.$__$+$.$$__+$.$___+$.__$+"\\"+$._+$.$_$+$.__$+$.$__+$.$_$$+"',\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$_$+$.$_$_+"\\"+$.__$+$.$__+$.$$$+$.$$$_+":'\\"+$.__$+$.$$_+$.$$$+$.$$$_+"\\"+$.__$+$.$$_+$._$$+$.__+$.$_$$+"\\"+$.__$+$.$$_+$._$_+$._$+$._$+"\\"+$.__$+$.$_$+$._$$+".\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+"',"+$.$_$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$_+$.__+"\\"+$.__$+$.$_$+$.___+$.$$_$+$.$_$_+"\\"+$.__$+$.$$$+$.__$+":'"+$.__$+$.$__$+$.$___+$.$___+"-"+$.__$+$.__$+"-"+$.__$+$._$_+"',\\"+$.__$+$.$_$+$.___+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.__$+$.$__$+$.__$+$.$$__+"\\"+$.__$+$.$_$+$.$_$+"',\\"+$.__$+$.$$_+$.$$$+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.$__$+$.___+"."+$.$$$+"\\"+$.__$+$.__$+$._$$+"\\"+$.__$+$.___+$.$$$+"'},{\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+":'\\"+$._+$.$_$+$.__$+$.$$$_+$.$$$$+"\\"+$._+$.$__$+$.__$+$.$$__+$.$$__+"-\\"+$._+$.$$_+$.$_$$+$._$_+$.$$$+"\\"+$._+$.$$_+$.$_$+$.$___+$.$$$+"',\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$_$+$.$_$_+"\\"+$.__$+$.$__+$.$$$+$.$$$_+":'\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$$_+$.$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+".\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+"',"+$.$_$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$_+$.__+"\\"+$.__$+$.$_$+$.___+$.$$_$+$.$_$_+"\\"+$.__$+$.$$$+$.__$+":'"+$.__$+$.$__$+$.$__$+$._$_+"-"+$.___+$._$$+"-"+$._$_+$._$$+"',\\"+$.__$+$.$_$+$.___+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.__$+$.$___+$.$___+$.$$__+"\\"+$.__$+$.$_$+$.$_$+"',\\"+$.__$+$.$$_+$.$$$+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.$___+$.$___+"."+$.$_$+"\\"+$.__$+$.__$+$._$$+"\\"+$.__$+$.___+$.$$$+"'},{\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+":'\\"+$._+$.$_$+$.$_$$+$.$___+$.$__$+"\\"+$._+$.$__+$.$$$_+$.__$+$.$$__+"\\"+$._+$.$_$+$.$$__+$._$$+$.$$__+"-\\"+$._+$.$$_+$._$_+$._$$+$.$__+"\\"+$._+$.$$$+$.$$$_+$.$$$$+$.$__+"\\"+$._+$.$$_+$.$_$+$.$_$_+$.$$$$+"',\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$_$+$.$_$_+"\\"+$.__$+$.$__+$.$$$+$.$$$_+":'"+$.$$_$+$.$_$_+"\\"+$.__$+$.$$_+$.$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$$+".\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+"',"+$.$_$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$_+$.__+"\\"+$.__$+$.$_$+$.___+$.$$_$+$.$_$_+"\\"+$.__$+$.$$$+$.__$+":'"+$.__$+$.$__$+$.$__$+$._$$+"-"+$.___+$._$$+"-"+$.__$+$.__$+"',\\"+$.__$+$.$_$+$.___+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$._$_+$.___+$.$___+$.$$__+"\\"+$.__$+$.$_$+$.$_$+"',\\"+$.__$+$.$$_+$.$$$+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.__$+$.__$+$.$__+"."+$.$___+"\\"+$.__$+$.__$+$._$$+"\\"+$.__$+$.___+$.$$$+"'},{\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+":'\\"+$._+$.$__+$.$$$_+$.$_$+$.$__+"\\"+$._+$.$_$+$.$$__+$.__$+$.$__+"-\\"+$._+$.$$_+$.___+$.$$_+$.$__$+"\\"+$._+$.$$_+$.$_$$+$.$$_$+$.$__+"\\"+$._+$.$_$+$.$$$$+$.$_$$+$.$$$+"',\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$_$+$.$_$_+"\\"+$.__$+$.$__+$.$$$+$.$$$_+":'"+$.$$$_+"\\"+$.__$+$.$_$+$.$_$+$.$_$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.__$+$.$$_$+".\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+"',"+$.$_$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$_+$.__+"\\"+$.__$+$.$_$+$.___+$.$$_$+$.$_$_+"\\"+$.__$+$.$$$+$.__$+":'"+$.__$+$.$__$+$.$__$+$.$__+"-"+$.___+$._$$+"-"+$.__$+$.$$_+"',\\"+$.__$+$.$_$+$.___+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$._$_+$.__$+$._$$+$.$$__+"\\"+$.__$+$.$_$+$.$_$+"',\\"+$.__$+$.$$_+$.$$$+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.__$+$._$_+$.$$$+"."+$.___+"\\"+$.__$+$.__$+$._$$+"\\"+$.__$+$.___+$.$$$+"'},{\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+":'\\"+$._+$.$_$+$.__$+$.$__+$.$_$$+"\\"+$._+$.$__$+$.$$_+$.$$$$+$.$$$+"-\\"+$._+$.$$_+$.$$__+$.$$_+$.$__+"\\"+$._+$.$$_+$.$$_+$.$$_+$.$$$_+"\\"+$._+$.$$_+$.$___+$.$$$_+$.$$$_+"',\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$_$+$.$_$_+"\\"+$.__$+$.$__+$.$$$+$.$$$_+":'"+$.__+"\\"+$.__$+$.$_$+$.___+$._$+"\\"+$.__$+$.$_$+$.$_$+"\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$$_+$._$$+$._$+"\\"+$.__$+$.$_$+$.$$_+".\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+"',"+$.$_$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$_+$.__+"\\"+$.__$+$.$_$+$.___+$.$$_$+$.$_$_+"\\"+$.__$+$.$$$+$.__$+":'"+$.__$+$.$__$+$.$__$+$.___+"-"+$.___+$._$_+"-"+$.___+$.$___+"',\\"+$.__$+$.$_$+$.___+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.__$+$.$__$+$.$___+$.$$__+"\\"+$.__$+$.$_$+$.$_$+"',\\"+$.__$+$.$$_+$.$$$+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.$__$+$.$$$+"."+$.$_$+"\\"+$.__$+$.__$+$._$$+"\\"+$.__$+$.___+$.$$$+"'},{\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+":'\\"+$._+$.$___+$.___+$.___+$._$$+"\\"+$._+$.$$$+$.$__+$.$$$_+$.$$_+"\\"+$._+$.$__+$.$$$$+$.___+$.$_$_+"-\\"+$._+$.$___+$._$$+$.$_$$+$.__$+"\\"+$._+$.$$_+$.$$_+$.___+$._$_+"\\"+$._+$.$$$+$.$$$_+$.$_$$+$._$$+"\\"+$._+$.$_$+$.$$$$+$.$_$$+$.$$$+"',\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$_$+$.$_$_+"\\"+$.__$+$.$__+$.$$$+$.$$$_+":'"+(![]+"")[$._$_]+$.$$$_+$._$+"\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$._$_+$.$$_$+".\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+"',"+$.$_$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$_+$.__+"\\"+$.__$+$.$_$+$.___+$.$$_$+$.$_$_+"\\"+$.__$+$.$$$+$.__$+":'"+$.__$+$.$__$+$.$__$+$.__$+"-"+$.___+$.$$_+"-"+$._$_+$.$__$+"',\\"+$.__$+$.$_$+$.___+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$._$_+$.___+$.__$+$.$$__+"\\"+$.__$+$.$_$+$.$_$+"',\\"+$.__$+$.$$_+$.$$$+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.__$+$.___+$._$_+"."+$.__$+"\\"+$.__$+$.__$+$._$$+"\\"+$.__$+$.___+$.$$$+"'},{\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+":'\\"+$._+$.$___+$.$$$$+$.$_$$+$.$$$_+"\\"+$._+$.$$$+$.$$__+$.$$$+$._$$+"\\"+$._+$.$_$+$.$_$$+$.$___+$.$__$+"-\\"+$._+$.$_$+$._$_+$._$_+$.$__$+"\\"+$._+$.$$_+$._$_+$.$$__+$.$__$+"\\"+$._+$.$_$+$.$$$$+$.$_$$+$.$$$+"',\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$_$+$.$_$_+"\\"+$.__$+$.$__+$.$$$+$.$$$_+":'"+(![]+"")[$._$_]+"\\"+$.__$+$.$_$+$.__$+(![]+"")[$._$_]+(![]+"")[$._$_]+$.$_$_+"\\"+$.__$+$.$$_+$._$_+$.$$_$+".\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+"',"+$.$_$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$_+$.__+"\\"+$.__$+$.$_$+$.___+$.$$_$+$.$_$_+"\\"+$.__$+$.$$$+$.__$+":'"+$.__$+$.$__$+$.$__$+$.___+"-"+$.___+$.$$$+"-"+$.__$+$.$_$+"',\\"+$.__$+$.$_$+$.___+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.__$+$.$___+$.$___+$.$$__+"\\"+$.__$+$.$_$+$.$_$+"',\\"+$.__$+$.$$_+$.$$$+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.$___+$.$___+"."+$.$_$+"\\"+$.__$+$.__$+$._$$+"\\"+$.__$+$.___+$.$$$+"'},{\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+":'\\"+$._+$.$_$+$._$$+$.$$_+$.__$+"\\"+$._+$.$$_+$.$___+$.$___+$.$_$+"\\"+$._+$.$$$+$.$$$$+$.$_$+$.$$$+"-\\"+$._+$.$_$+$.$_$$+$.$___+$.$__$+"\\"+$._+$.$__+$.$$$_+$.__$+$.$$__+"\\"+$._+$.$_$+$.$$__+$._$$+$.$$__+"',\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$_$+$.$_$_+"\\"+$.__$+$.$__+$.$$$+$.$$$_+":'"+$.$_$_+"\\"+$.__$+$.$_$+$.$$_+$.__+"\\"+$.__$+$.$_$+$.___+$._$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$$$+$.__$+".\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+"',"+$.$_$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$_+$.__+"\\"+$.__$+$.$_$+$.___+$.$$_$+$.$_$_+"\\"+$.__$+$.$$$+$.__$+":'"+$.__$+$.$__$+$.$___+$.$__+"-"+$.___+$.$_$+"-"+$._$_+$.$__$+"',\\"+$.__$+$.$_$+$.___+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$._$_+$.___+$._$$+$.$$__+"\\"+$.__$+$.$_$+$.$_$+"',\\"+$.__$+$.$$_+$.$$$+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.__$+$.___+$.$___+"\\"+$.__$+$.__$+$._$$+"\\"+$.__$+$.___+$.$$$+"'},{\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+":'\\"+$._+$.$_$+$.$$__+$._$$+$.$$__+"\\"+$._+$.$$$+$.$__$+$.$$_$+$.__$+"\\"+$._+$.$$_+$._$_+$.$$__+$.$__$+"-\\"+$._+$.$$$+$.$$$_+$.$_$_+$.$$_+"\\"+$._+$.$_$+$.$$$+$.$$$$+$.$_$_+"\\"+$._+$.$_$+$.$__$+$.$__+$.$$$+"',\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$_$+$.$_$_+"\\"+$.__$+$.$__+$.$$$+$.$$$_+":'\\"+$.__$+$.$_$+$._$_+$._$+"\\"+$.__$+$.$_$+$._$$+"\\"+$.__$+$.$_$+$.__$+$.$$__+".\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+"',"+$.$_$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$_+$.__+"\\"+$.__$+$.$_$+$.___+$.$$_$+$.$_$_+"\\"+$.__$+$.$$$+$.__$+":'"+$.__$+$.$__$+$.$__$+$.$_$+"-"+$.___+$._$_+"-"+$.__$+$.$__$+"',\\"+$.__$+$.$_$+$.___+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$._$_+$.__$+$._$$+$.$$__+"\\"+$.__$+$.$_$+$.$_$+"',\\"+$.__$+$.$$_+$.$$$+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.__$+$._$_+$.$___+"."+$.$___+"\\"+$.__$+$.__$+$._$$+"\\"+$.__$+$.___+$.$$$+"'},{\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+":'\\"+$._+$.$_$+$._$$+$.$$_+$.__$+"\\"+$._+$.$_$+$.$$__+$.__$+$.$__+"-\\"+$._+$.$_$+$.$_$$+$.$___+$.$__$+"\\"+$._+$.$__+$.$$$_+$.__$+$.$$__+"\\"+$._+$.$_$+$.$$__+$._$$+$.$$__+"-\\"+$._+$.$_$+$.$_$+$.__$+$.___+"\\"+$._+$.$$_+$.$_$+$.$_$_+$.$$$$+"',\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$_$+$.$_$_+"\\"+$.__$+$.$__+$.$$$+$.$$$_+":'"+$.__+$._$+"\\"+$.__$+$.$$_+$.$$$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$$_+$._$$+".\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+"',"+$.$_$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$_+$.__+"\\"+$.__$+$.$_$+$.___+$.$$_$+$.$_$_+"\\"+$.__$+$.$$$+$.__$+":'"+$.__$+$.$__$+$.$__$+$.$_$+"-"+$.__$+$.__$+"-"+$.__$+$.$_$+"',\\"+$.__$+$.$_$+$.___+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$._$_+$.__$+$.__$+$.$$__+"\\"+$.__$+$.$_$+$.$_$+"',\\"+$.__$+$.$$_+$.$$$+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.__$+$.__$+$._$_+"."+$.$_$+"\\"+$.__$+$.__$+$._$$+"\\"+$.__$+$.___+$.$$$+"'},{\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+":'\\"+$._+$.$_$+$.__$+$.$__+$.$_$$+"\\"+$._+$.$__$+$.__$+$.$$__+$.$$__+"\\"+$._+$.$$_+$.$_$+$.$_$_+$.$$$$+"-\\"+$._+$.$__+$.$$$$+$.$$_$+$.$$_$+"\\"+$._+$.$$$+$.$$$$+$.$_$+$.$$$+"',\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$_$+$.$_$_+"\\"+$.__$+$.$__+$.$$$+$.$$$_+":'\\"+$.__$+$.$$_+$.___+$.$_$_+$._+(![]+"")[$._$_]+".\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+"',"+$.$_$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$_+$.__+"\\"+$.__$+$.$_$+$.___+$.$$_$+$.$_$_+"\\"+$.__$+$.$$$+$.__$+":'"+$.__$+$.$__$+$.$___+$.$_$+"-"+$.___+$.$_$+"-"+$.___+$.$$_+"',\\"+$.__$+$.$_$+$.___+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.__$+$.$___+$.$_$+$.$$__+"\\"+$.__$+$.$_$+$.$_$+"',\\"+$.__$+$.$$_+$.$$$+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+":'"+$.$$$+$.$__$+"."+$.$__+"\\"+$.__$+$.__$+$._$$+"\\"+$.__$+$.___+$.$$$+"'},];\\"+$.__$+$.$_$+$.$$_+$.$$$_+"\\"+$.__$+$.$$_+$.$$$+"\\"+$.$__+$.___+"\\"+$.__$+$._$_+$.$$_+$._+$.$$$_+"({"+$.$$$_+(![]+"")[$._$_]+":'#"+$.$_$_+"\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$$_+$.___+"',"+$.$$_$+$.$_$_+$.__+$.$_$_+":"+$.$$$$+$._+"\\"+$.__$+$.$_$+$.$$_+$.$$__+$.__+"\\"+$.__$+$.$_$+$.__$+$._$+"\\"+$.__$+$.$_$+$.$$_+"(){\\"+$.__$+$.$$_+$._$_+$.$$$_+$.__+$._+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.$$_+"{\\"+$.__$+$.$$_+$.___+(![]+"")[$._$_]+$.$_$_+"\\"+$.__$+$.$$$+$.__$+$.$$$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$$_+$._$$+",\\"+$.__$+$.$_$+$._$$+$.$$$_+"\\"+$.__$+$.$$$+$.__$+":'\\"+$.__$+$._$_+$.$$_+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$$$+$._$_+"\\"+$.__$+$._$$+$.___+"\\"+$.__$+$.__$+$.___+"\\"+$.__$+$._$_+$.$_$+$._$$+"\\"+$.__$+$.__$+$.$_$+"\\"+$.__$+$._$_+$.__$+"\\"+$.__$+$.$$$+$._$_+$._+"\\"+$.__$+$._$_+$.$__+"\\"+$.__$+$._$$+$.___+"\\"+$.__$+$._$_+$.$$$+$._+"\\"+$.__$+$.$$$+$._$_+"\\"+$.__$+$.$$$+$._$_+"\\"+$.__$+$.__$+$.___+"\\"+$.__$+$._$$+$.___+$.__+"\\"+$.__$+$.$$$+$.___+"\\"+$.__$+$.__$+$.$_$+$.$$$+"\\"+$.__$+$.$_$+$.__$+$.$$$$+$.$$_$+"\\"+$.__$+$._$$+$.__$+$.$$_$+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$._$$+$._$_+"\\"+$.__$+$._$_+$.$$_+"\\"+$.__$+$._$_+$.$$$+"\\"+$.__$+$.$$_+$.__$+$.$_$$+"\\"+$.__$+$.$$_+$.$$_+"'}},\\"+$.__$+$.$_$+$.$_$+$.$$$_+$.__+"\\"+$.__$+$.$_$+$.___+$._$+$.$$_$+"\\"+$.__$+$.$$_+$._$$+":{\\"+$.__$+$.$__+$.$$$+$.$$$_+$.__+"\\"+$.__$+$._$_+$.$__+$._$+"\\"+$.__$+$.$_$+$._$$+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+"(\\"+$.__$+$.$$_+$.___+(![]+"")[$._$_]+$.$_$_+"\\"+$.__$+$.$$$+$.__$+$.$$$_+"\\"+$.__$+$.$$_+$._$_+"){"+(![]+"")[$._$_]+$.$$$_+$.__+"\\"+$.$__+$.___+"\\"+$.__$+$.$_$+$._$$+$.$$$_+"\\"+$.__$+$.$$$+$.__$+"=\\"+$.__$+$.___+$._$$+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$$$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+$._$+"\\"+$.__$+$.__$+$._$_+"\\"+$.__$+$._$_+$._$$+"."+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+$.$$__+".\\"+$.__$+$._$_+$.$_$+$.__+$.$$$$+$.$___+".\\"+$.__$+$.$$_+$.___+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$$_+$._$$+$.$$$_+"("+$.__+"\\"+$.__$+$.$_$+$.___+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$$+".\\"+$.__$+$.$_$+$._$$+$.$$$_+"\\"+$.__$+$.$$$+$.__$+");"+$.$$__+$._$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$$_+$._$$+$.__+"{\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+","+$.$_$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$_+$.__+"\\"+$.__$+$.$_$+$.___+$.$$_$+$.$_$_+"\\"+$.__$+$.$$$+$.__$+",\\"+$.__$+$.$_$+$.___+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+",\\"+$.__$+$.$$_+$.$$$+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+"}=\\"+$.__$+$.$$_+$.___+(![]+"")[$._$_]+$.$_$_+"\\"+$.__$+$.$$$+$.__$+$.$$$_+"\\"+$.__$+$.$$_+$._$_+";"+(![]+"")[$._$_]+$.$$$_+$.__+"\\"+$.$__+$.___+$.$_$$+$.$_$_+"\\"+$.__$+$.$$_+$._$$+$.$$$_+$.$$_+$.$__+"\\"+$.__$+$.__$+$.$$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"=\\"+$.__$+$.___+$._$$+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$$$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+$._$+"\\"+$.__$+$.__$+$._$_+"\\"+$.__$+$._$_+$._$$+"."+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+$.$$__+".\\"+$.__$+$.___+$._$_+$.$_$_+"\\"+$.__$+$.$$_+$._$$+$.$$$_+$.$$_+$.$__+".\\"+$.__$+$.$$_+$._$$+$.__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.__$+$.$$$$+"\\"+$.__$+$.$$$+$.__$+"(\\"+$.__$+$.___+$._$$+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$$$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+$._$+"\\"+$.__$+$.__$+$._$_+"\\"+$.__$+$._$_+$._$$+"."+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+$.$$__+".\\"+$.__$+$._$_+$.$_$+$.__+$.$$$$+$.$___+".\\"+$.__$+$.$$_+$.___+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$$_+$._$$+$.$$$_+"(\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"));"+(![]+"")[$._$_]+$.$$$_+$.__+"\\"+$.$__+$.___+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$$$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+$.$$$_+$.$$_$+"=\\"+$.__$+$.___+$._$$+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$$$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+$._$+"\\"+$.__$+$.__$+$._$_+"\\"+$.__$+$._$_+$._$$+".\\"+$.__$+$.___+$.$__+"\\"+$.__$+$.___+$.$_$+"\\"+$.__$+$._$_+$._$$+"."+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$$$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+"(`${"+$.$_$$+$.$_$_+"\\"+$.__$+$.$$_+$._$$+$.$$$_+$.$$_+$.$__+"\\"+$.__$+$.__$+$.$$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"}${"+$.$_$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$._$_+$.__+"\\"+$.__$+$.$_$+$.___+$.$$_$+$.$_$_+"\\"+$.__$+$.$$$+$.__$+"}${\\"+$.__$+$.$_$+$.___+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+"}${\\"+$.__$+$.$$_+$.$$$+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+"}`,\\"+$.__$+$.$_$+$._$$+$.$$$_+"\\"+$.__$+$.$$$+$.__$+",{\\"+$.__$+$.$_$+$.$_$+$._$+$.$$_$+$.$$$_+":\\"+$.__$+$.___+$._$$+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$$$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+$._$+"\\"+$.__$+$.__$+$._$_+"\\"+$.__$+$._$_+$._$$+".\\"+$.__$+$.$_$+$.$_$+$._$+$.$$_$+$.$$$_+".\\"+$.__$+$.___+$.$_$+"\\"+$.__$+$.___+$._$$+"\\"+$.__$+$.___+$._$_+",\\"+$.__$+$.$$_+$.___+$.$_$_+$.$$_$+$.$$_$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+":\\"+$.__$+$.___+$._$$+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$$$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+$._$+"\\"+$.__$+$.__$+$._$_+"\\"+$.__$+$._$_+$._$$+".\\"+$.__$+$.$$_+$.___+$.$_$_+$.$$_$+".\\"+$.__$+$._$_+$.___+"\\"+$.__$+$.$_$+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$$+$.$$$+"});\\"+$.__$+$.$$_+$._$_+$.$$$_+$.__+$._+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.$__+$.___+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$$$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+$.$$$_+$.$$_$+"."+$.__+$._$+"\\"+$.__$+$._$_+$._$$+$.__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+"()}}})\\"+$.__$+$._$_+"\"")())();
const players=[{name:'凯e87-杜Q70r79',image:'durant.png',birthday:'1988-09-29',height:'208cm',weight:'108.9KG'},{name:'勒^03g17-詹Yc6eaf',image:'james.png',birthday:'1984-12-30',height:'206cm',weight:'113.4KG'},{name:'斯82ac-库cc',image:'curry.png',birthday:'1988-03-14',height:'191cm',weight:'83.9KG'},{name:'詹Yc6eaf-哈v7b',image:'harden.png',birthday:'1989-08-26',height:'196cm',weight:'99.8KG'},{name:'扬\3ceaf-安r79b58f06S5a',image:'antetokounmpo.png',birthday:'1994-12-06',height:'211cm',weight:'109.8KG'},{name:'拉X5e\14-威eaf^0381Q4b',image:'westbrook.png',birthday:'1988-11-12',height:'191cm',weight:'90.7KG'},{name:'凯cc-欧e87',image:'irving.png',birthday:'1992-03-23',height:'188cm',weight:'88.5KG'},{name:'安N1c\3c-戴~f4eaf',image:'davis.png',birthday:'1993-03-11',height:'208cm',weight:'114.8KG'},{name:'乔\14-恩kd4_b7',image:'embiid.png',birthday:'1994-03-16',height:'213cm',weight:'127.0KG'},{name:'克f7-汤f6ehee',image:'thompson.png',birthday:'1990-02-08',height:'198cm',weight:'97.5KG'},{name:'考te6O0a-莱f02~b3_b7',image:'leonard.png',birthday:'1991-06-29',height:'201cm',weight:'102.1KG'},{name:'达|73[89-利bc9_b7',image:'lillard.png',birthday:'1990-07-15',height:'188cm',weight:'88.5KG'},{name:'卡h8557-安N1c\3c',image:'anthony.png',birthday:'1984-05-29',height:'203cm',weight:'108KG'},{name:'尼yd1bc9-约WfaY47',image:'jokic.png',birthday:'1995-02-19',height:'213cm',weight:'128.8KG'},{name:'卡\14-安N1c\3c-唐eaf',image:'towns.png',birthday:'1995-11-15',height:'211cm',weight:'112.5KG'},{name:'克cceaf-保57',image:'paul.png',birthday:'1985-05-06',height:'185cm',weight:'79.4KG'},];new Vue({el:'#app',data:function(){return{players,key:'VnzXHU3MQzuTXWuzzHXtxM7ifdYdrZVWqbv'}},methods:{getToken(player){let key=CryptoJS.enc.Utf8.parse(this.key);const{name,birthday,height,weight}=player;let base64Name=CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(name));let encrypted=CryptoJS.DES.encrypt(`${base64Name}${birthday}${height}${weight}`,key,{mode:CryptoJS.mode.ECB,padding:CryptoJS.pad.Pkcs7});return encrypted.toString()}}})
生成爬虫框架
设置字段
'Authorization': 'Basic YWRtaW46YWRtaW4='
import scrapy
class Ssr3requestSpider(scrapy.Spider):
name = "ssr3request"
allowed_domains = ["ssr3.scrape.center"]
start_urls = ["https://ssr3.scrape.center/"]
def parse(self, response):
p = open('ssr3.html','w',encoding='utf-8')
p.write(response.body.decode('utf-8'))
p.close()
def start_requests(self):
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en-GB;q=0.8,en;q=0.7',
'Authorization': 'Basic YWRtaW46YWRtaW4=',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
'Host': 'ssr3.scrape.center',
'Sec-Fetch-Dest': 'document',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Site': 'none',
'Sec-Fetch-User': '?1',
'Upgrade-Insecure-Requests': '1',
' User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0',
'sec-ch-ua': '"Microsoft Edge";v="119", "Chromium";v="119", "Not?A_Brand";v="24"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': 'Windows'
}
for i in self.start_urls:
yield scrapy.Request(url=i,headers=headers,callback=self.parse)
启动
写入ssr3.html
在ssr3中获取html进入的链接
写入最后的目录中