Python中用execjs怎样运行带中文参数的JS脚本
导读:在实际案例的操作过程中,我们可能会遇到“Python中用execjs怎样运行带中文参数的JS脚本”这样的问题,那么我们该如何处理和解决这样的情况呢?这篇小编就给大家总结了一些方法,具有一定的借鉴价值,希望对大家有所帮助,接下来就让小编带领大...
在实际案例的操作过程中,我们可能会遇到“Python中用execjs怎样运行带中文参数的JS脚本”这样的问题,那么我们该如何处理和解决这样的情况呢?这篇小编就给大家总结了一些方法,具有一定的借鉴价值,希望对大家有所帮助,接下来就让小编带领大家一起了解看看吧。抓取到了一段包含数据的javascript代码:
import re
import requests
headers = {
"user-agent": "mozilla/5.0 (windows nt 10.0;
wow64) applewebkit/537.36 (khtml, like gecko) chrome/86.0.4240.198 safari/537.36",
"accept": "text/html,application/xhtml+xml,application/xml;
q=0.9,image/avif,image/webp,image/apng,*/*;
q=0.8,application/signed-exchange;
v=b3;
q=0.9",
}
res = requests.get(
"https://www.kuaikanmanhua.com/web/comic/100868/",
headers=headers
)
script = re.findall(
"script>
window.__nuxt__=([^]+);
/script>
", res.text)[0].replace('\\u002f', "/")
script
结果:
这段代码直接在游览器执行可以得到对应的json数据,那么我们如何使用python执行这段代码获取js数据呢?答案是使用execjs。
安装:
pip install pyexecjs
但是如果此时在安装过nodejs的windows上直接执行代码:
import execjs execjs.eval(script)
会报出如下错误:
unicodedecodeerror: 'gbk' codec can't decode byte 0xa4 in position 447: illegal multibyte sequence
此时我们需要重新指定execjs的环境为jscript:
import os os.environ["execjs_runtime"] = "jscript"
再次执行可以顺利得到结果。
如果我们确实需要使用本地nodejs的环境执行javascript则需要修改修改execjs的源码:
import os os.environ["execjs_runtime"] = "node" print(execjs.get().name)
node.js (v8)
找到execjs安装目录下的_external_runtime.py文件:
重启程序再次执行即可得到结果:
execjs的调用函数或读取变量示例:
import execjs
ctx = execjs.compile("""
function add(x, y) {
return x + y;
}
v = add(3, 4);
""")
print(ctx.call("add", 1, 2), ctx.eval("v"))
3 7
lib\site-packages\execjs\runtime_names.py文件可以看到execjs所支持的javascript环境:
pyv8 = "pyv8" node = "node" javascriptcore = "javascriptcore" spidermonkey = "spidermonkey" jscript = "jscript" phantomjs = "phantomjs" slimerjs = "slimerjs" nashorn = "nashorn"
总结
以上就是关于“Python中用execjs怎样运行带中文参数的JS脚本”的相关知识,感谢各位的阅读,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注网络,小编每天都会为大家更新不同的知识。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Python中用execjs怎样运行带中文参数的JS脚本
本文地址: https://pptw.com/jishu/654366.html
