python如何运行js语句

1. 安装

pip install PyExecJS  # 需要注意, 包的名称:PyExecJS

2. 简单使用

import execjs
execjs.eval("new Date")
返回值为: 2018-04-04T12:53:17.759Z
execjs.eval("Date.now()")
返回值为:1522847001080  # 需要注意的是返回值是13位, 区别于python的time.time()

需要注意的是: 个别的JS语句, 用execjs返回的结果跟浏览器环境返回的结果是有区别的, 以下是浏览器环境返回的结果:

3. 调用函数

# 实际生产中处理的js有几百几千行, 不方便贴上来。来看一下源码中给的例子:
  ctx = execjs.compile("""
        function add(x, y) {
                return x + y;
           }
""")
  ctx.call("add", 1, 2)  # 第一个参数 “add” 为JS函数名的字符串, 后边依次为实参
  返回值:3

execjs的用法非常简单, 下边来看一下执行JS的环境, 以及性能:

4. 执行JS的环境

在windows上不需要其他的依赖便可运行execjs, 也可以调用其他的JS环境

windows 默认的执行JS的环境
execjs.get().name
返回值: JScript
作者本人的windows上装有Node.js , 所以返回值不同
execjs.get().name
返回值: Node.js (V8)

在ubuntu下需要安装执行JS环境依赖, 作者的环境为PhantomJS

execjs.get().name
返回值: PhantomJS

源码中给出, 可执行execjs的环境:

PyV8         = "PyV8"
Node         = "Node"
JavaScriptCore    = "JavaScriptCore"
SpiderMonkey    = "SpiderMonkey"
JScript       = "JScript"
PhantomJS      = "PhantomJS"
SlimerJS       = "SlimerJS"
Nashorn       = "Nashorn"

在ubuntu环境下,没有JS环境会报错:Could not find an available JavaScript runtime. 由此可见,execjs在ubuntu需要安装JS环境 。具体的JS环境需根据具体的需求安装, 切不可超过以上8种。

5.环境切换

通过os.environ

os.environ["EXECJS_RUNTIME"] = "Node"
execjs.get().name
execjs.eval("1 + 2")

通过execjs.get 切换

jscript = execjs.get(execjs.runtime_names.JScript)  # runtime_names 便是execjs源码中给出的执行环境的。 
execjs.runtime_names.xxx  xxx必须在上一节 #3中取
jscript.eval("1 + 2")

注: 在切换环境时, 当环境不存在不会报错, 会使用默认的环境。 另外需要注意的是, 两种方式的区别

6. 简易性能分析

# 只简单试了三种, 在windows下
import  execjs
import os
import time
# 先用JScript
os.environ["EXECJS_RUNTIME"] = "JScript"
print execjs.get().name
time1 = time.time()
for i in range(100):
    execjs.eval("new Date")
print time.time() - time1
# 切换环境 使用Nodejs
os.environ["EXECJS_RUNTIME"] = "Node"
print execjs.get().name
time2 = time.time()
for l in range(100):
    execjs.eval("new Date")
print time.time() - time2
# 打印的结果为:
JScript
4.70900011063
Node.js (V8)
27.501999855
# 在ubuntu下试的是PhantoJS , 结果竟然高达 30+ S

以上就是python如何运行js语句的详细内容,更多关于python运行js语句实例的资料请关注我们其它相关文章!

(0)

