PyExecJS库


python执行JS代码

在python中执行js代码的库 python2:Pyv8; python3:PyExecJS

  在python里执行JS代码要先搭建JS环境

 1 import execjs
 2 
 3 # eval 和 complie 是要构建一个JS的环境
 4 e = execjs.eval('a = new Array(1,2,3)')  # 可以直接执行JS代码
 5 print(e)
 6 x = execjs.compile('''
 7         function add(x,y){
 8             return x+y;
 9             };
10         ''')
11 print(x.call('add', '1', '2'))  # execjs.compile用于执行更复杂的js代码
12 ################### 运行结果:################
13 [1, 2, 3]
14 12

 

 案例:爬取落网音乐的单曲链接:

 1 # !/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 import requests
 4 import re
 5 import execjs
 6 import json
 7 from bs4 import BeautifulSoup
 8 
 9 # 根据网址爬取落网音乐单曲
10 single_url_1 = 'http://mp3-cdn2.luoo.net/low/chinese/20171017.mp3'
11 single_url_2 = 'http://mp3-cdn2.luoo.net/low/chinese/20170927.mp3'
12 # 单曲一共有78页,但是后边几页有些歌曲的链接与上面的格式不一样
13 
14 
15 class Single(object):
16 
17     i = 1
18 
19     def __init__(self):
20         self.session = requests.session()
21         self.session.verify = False
22         self.session.headers = {
23             'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36'
24         }
25 
26     def get_pl(self):
27         html_url = 'http://www.luoo.net/musician/?p={}'.format(self.i)
28         self.i += 1
29         response = self.session.get(html_url)
30         response.encoding = 'utf-8'   # AngelaDaddy・2017-11-19
31         pl = re.findall(r'pl = "(.*?)"', response.text)[0]
32         return pl
33 
34     def get_number(self):
35         try:
36             html_url = 'http://www.luoo.net/musician/?p=1'
37         except Exception:
38             return False
39         response = self.session.get(html_url).text
40         soup = BeautifulSoup(response, 'lxml')
41         return soup.find_all('a', class_='page')[-1].text
42 
43     @staticmethod
44     def get_js():
45         with open('luo_net.js', encoding='utf-8') as f:
46             js_data = f.read()
47         ctx = execjs.compile(js_data)
48         return ctx
49 
50     def get_mp3_list(self):
51         aes = "b6ce159334e155d8"
52         ctx = self.get_js()
53         map3_list = list()
54         max_page = self.get_number()
55         print(max_page)
56 
57         while self.i <= int(max_page):
58             print(self.i)
59             pl = self.get_pl()
60             code = "N('{}','{}')".format(pl, aes)
61             response = json.loads(ctx.eval(code))
62             for i in response:
63                 map3_list.append(i['mp3'])
64         return map3_list
65 
66 
67 if __name__ == '__main__':
68     luo_single = Single()
69     print(luo_single.get_mp3_list())

