77百科网
当前位置: 首页 生活百科

python怎么引用js(最全总结聊聊Python)

时间:2023-06-02 作者: 小编 阅读量: 3 栏目名: 生活百科

作者|星安果来源|AirPython,下面我们就来说一说关于python怎么引用js?我们一起去了解并探讨一下这个问题吧!

python怎么引用js?作者 | 星安果来源 | AirPython,下面我们就来说一说关于python怎么引用js?我们一起去了解并探讨一下这个问题吧!

python怎么引用js

作者 | 星安果

来源 | AirPython

1. 前言

日常 Web 端爬虫过程中,经常会遇到参数被加密的场景,因此,我们需要分析网页源代码

通过调式,一层层剥离出关键的 JS 代码,使用 Python 去执行这段代码,得出参数加密前后的 Python 实现

本文将聊聊利用 Python 调用 JS 的4种方式

2. 准备

以一段简单的 JS 脚本为例,将代码写入到文件中

//norm.js//计算两个数的和functionadd(num1,num2){returnnum1 num2;}

其中,定义了一个方法,计算两个数的和

3. 方式一:PyExecJS

PyExecJS 是使用最多的一种方式,底层实现方式是:在本地 JS 环境下运行 JS 代码

支持的 JS 环境包含:Node.js、PyV8、PhantomJS、Nashorn 等

首先,我们需要安装依赖包 PyExecJS

//py_exec_js_demo.py//安装依赖pip3installPyExecJS

然后,从 JS 文件中读取源码

defjs_from_file(file_name):"""读取js文件:return:"""withopen(file_name,'r',encoding='UTF-8')asfile:result=file.read()returnresult

最后,使用 execjs 类的compile()方法编译加载上面的 JS 字符串,返回一个上下文对象

importexecjsfromjs_codeimport*#编译加载js字符串context1=execjs.compile(js_from_file('/norm.js'))

最后,调用上下文对象的call() 方法执行 JS 方法

其中,参数包含:JS 代码被调的方法名、对应方法的传入参数

#调用js代码中的add()方法,参数为2和3#方法名:add#参数:2和3result1=context1.call("add",2,3)print(result1)

需要注意的,由于 PyExecJS 运行在本地 JS 环境下,使用之前会启动 JS 环境,最终导致运行速度会偏慢

更多功能可以参考:

http://github.com/doloopwhile/PyExecJS

4. 方式二:js2py

js2py作为一个纯 Python 实现的 JS 解释器,可以完全脱离 JS 环境,直接将 JS 代码转换为 Python 代码

首先,安装依赖库

#安装依赖库pip3installjs2py

然后使用 js2py 中的EvalJs()方法生成一个上下文对象

#使用获取上下js2py生成一个上下文环境context=js2py.EvalJs()

接着利用上下文对象执行 JS 脚本,转换为 Python 代码

#执行整段JS代码context.execute(js_content)

最后,利用上下文调用 JS 中的方法,并制定输入参数即可

#使用上下文context调用具体的函数#函数名:add#参数:1,2result=context.add(1,2)print(result)

需要注意是,如果 JS 是很长的混淆代码,转换为 Python 的过程可能会报错

更多功能可以参考:

http://github.com/PiotrDabkowski/Js2Py

5. 方式三:Node.js

实际上是使用 Python 的os.popen执行 node 命令,执行 JS 脚本

首先,确保本地已经安装了 Node.js 环境

修改 JS 脚本,新增一个导出函数 init ,方便内部函数被调用

//计算两个数的和functionadd(num1,num2){returnnum1 num2;}//新增一个导出函数(node方式)module.exports.init=function(arg1,arg2){//调用函数,并返回console.log(add(arg1,arg2));};

然后,将调用 JS 方法的命令组成一个字符串

#组成调用js的命令# node命令:node -ecmd='node-e"require(\\"%s\\").init(%s,%s)"'%('/norm',3,5)

最后,通过 os.popen 执行命令即可

pipeline=os.popen(cmd)#读取结果result=pipeline.read()print('结果是:',result)

6. 方式四:PyV8

PyV8 是 Google 将 Chrome V8 引擎用 Python 封装的依赖库

它不依赖本地 JS 环境,运行速度很快

importPyV8fromjs_codeimportjs_from_filewithPyV8.JSContext()asctx:ctx.eval(js_from_file('/norm.js'))#调用js函数,指定参数ctx.locals.add(1,2)

但是经过反复测试发现,MAC 和 PC 在 Python3 环境下,使用 PyV8 会报各种奇怪的问题,所以不推荐使用!

更多功能可以参考:

http://github.com/emmetio/pyv8-binaries

···END···

    推荐阅读
  • 商标权专利权具体有怎样的差别

    专利权的内容分为专利权人的权利和专利权人的义务。专利权人的权利包括独占实施权、转让权、许可实施权、标记权、请求保护权、放弃权和质押权。专利权的对象,是依法应授予专利权的发明创造。根据我国专利法第2条的规定,专利法的对象包括发明、实用新型和外观设计三种。专利权期限届满前,专利权人可以书面声明放弃专利权。

  • 今年哪一天是入伏的第一天(今日入伏老人们说)

    今日入伏老人们说俗话说:最冷不过三九,最热不过三伏今天是入伏的第一天,也就是说真正的“酷夏”从今天起正式开始入伏的第一天,被古人称为“伏王”或“伏头”他们认为这一天相当重要,不但要在这一天举行隆重的仪式祈祷和拜祭祖先。

  • pc上播放4k电影(如果你想要看DVD或者蓝光4K电影)

    不过在第12代处理器的规格表中,英特尔确认不再支持该技术。出于这个原因,Cyberlink已经警告用户不要升级到最新硬件,也不要升级驱动程序甚至操作系统。英特尔可能放弃SGX技术的原因之一是,该技术已经多次被黑客彻底击败,实际上暴露了英特尔安全enclave的其他内容。这意味着英特尔删除这个有缺陷的功能是有意义的。

  • 怀孕了准妈妈们需要注意点啥(这样最容易怀孕)

    结婚后想和老公过二人世界,所以没想着今年怀孕。我从14年就长智齿,疼了两年,月月疼。听说怀孕会更疼且不能吃药。所以励志先拔智齿再怀孕。智齿拔完就准备选择叶酸,看了好多牌子的,最后决定用复合维生素片,这个含叶酸0.8,而且补充其他维生素。怀孕的这个月白带拉丝的特别漂亮,去医院监测排卵卵泡也是又大又圆。还要跳绳,有助于排卵。

  • 干杏鲍菇要泡多少时间(干杏鲍菇怎么泡)

    干杏鲍菇要泡多少时间干的香菇在烹饪前,全是需要侵泡泡开,最好是先用60℃-80℃的开水侵泡5-8分钟,使其带有的脱氧核糖核酸水解反应变成具备鲜香的乌苷酸,吃的情况下更为味美爽口。还可以将干香菇泡入50℃上下的红豆糖水中,那样泡发的香菇不但保存了原来的香气,并且由于浸进了糖液,烧好后味儿会更为美味。此外干香菇上边有很多的细沙,侵泡干香菇以后一定要清理干净。

  • 博世壁挂炉eco什么意思 博世壁挂炉pre和eco怎么办

    博世壁挂炉eco不是故障代码,它只是一个节能模式,在此模式不会强制挂炉进行生活热水预加热。

  • 梁静茹把自己都给唱哭了(最真的梁静茹唱了20年的情歌)

    近日,梁静茹的恋情传得沸沸扬扬,随后梁静茹方也承认了恋情。当梁静茹恋情确认后,这个消息很快登上热搜,网友以及歌迷都纷纷送上祝福。随着歌曲登上排行榜,梁静茹开始崭露头角。当时的梁静茹被称为“情歌天后”。至此,梁静茹在台湾乐坛站稳了脚跟。《情歌没有告诉你》和《爱久见人心》这两张专辑,都是婚后发布的。当时梁静茹离婚之后,网上曾有爆料,赵元同似乎有外遇一类的情况。

  • 德州十大最好玩的景点(德州十大好玩的景点)

    景区依托寺院而建,包括佛事活动区、商业区、景观区三部分,已形成周边地区规模最大的仿古建筑群。寺院主体为佛事活动区。齐河泉城海洋极地世界:泉城海洋极地世界是目前亚洲规模最大、世界一流的海洋馆,位于德州齐河县境内,距离济南市大约20分钟路程。太阳谷是国内首家太阳能主题公园,拥有世界级可再生能源五大中心、十大太阳能建筑。包括“一河、两园”,属城市河湖型水利风景区。

  • 小情侣吵架路上一女的求助(小情侣隔三岔五就在微信群里吵架)

    去年下半年,同学小邓交了一位女友名叫瑶瑶,也按老规矩把瑶瑶拉进了群里。陈晓璐说,前不久,群里又爆发了一次二人的争吵,瑶瑶和小邓气得陆续退群,陈晓璐和谢苒又扮演和事佬把两个人拉回了群里。瑶瑶一是希望以给对象制造麻烦的方式,获得对象的回应;二则代表瑶瑶希望获得大家的舆论支持,进而让对象更加深刻的认识到错误。接下来,小邓可以找一个合适的时机,告诉瑶瑶大家的真实感受,让瑶瑶意识到自己行为的问题。

  • 装修材料全攻略(吐血整理装修材料品牌汇总清单)

    也就是地柜、台面、吊柜分别计价,单位延米价×橱柜长度。延米价包含了门板、柜体、基本五金件。像抽屉、拉篮、进口五金等,是要另外加价收费的。二是按单元柜计价。这种计价方式,价格相对延米贵些。首选海蒂诗或百隆铰链,带阻尼缓冲,防止关柜门时夹到手,质量好更耐用。