相关推荐

  • python和JavaScript哪个容易上手

    Python Python 是对于第一次编程的人来说是最为流行的编程语言之一,而且这不是巧合.Python 是一门通用的编程语言.这意味着它能应用在广泛的编程任务上.几乎没有你不能用 Python 完成的工作.这一点使得很多新手能在实际中应用这门编程语言.另外, Python 有两个重要的设计特征,使得其对于新手更友好:清晰.类似于英语的语法,和强调代码的可读性. 从本质上讲,一门编程语言的语法就是你所输入的能让这编程语言执行的内容.这包括单词,特殊字符(例如 ;.$.%或者{},空格或者以上任

  • python和js交互调用的方法

    后台代码都是利用的 1.[get方式]使用jquery的get json与后台交互 前端js代码片段 var data= { 'a': $('input[name="a"]').val(), 'b': $('input[name="b"]').val() } $.getJSON($SCRIPT_ROOT + '/_add_numbers',data, function(data) { $('#result').text(data.result); $('input[

  • Python如何调用JS文件中的函数

    Python 调用JS文件中的函数方法如下 1.安装PyExecJS第三方库 2.导入库:import execjs 3.调用JS文件中的方法 Passwd = execjs.compile(open(r"web.js").read().decode("utf-8")).call('loginHandle','steam') 语句解析,open后跟所执行的js文件位置,call后第一个单引号引起来的为所执行的js文件的某个function, 第二个单引号是前面函数的

  • python如何运行js语句

    1. 安装 pip install PyExecJS  # 需要注意, 包的名称:PyExecJS 2. 简单使用 import execjs execjs.eval("new Date") 返回值为: 2018-04-04T12:53:17.759Z execjs.eval("Date.now()") 返回值为:1522847001080  # 需要注意的是返回值是13位, 区别于python的time.time() 需要注意的是: 个别的JS语句, 用execj

  • python使用js2py库运行js代码

    目录 一.js2py库概述 二.抽取js代码运行结果 三.提取js语句内变量和对象等 四.其他 在日常使用Python做爬虫,一般会用到以下手段: 请求URL,返回HTML文本,然后通过xpath.css或者re,提取数据 有些网页的数据通过AJAX异步请求加载,此时找到对应的接口,调用并直接使用接口返回的数据 有时候如果网站反爬或安全机制比较高时,则会做一些验证或者加密,比如cookie内必须携带token等信息,而这些信息是通过混淆过的js代码计算得出的. 针对1,应该是爬取大多数没有任何安

  • Python基于execjs运行js过程解析

    execjs 使用 有了selenium+Chrome Headless 加载页面为什么还要用execjs来运行js? selenium+Chrome Headless 必然是爬虫的一大利器,可是缺点依然存在, 性能问题不可忽视. 但这构不成舍弃它而不用的理由.我认为舍弃包括Chrome Headless.PhantomJS在内的无头浏览器的原因主要有以下几点: 1. 页面结构改变.弹窗(一些网站的页面结构经常无规则改变), 影响代码的健壮性. 2. 无头浏览器的应用场景主要是一些模拟登陆账号密

  • 理解Python中的With语句

    有一些任务,可能事先需要设置,事后做清理工作.对于这种场景,Python的with语句提供了一种非常方便的处理方式.一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄. Without the with statement, one would write something along the lines of: 如果不用with语句,代码如下: file = open("/tmp/foo.txt") data = file.read() file.

  • 用python记录运行pid,并在需要时kill掉它们的实例

    我在跑爬虫程序的时候,由于爬虫程序的等待目标服务器返回数据的时间很长,而cpu占用很低,所以经常挂着代理一跑就跑好几百个.但是爬虫程序通常是写了死循环,或直到分配给该进程的任务都跑完才退出的.如果我们想中途结束掉这些任务,是没办法手工一个一个kill掉的.那么该如何结束这些进程呢? 我的方法就是在运行爬虫进程时,记录该进程的Pid,然后在需要手动结束时,再用语句kill掉它们. for i in {1..100} do nohup python NetEase_comms_proxy.py >

  • python中while循环语句用法简单实例

    本文实例讲述了python中while循环语句用法.分享给大家供大家参考.具体如下: number = 1 while number < 20: print(number) number += 1 运行结果如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 希望本文所述对大家的Python程序设计有所帮助.

  • python中list循环语句用法实例

    本文实例讲述了python中list循环语句用法.分享给大家供大家参考.具体用法分析如下: Python 的强大特性之一就是其对 list 的解析,它提供一种紧凑的方法,可以通过对 list 中的每个元素应用一个函数,从而将一个 list 映射为另一个 list. 实例 复制代码 代码如下: a = ['cat', 'window', 'defenestrate'] for x in a:      print x, len(x) for x in [1, 2, 3]: print x,    

  • Python MySQLdb 执行sql语句时的参数传递方式

    使用MySQLdb连接数据库执行sql语句时,有以下几种传递参数的方法. 1.不传递参数 conn = MySQLdb.connect(user="root",passwd="123456",host="192.168.101.23",db="cmdb") orange_id = 98 sql = "select * from orange where id=%s" % orange_id cursor =

  • python如何写try语句

    python的try语句有两种风格 一是处理异常(try/except/else) 二是无论是否发生异常都将执行最后的代码(try/finally) try/except/else风格 try:     <语句> #运行的代码 except <名字>:     <语句> #如果在try部份引发了'name'异常 except <名字>,<数据>:     <语句> #如果引发了'name'异常,获得附加的数据 else:     &l

  • Python中的With语句的使用及原理

    总览 在Python中,您需要通过打开文件来访问文件.您可以使用 open()函数来实现.Open 返回一个文件对象,该文件对象具有用于获取有关已打开文件的信息和对其进行操作的方法和属性. with 语句 使用 "with" 语句,使代码简洁,处理异常也更优雅. "with语句通过封装常用的准备工作和清除任务来简化异常处理." 此外,它将自动关闭文件.with 语句提供了一种确保始终使用清理的方法. 如果没有 with 语句,我们将编写如下内容: file = op

随机推荐