网页JS分析:JS代码

 

  1 var c = !1;
  2 N = function(a, b, c) {
  3             var d = decode(a)
  4               , e = d.slice(8, 16)
  5               , f = m(j(b, c), e)
  6               , g = f.key
  7               , h = f.iv;
  8             d = d.slice(16, d.length);
  9             return a = o(d, g, h, c);
 10             };
 11 
 12 
 13 
 14 decode = function(b) {
 15             b = b.replace(/\n/g, "");
 16             var a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
 17             var c, d = [], e = [], f = [];
 18             for (c = 0; b.length > c; c += 4)
 19                 e[0] = a.indexOf(b.charAt(c)),
 20                 e[1] = a.indexOf(b.charAt(c + 1)),
 21                 e[2] = a.indexOf(b.charAt(c + 2)),
 22                 e[3] = a.indexOf(b.charAt(c + 3)),
 23                 f[0] = e[0] << 2 | e[1] >> 4,
 24                 f[1] = (15 & e[1]) << 4 | e[2] >> 2,
 25                 f[2] = (3 & e[2]) << 6 | e[3],
 26                 d.push(f[0], f[1], f[2]);
 27             return d = d.slice(0, d.length - d.length % 16)
 28         };
 29 
 30 d = function(a) {
 31         try {
 32             return unescape(encodeURIComponent(a))
 33         } catch (b) {
 34             throw "Error on UTF-8 encode"
 35         }
 36     };
 37 
 38 j = function(a, b) {
 39         var c, e = [];
 40         for (b || (a = d(a)),
 41         c = 0; a.length > c; c++)
 42             e[c] = a.charCodeAt(c);
 43         return e
 44     };
 45 
 46 //m函数调用准备:
 47 
 48 //O函数准备:
 49 z = function(a, b) {
 50         var c, d = [];
 51         for (c = 0; a.length > c; c += b)
 52             d[c / b] = parseInt(a.substr(c, b), 16);
 53         return d
 54     };
 55 O = function(a) {
 56         function b(a, b) {
 57             return a << b | a >>> 32 - b
 58         }
 59         function c(a, b) {
 60             var c, d, e, f, g;
 61             return e = 2147483648 & a,
 62             f = 2147483648 & b,
 63             c = 1073741824 & a,
 64             d = 1073741824 & b,
 65             g = (1073741823 & a) + (1073741823 & b),
 66             c & d ? 2147483648 ^ g ^ e ^ f : c | d ? 1073741824 & g ? 3221225472 ^ g ^ e ^ f : 1073741824 ^ g ^ e ^ f : g ^ e ^ f
 67         }
 68         function d(a, b, c) {
 69             return a & b | ~a & c
 70         }
 71         function e(a, b, c) {
 72             return a & c | b & ~c
 73         }
 74         function f(a, b, c) {
 75             return a ^ b ^ c
 76         }
 77         function g(a, b, c) {
 78             return b ^ (a | ~c)
 79         }
 80         function h(a, e, f, g, h, i, j) {
 81             return a = c(a, c(c(d(e, f, g), h), j)),
 82             c(b(a, i), e)
 83         }
 84         function i(a, d, f, g, h, i, j) {
 85             return a = c(a, c(c(e(d, f, g), h), j)),
 86             c(b(a, i), d)
 87         }
 88         function j(a, d, e, g, h, i, j) {
 89             return a = c(a, c(c(f(d, e, g), h), j)),
 90             c(b(a, i), d)
 91         }
 92         function k(a, d, e, f, h, i, j) {
 93             return a = c(a, c(c(g(d, e, f), h), j)),
 94             c(b(a, i), d)
 95         }
 96         function l(a) {
 97             for (var b, c = a.length, d = c + 8, e = (d - d % 64) / 64, f = 16 * (e + 1), g = [], h = 0, i = 0; c > i; )
 98                 b = (i - i % 4) / 4,
 99                 h = 8 * (i % 4),
100                 g[b] = g[b] | a[i] << h,
101                 i++;
102             return b = (i - i % 4) / 4,
103             h = 8 * (i % 4),
104             g[b] = g[b] | 128 << h,
105             g[f - 2] = c << 3,
106             g[f - 1] = c >>> 29,
107             g
108         }
109         function m(a) {
110             var b, c, d = [];
111             for (c = 0; 3 >= c; c++)
112                 b = 255 & a >>> 8 * c,
113                 d = d.concat(b);
114             return d
115         }
116         var n, o, p, q, r, s, t, u, v, w = [], x = z("67452301efcdab8998badcfe10325476d76aa478e8c7b756242070dbc1bdceeef57c0faf4787c62aa8304613fd469501698098d88b44f7afffff5bb1895cd7be6b901122fd987193a679438e49b40821f61e2562c040b340265e5a51e9b6c7aad62f105d02441453d8a1e681e7d3fbc821e1cde6c33707d6f4d50d87455a14eda9e3e905fcefa3f8676f02d98d2a4c8afffa39428771f6816d9d6122fde5380ca4beea444bdecfa9f6bb4b60bebfbc70289b7ec6eaa127fad4ef308504881d05d9d4d039e6db99e51fa27cf8c4ac5665f4292244432aff97ab9423a7fc93a039655b59c38f0ccc92ffeff47d85845dd16fa87e4ffe2ce6e0a30143144e0811a1f7537e82bd3af2352ad7d2bbeb86d391", 8);
117         for (w = l(a),
118         s = x[0],
119         t = x[1],
120         u = x[2],
121         v = x[3],
122         n = 0; w.length > n; n += 16)
123             o = s,
124             p = t,
125             q = u,
126             r = v,
127             s = h(s, t, u, v, w[n + 0], 7, x[4]),
128             v = h(v, s, t, u, w[n + 1], 12, x[5]),
129             u = h(u, v, s, t, w[n + 2], 17, x[6]),
130             t = h(t, u, v, s, w[n + 3], 22, x[7]),
131             s = h(s, t, u, v, w[n + 4], 7, x[8]),
132             v = h(v, s, t, u, w[n + 5], 12, x[9]),
133             u = h(u, v, s, t, w[n + 6], 17, x[10]),
134             t = h(t, u, v, s, w[n + 7], 22, x[11]),
135             s = h(s, t, u, v, w[n + 8], 7, x[12]),
136             v = h(v, s, t, u, w[n + 9], 12, x[13]),
137             u = h(u, v, s, t, w[n + 10], 17, x[14]),
138             t = h(t, u, v, s, w[n + 11], 22, x[15]),
139             s = h(s, t, u, v, w[n + 12], 7, x[16]),
140             v = h(v, s, t, u, w[n + 13], 12, x[17]),
141             u = h(u, v, s, t, w[n + 14], 17, x[18]),
142             t = h(t, u, v, s, w[n + 15], 22, x[19]),
143             s = i(s, t, u, v, w[n + 1], 5, x[20]),
144             v = i(v, s, t, u, w[n + 6], 9, x[21]),
145             u = i(u, v, s, t, w[n + 11], 14, x[22]),
146             t = i(t, u, v, s, w[n + 0], 20, x[23]),
147             s = i(s, t, u, v, w[n + 5], 5, x[24]),
148             v = i(v, s, t, u, w[n + 10], 9, x[25]),
149             u = i(u, v, s, t, w[n + 15], 14, x[26]),
150             t = i(t, u, v, s, w[n + 4], 20, x[27]),
151             s = i(s, t, u, v, w[n + 9], 5, x[28]),
152             v = i(v, s, t, u, w[n + 14], 9, x[29]),
153             u = i(u, v, s, t, w[n + 3], 14, x[30]),
154             t = i(t, u, v, s, w[n + 8], 20, x[31]),
155             s = i(s, t, u, v, w[n + 13], 5, x[32]),
156             v = i(v, s, t, u, w[n + 2], 9, x[33]),
157             u = i(u, v, s, t, w[n + 7], 14, x[34]),
158             t = i(t, u, v, s, w[n + 12], 20, x[35]),
159             s = j(s, t, u, v, w[n + 5], 4, x[36]),
160             v = j(v, s, t, u, w[n + 8], 11, x[37]),
161             u = j(u, v, s, t, w[n + 11], 16, x[38]),
162             t = j(t, u, v, s, w[n + 14], 23, x[39]),
163             s = j(s, t, u, v, w[n + 1], 4, x[40]),
164             v = j(v, s, t, u, w[n + 4], 11, x[41]),
165             u = j(u, v, s, t, w[n + 7], 16, x[42]),
166             t = j(t, u, v, s, w[n + 10], 23, x[43]),
167             s = j(s, t, u, v, w[n + 13], 4, x[44]),
168             v = j(v, s, t, u, w[n + 0], 11, x[45]),
169             u = j(u, v, s, t, w[n + 3], 16, x[46]),
170             t = j(t, u, v, s, w[n + 6], 23, x[47]),
171             s = j(s, t, u, v, w[n + 9], 4, x[48]),
172             v = j(v, s, t, u, w[n + 12], 11, x[49]),
173             u = j(u, v, s, t, w[n + 15], 16, x[50]),
174             t = j(t, u, v, s, w[n + 2], 23, x[51]),
175             s = k(s, t, u, v, w[n + 0], 6, x[52]),
176             v = k(v, s, t, u, w[n + 7], 10, x[53]),
177             u = k(u, v, s, t, w[n + 14], 15, x[54]),
178             t = k(t, u, v, s, w[n + 5], 21, x[55]),
179             s = k(s, t, u, v, w[n + 12], 6, x[56]),
180             v = k(v, s, t, u, w[n + 3], 10, x[57]),
181             u = k(u, v, s, t, w[n + 10], 15, x[58]),
182             t = k(t, u, v, s, w[n + 1], 21, x[59]),
183             s = k(s, t, u, v, w[n + 8], 6, x[60]),
184             v = k(v, s, t, u, w[n + 15], 10, x[61]),
185             u = k(u, v, s, t, w[n + 6], 15, x[62]),
186             t = k(t, u, v, s, w[n + 13], 21, x[63]),
187             s = k(s, t, u, v, w[n + 4], 6, x[64]),
188             v = k(v, s, t, u, w[n + 11], 10, x[65]),
189             u = k(u, v, s, t, w[n + 2], 15, x[66]),
190             t = k(t, u, v, s, w[n + 9], 21, x[67]),
191             s = c(s, o),
192             t = c(t, p),
193             u = c(u, q),
194             v = c(v, r);
195         return m(s).concat(m(t), m(u), m(v))
196     };
197 
198 m = function(c, d) {
199         var b = 8, a = 14;
200         var e, f = a >= 12 ? 3 : 2, g = [], h = [], i = [], j = [], k = c.concat(d);
201         for (i[0] = O(k),
202         j = i[0],
203         e = 1; f > e; e++)
204             i[e] = O(i[e - 1].concat(k)),
205             j = j.concat(i[e]);
206         return g = j.slice(0, 4 * b),
207         h = j.slice(4 * b, 4 * b + 16),
208         {
209             key: g,
210             iv: h
211         }
212     };
213 A = function(a) {
214         var b, c = [];
215         for (b = 0; a.length > b; b++)
216             c[a[b]] = b;
217         return c
218     };
219 B = function(a, b) {
220         var c, d;
221         for (d = 0,
222         c = 0; 8 > c; c++)
223             d = 1 === (1 & b) ? d ^ a : d,
224             a = a > 127 ? 283 ^ a << 1 : a << 1,
225             b >>>= 1;
226         return d
227     };
228 C = function(a) {
229         var b, c = [];
230         for (b = 0; 256 > b; b++)
231             c[b] = B(a, b);
232         return c
233     };
234 var D = z("637c777bf26b6fc53001672bfed7ab76ca82c97dfa5947f0add4a2af9ca472c0b7fd9326363ff7cc34a5e5f171d8311504c723c31896059a071280e2eb27b27509832c1a1b6e5aa0523bd6b329e32f8453d100ed20fcb15b6acbbe394a4c58cfd0efaafb434d338545f9027f503c9fa851a3408f929d38f5bcb6da2110fff3d2cd0c13ec5f974417c4a77e3d645d197360814fdc222a908846eeb814de5e0bdbe0323a0a4906245cc2d3ac629195e479e7c8376d8dd54ea96c56f4ea657aae08ba78252e1ca6b4c6e8dd741f4bbd8b8a703eb5664803f60e613557b986c11d9ee1f8981169d98e949b1e87e9ce5528df8ca1890dbfe6426841992d0fb054bb16", 2);
235 var E = A(D);
236 var F = z("01020408102040801b366cd8ab4d9a2f5ebc63c697356ad4b37dfaefc591", 2);
237 var G = C(2);
238 var H = C(3);
239 var I = C(9);
240 var J = C(11);
241 var K = C(13);
242 var L = C(14);
243 
244 
245 
246 
247 //o函数准备:
248 y = function(a) {
249         var b, c = a[0];
250         for (b = 0; 4 > b; b++)
251             a[b] = a[b + 1];
252         return a[3] = c,
253         a
254     };
255 
256 x = function(a) {
257     for (var b = 0; 4 > b; b++)
258         a[b] = D[a[b]];
259     return a
260 };
261 w = function(c) {
262         var a = 14, b = 8;
263         var d, e, f, g, h = [], i = [], j = [];
264         for (d = 0; b > d; d++)
265             e = [c[4 * d], c[4 * d + 1], c[4 * d + 2], c[4 * d + 3]],
266             h[d] = e;
267         for (d = b; 4 * (a + 1) > d; d++) {
268             for (h[d] = [],
269             f = 0; 4 > f; f++)
270                 i[f] = h[d - 1][f];
271             for (0 === d % b ? (i = x(y(i)),
272             i[0] ^= F[d / b - 1]) : b > 6 && 4 === d % b && (i = x(i)),
273             f = 0; 4 > f; f++)
274                 h[d][f] = h[d - b][f] ^ i[f]
275         }
276         for (d = 0; a + 1 > d; d++)
277             for (j[d] = [],
278             g = 0; 4 > g; g++)
279                 j[d].push(h[4 * d + g][0], h[4 * d + g][1], h[4 * d + g][2], h[4 * d + g][3]);
280         return j
281     };
282 
283 s = function(a) {
284         var b, d = [], e = c ? [0, 13, 10, 7, 4, 1, 14, 11, 8, 5, 2, 15, 12, 9, 6, 3] : [0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 1, 6, 11];
285         for (b = 0; 16 > b; b++)
286             d[b] = a[e[b]];
287         return d
288     };
289 r = function(a) {
290         var b, d = c ? E : D, e = [];
291         for (b = 0; 16 > b; b++)
292             e[b] = d[a[b]];
293         return e
294     };
295 u = function(a, b, c) {
296         var d, e = [];
297         for (d = 0; 16 > d; d++)
298             e[d] = a[d] ^ b[c][d];
299         return e
300     };
301 
302 
303 t = function(a) {
304         var b, d = [];
305         if (c)
306             for (b = 0; 4 > b; b++)
307                 d[4 * b] = L[a[4 * b]] ^ J[a[1 + 4 * b]] ^ K[a[2 + 4 * b]] ^ I[a[3 + 4 * b]],
308                 d[1 + 4 * b] = I[a[4 * b]] ^ L[a[1 + 4 * b]] ^ J[a[2 + 4 * b]] ^ K[a[3 + 4 * b]],
309                 d[2 + 4 * b] = K[a[4 * b]] ^ I[a[1 + 4 * b]] ^ L[a[2 + 4 * b]] ^ J[a[3 + 4 * b]],
310                 d[3 + 4 * b] = J[a[4 * b]] ^ K[a[1 + 4 * b]] ^ I[a[2 + 4 * b]] ^ L[a[3 + 4 * b]];
311         else
312             for (b = 0; 4 > b; b++)
313                 d[4 * b] = G[a[4 * b]] ^ H[a[1 + 4 * b]] ^ a[2 + 4 * b] ^ a[3 + 4 * b],
314                 d[1 + 4 * b] = a[4 * b] ^ G[a[1 + 4 * b]] ^ H[a[2 + 4 * b]] ^ a[3 + 4 * b],
315                 d[2 + 4 * b] = a[4 * b] ^ a[1 + 4 * b] ^ G[a[2 + 4 * b]] ^ H[a[3 + 4 * b]],
316                 d[3 + 4 * b] = H[a[4 * b]] ^ a[1 + 4 * b] ^ a[2 + 4 * b] ^ G[a[3 + 4 * b]];
317         return d
318     };
319 
320 
321 
322 q = function(b, d) {
323         var a = 14;
324         c = !0;
325         var e, f = u(b, d, a);
326         for (e = a - 1; e > -1; e--)
327             f = s(f),
328             f = r(f),
329             f = u(f, d, e),
330             e > 0 && (f = t(f));
331         return f
332     };
333 
334 v = function(a, b) {
335         var c, d = [];
336         for (c = 0; 16 > c; c++)
337             d[c] = a[c] ^ b[c];
338         return d
339     };
340 
341 g = function(a, b) {
342         var c, d, e = "";
343         if (b) {
344             if (c = a[15],
345             c > 16)
346                 throw "Decryption error: Maybe bad key";
347             if (16 === c)
348                 return "";
349             for (d = 0; 16 - c > d; d++)
350                 e += String.fromCharCode(a[d])
351         } else
352             for (d = 0; 16 > d; d++)
353                 e += String.fromCharCode(a[d]);
354         return e
355     };
356 
357 e = function(a) {
358         try {
359             return decodeURIComponent(escape(a))
360         } catch (b) {
361             throw "Bad Key"
362         }
363     };
364 
365 
366 o = function(a, b, c, d) {
367         b = w(b);
368         var f, h = a.length / 16, i = [], j = [], k = "";
369         for (f = 0; h > f; f++)
370             i.push(a.slice(16 * f, 16 * (f + 1)));
371         for (f = i.length - 1; f >= 0; f--)
372             j[f] = q(i[f], b),
373             j[f] = 0 === f ? v(j[f], c) : v(j[f], i[f - 1]);
374         for (f = 0; h - 1 > f; f++)
375             k += g(j[f]);
376         return k += g(j[f], !0),
377         d ? k : e(k)
378     };

 

 

 

 

 

 

 

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM