SPA1-SPA10靶场爬虫练习scrape.center

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进入的链接

写入最后的目录中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值