盘点3个可以操作JavaScript的Python库

前言

我们都知道Python可以很轻松的实现某些功能,而且还可以编写网页,比如Remi,Pysimplegui,但是操作JavaScript这种浏览器的脚本语言,还是第一次听说,小编也是第一次听说,于是就跟大家脑补这一知识。

一、PyExecJS

是一个可以执行JavaScript脚本的Python模块,可以与网页上的JavaScript进行交互,这样就能更加精准的获取到网页中的加密内容,如果用Python中的网络模块进行请求,会无法解密文档中的加密内容,这个时候使用我们的PyExecJS可以很方便到的解密网页中的加密内容,当然这得你会Js逆向才可以。不过要想PyExecJS解析JS语句没毛病,还得整个Js语言解析环境,这里推荐NodeJS,尴尬。我们来看下PyExecJs的用法:

1.常规操作

1 2import execjs 3aa=execjs.eval("'one|two|three'.split('|')") #执行JavaScript代码,将字符串分割形成数组 4print(aa) 5 6e=execjs.compile(''' #编译一个表达式 7function add(x,y){ 8 return x+y; 9} 10''') 11print(e.call('add',10,20))#调用编译好的函数并且赋值

也可以通过获取引擎来运行我们的语句,如下:

print(execjs.get().eval('1+1'))

2.查看解释引擎

print(execjs.get().name)

这里JavaScript的解释引擎是JScript,我们还可以使用自己指定给力的引擎,比如“Nodejs”。

3.指定引擎

1 2import execjs 3import os 4os.environ["EXECJS_RUNTIME"] = "Node" 5print(execjs.get().name)

也可以手动指定引擎,如下:

1 2js1=execjs.get(execjs.runtime_names.JScript) 3print(js1.eval('1')) 4 5js2=execjs.get(execjs.runtime_names.Node) 6print(js2.eval('2'))

二、Js2Py

这个我觉得算是比较好的了,可以说是一个综合体,它不需要依赖别的环境,可以独立运行Js文件,只不过它的运行速度可能会稍微慢一点而已,但是这都不叫事。下面我们来看看它有哪些神器的功能吧。

1.常规操作,必须的

2.循环遍历

1import js2py 2aa=js2py.eval_js( 3''' 4var i=0; 5for(var c=1;c<6;c++){ 6console.log(c); 7} 8 9''' 10) 11print(aa)

3.读取Js文件

我们可以把JS文件写入文件中,以便我们进行调用,如下:

1.js

1function f(aa){ 2 if(aa>11){ 3 console.log('OK') 4 5 }else{ 6 console.log('Fail') 7 } 8}

Python文件

1import js2py 2with open('1.js','r') as f: 3 aa=js2py.eval_js(f.read()) 4 print(aa(11))

4.爬取网站数据

这里我们以淘宝为主,我想整它的JS脚本文件,如下:

1import execjs 2import requests 3import re 4url = 'https://ai.taobao.com/?pid=mm_26632323_6762370_25910879' 5res=requests.get(url).text 6js=re.findall(r'<script>(.*?)</script>',res) 7print(js,'\n') 8js1=re.sub(r'eval\(','return(',js[0]) 9html="function getLego2WPK(){" + js1 + "};" 10ctx = execjs.compile(html) 11temp = ctx.call('getLego2WPK') 12print(temp)

三、PyV8

基于Google的V8引擎打造,遗憾的是目前只支持Python2版本,而且已不再维护,建议Python2的小伙伴可以去试试。

四、总结

本文主要盘点了3个可以操作JavaScript的Python库,分别是PyExecJS、Js2Py和PyV8,只要我们用好了这些模块以后玩爬虫就能更加技高一筹,并且准确率更高了。

------------------- End -------------------

往期精彩文章推荐:

欢迎各位大佬点击链接加入群聊【helloworld开发者社区】:https://jq.qq.com/?_wv=1027&k=mBlk6nzX进群交流IT技术热点。

本文转自 https://mp.weixin.qq.com/s/3obHCfpNqdtCguQO2DpZCw,如有侵权,请联系删除。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

一篇文章带你了解JavaScript日期

日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用

盘点JavaScript中5个常用的对象

大家好,我是IT共享者,人称皮皮。前言相信做网站对JavaScript再熟悉不过了,它是一门脚本语言,不同于Python的是,它是一门浏览器脚本语言,而Python则是服务器脚本语言,我们不光要会Python,还要会JavaScript,因为它对做网页方面是有很大作用的。JavaScript对象在JavaScript中有许多有用的对象,它们可以用来实现很

盘点3个可以操作JavaScript的Python库 - HelloWorld