js 反爬

sign 计算

js debug xhr

execjs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import execjs

node = execjs.get()


def js_file(path):
    o = open(path).read()
    return node.compile(o)
    
def js_sha(param):
    js_path = '../js/sha1.min.js'
    ctx = js_file(js_path)
    # ctx.eval("sha1 = require('js-sha1')")
    return ctx.call('sha1', param)


def t(param):
    cmd = """
    Math.floor(({} - 99) / 99)
    """.format(param)
    return node.eval(cmd)
    
def page(page_num):
    sess = requests.session()
    sess.headers = headers = {
        # 'User-Agent': random.choice(config.HEADER.USER_AGENT),
        'User-Agent': ua.random, }
    # sess.cookies = cookies

    resp = sess.get(url=URL.format(page_num), cookies=cookies)
    soup = BeautifulSoup(resp.text, "lxml")

    ele = soup.find('div', class_='container', p=True)
    p = ele['p']
    ts = t(ele['t'])
    # sign = sha('Xr0Z-javascript-obfuscation-1{}'.format(ts).encode())

    # p = page_num
    # ts = int(time.time())
    sign = sha('Xr0Z-javascript-obfuscation-1{}'.format(ts).encode())

    param = {
        'page': p,
        't': ts,
        'sign': sign,
    }
    # sess.headers.update({
    #     # 'Referer': URL.format(page_num),
    #     'Referer': 'http://glidedsky.com/level/web/crawler-javascript-obfuscation-1',
    #     'X-Requested-With': 'XMLHttpRequest',
    # })
    resp = sess.get(XHR_URL, params=param)
    # print(resp.headers['Referer'])
    print(resp.json())