zoukankan      html  css  js  c++  java
  • python中运行js代码 js2py

    python中运行js代码 js2py

     安装

    pip install js2py

    js2py的简单用法

    import js2py
    
    js = """
    function add(a, b) {
        return a + b
    }
    """
    add = js2py.eval_js(js)
    r = add(1, 2) + 3
    print(r)
    
    >>>6

    进阶用法

    js = """
    var a = 10; 
    function f(x) {
        return x*x
    };
    """
    context = js2py.EvalJs()
    context.execute(js)
    
    print(context.a)    # 获取值   10
    print(context.f('9', 0,))   # 获取函数并执行   81
    
    print(context.f.toString()) # 获取函数  function f(x) { [python code] }
    print(context.f.constructor)   # 获取函数   'function Function() { [python code] }'
    
    # 定制属性
    context.foo = [1,2,3]
    context.foo.push(4)
    print(context.foo.to_list())    # [1, 2, 3, 4]

    运行结果

    6
    10
    81
    function f(x) { [python code] }
    'function Function() { [python code] }'
    [1, 2, 3, 4]

    数据类型转换标

    Boolean -> bool
    String -> unicode
    Number -> float (or int/long if whole number)
    undefined -> None
    null -> None
    OTHER -> JsObjectWrapper

    JsObjectWrapper支持:getitem,getattr,setitem,setattr,repr和
    call。此外,如果要将其
    转换为内置python类型,它具有to _list和to _dict方法 。

    js = js2py.eval_js('d={a: 1, b: 2}')
    print(js)   # {'a': 1, 'b': 2}
    
    print(type(js)) # <class 'js2py.base.JsObjectWrapper'>  #该类型为字典的存储
    
    print(js.a) # 1 # 取值方法
    
    print(js['a']) # 1  # 取值方法
    
    js.b = 20   # 修改属性方法
    print(js)   # {'a': 1, 'b': 20}
    js ['c'] = 30   # 设置属性方法
    print(js)   # {'a': 1, 'b': 20, 'c': 30}
    print(js.to_dict()) #{'a': 1, 'b': 20, 'c': 30} # 该方法转化为字典方法
    print(js2py.translate_js('var $ = 5'))
    # from js2py.pyjs import *
    # # setting scope
    # var = Scope( JS_BUILTINS )
    # set_global_object(var)
    #
    # # Code follows:
    # var.registers(['$'])
    # var.put('$', Js(5.0))

    最后,Js2Py还支持从中导入任何Python代码的JavaScript
    使用'pyimport'语句:

    x = """
    pyimport requests;
    var result = requests.get("https://www.baidu.com/");
    
    console.log(result.text.length)
    """
    print(js2py.eval_js(x))

    调用示例

    #!/usr/bin/env python3.6
    # -*- coding:utf-8 -*-
    # @Author: Irving Shi
    
    
    import json
    import requests
    import js2py
    
    from bs4 import BeautifulSoup
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
    }
    
    
    def get_company(key):
        res = requests.get("https://aiqicha.baidu.com/s?q=" + key, headers=headers)
        soup = BeautifulSoup(res.text, features="lxml")
        tag = soup.find_all("script")[2].decode_contents()
        context = js2py.EvalJs()
        context.execute(tag)
        res = context.window.pageData.result.resultList[0]
        return res.to_dict()
    
    
    res = get_company("91360000158304717T")
    for i in res.items():
        print(i)
  • 相关阅读:
    LeetCode 275. H-Index II
    LeetCode 274. H-Index
    LeetCode Gray Code
    LeetCode 260. Single Number III
    LeetCode Word Pattern
    LeetCode Nim Game
    LeetCode 128. Longest Consecutive Sequence
    LeetCode 208. Implement Trie (Prefix Tree)
    LeetCode 130. Surrounded Regions
    LeetCode 200. Number of Islands
  • 原文地址:https://www.cnblogs.com/shizhengwen/p/14096830.html
Copyright © 2011-2022 走看看