关于python爬虫调用js时如何实现debug的骚操作

网上有人用了js2py,我自己用了一下,运行太慢了,没有用过pyV8,不做评论,平时主要是用execjs,用着还顺手。
在python爬虫逆向js的时候,由于js代码的复杂性,可能会直接有调用js的情况,这个时候我就选用execjs,但是用这个库,我只能得到js返回的结果,有时候需要debug,就不知道该怎么实现了,例如:
// python_ondejs.js
function add(num1, num2) {
    var num3 = 0
    // console.log(num1, num2)
    num3 = num1 + num2;
    console.log(num3)
    return num3
}
# python_nodejs.py
import execjs


def get_data(args1, args2):
    with open("python_ondejs.js", "r", encoding="utf-8") as f:
        jzsc_code = f.read()
    decrypted_data = execjs.compile(jzsc_code).call("add", args1, args2)
    print(decrypted_data)
    return decrypted_data


if __name__ == '__main__':
    get_data(1, 2)

用python调用的时候,只能获取到 add 返回的值,也就是 num3,这知识简单的一个js函数调用,如果复杂一些,需要像debug那样,查看参数的运行值,也就是js里面的console,该怎么办呢?
这个时候用到了python的另一个库 import subprocess,首先修改 .py 文件

# python_nodejs.py
import subprocess
import execjs


def get_data(args1, args2):
    with open("python_ondejs.js", "r", encoding="utf-8") as f:
        jzsc_code = f.read()
    decrypted_data = execjs.compile(jzsc_code).call("add", args1, args2)
    print(decrypted_data)
    return decrypted_data


if __name__ == '__main__':
    # get_data(1, 2)
    args1 = "1"
    args2 = "2"
    p = subprocess.Popen(['node', './python_ondejs.js', args1, args2], stdout=subprocess.PIPE)
    out = p.stdout.read()
    print('out:', "\n", out)

然后修改 js 的代码:

// python_ondejs.js
function add(num1, num2) {
    var num3 = 0
    // console.log(num1, num2)
    num3 = num1 + num2;
    console.log(num3)
    return num3
}

var num1 = parseInt(process.argv[2]);
var num2 = parseInt(process.argv[3]);
// console.log(num1, num2)
add(num1, num2)

运行就可以看到console的数据了,调试完成之后,用 execjs 调用或传参就行,subprocess 只是用来实现类似 debug 的方式,查看 js 里面的console,不要搞混淆了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值