当前位置: 首页 > 知识库问答 >
问题:

javascript - 在Python中运行js为什么会报错?

巫马瀚漠
2024-06-19

在Python中运行js报错,在js和Python中都打印过相关类型和值了,都没问题,这是怎么回事啊?
报错和异常为:
image.png

 # 检查响应状态码if response.status_code == 200:    try:        # 获取响应内容的UTF-8解码字符串        response_text = str(response.content.decode('utf-8'))        print(type(response_text))        decrypted_text = execjs.compile(open('./decrypt.js', 'r', encoding='utf-8').read()).call('decrypt',                                                                                                 response_text)        # 打印解密后的文本        print("Decrypted response:", decrypted_text)     except execjs.ProgramError as e:        print(f"JavaScript error: {e}")    except FileNotFoundError:        print("JavaScript file 'decrypt.js' not found.")    except UnicodeDecodeError as e:        print(f"Encoding error: {e}")    except ValueError as e:        print(f"Value error: {e}")    except Exception as e:        print(f"An unexpected error occurred: {e}")else:    print(f"Failed to fetch data: {response.status_code}")
// @charset "UTF-8"; const CryptoJs = require('crypto-js'); function decrypt(t) {    // return typeof t.replace(/\s+/g, '')    // t = t.replace(/\s+/g, '')    var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : ""        , r = 'rewin-swhysc1234'        , i = CryptoJs.enc.Utf8.parse(r)        , o = CryptoJs.AES.decrypt(t, i, {        mode: CryptoJs.mode.ECB,        padding: CryptoJs.pad.Pkcs7    });    return CryptoJs.enc.Utf8.stringify(o).toString()} 

我首先对参数进行了确认,确认参数为正确格式,且值为正常的。

    // return typeof t.replace(/\s+/g, '')    // t = t.replace(/\s+/g, '')    // 判断t是否为空    // if (t === '' || t === null || t === undefined) {    //     return 't为空'    // }

其次关于编码问题
我在js顶端加了
// @charset "UTF-8";
在Python中用的

# 获取响应内容的UTF-8解码字符串response_text = str(response.content.decode('utf-8'))print(type(response_text))decrypted_text = execjs.compile(open('./decrypt.js', 'r', encoding='utf-8').read()).call('decrypt',response_text)

共有1个答案

寿意远
2024-06-19

Python中运行JavaScript代码通常是通过使用第三方库,如execjs,该库可以允许你编译和运行JavaScript代码。当在Python中运行JavaScript代码时遇到错误,可能有多种原因。

根据你提供的代码和错误截图,有几个潜在的问题点可以检查:

  1. JavaScript环境依赖execjs在背后使用了一个JavaScript运行环境(例如Node.js或V8),确保你的系统中已经安装了相应的运行环境,并且execjs能够找到它。
  2. JavaScript代码错误:尽管你尝试通过打印和检查参数t的类型来排除错误,但可能还有其他的JavaScript代码问题。例如,在解密函数中,如果输入的t不是有效的AES加密字符串,或者密钥r不正确,或者加密参数(如模式或填充)不匹配,解密过程可能会失败。
  3. Python与JavaScript交互问题:当你从Python传递字符串到JavaScript时,需要确保字符串的编码和格式是JavaScript函数所期望的。在你的Python代码中,你已经尝试使用UTF-8编码来解码响应内容,这是正确的做法。
  4. 异常处理:虽然你已经有一些异常处理,但可能还有其他未捕获的异常或错误。例如,如果execjs在尝试编译或运行JavaScript代码时遇到问题,可能会抛出其他类型的异常。
  5. execjs.ProgramError:这个异常通常表明JavaScript代码在执行时遇到了错误。错误信息应该包含在异常对象中,但截图没有显示完整的错误信息。你需要查看完整的错误消息来确定JavaScript代码中具体哪个部分出错了。

为了解决这个问题,你可以尝试以下步骤:

  • 检查完整的错误消息:在except execjs.ProgramError as e块中,打印出完整的错误消息e,这将提供有关JavaScript中发生错误的更多详细信息。
  • 验证JavaScript代码:单独运行JavaScript代码(例如,在Node.js环境中),并确保它可以成功解密你提供的输入。
  • 检查环境配置:确保你的Python环境配置正确,并且execjs能够找到并正确使用JavaScript运行时。
  • 审查加密/解密过程:确保加密和解密使用的密钥、模式和填充方式都是匹配的。

最后,由于你提供的信息有限,特别是错误截图没有显示完整的错误消息,所以这些只是一些可能的解决步骤。解决这个问题的关键在于查看完整的错误消息,并根据错误消息中的具体信息来确定问题的根源。

 类似资料:
  • 我在不同的地方对此进行了研究,包括stackoverflow,但我找不到一个对我有帮助的答案。 我使用的是Windows 7,64位,Atom用于64位Windows。我在目录C:\Users\Austin\Documents\Python中安装了Python 3.6.1。当我试图在Atom中运行一个简单的脚本来测试Python时,它说 “python”不被识别为内部或外部命令、可操作程序或批处理

  • 在Node.js的主页上,清楚地写着- Node.js是一个基于Chrome的V8 JavaScript引擎构建的JavaScript运行时。 我试图理解什么是“构建的运行时”。经过一些谷歌搜索,我对此有了一些想法。 请检查我的理解,如果我弄错了,请在任何地方纠正我。如果我把整件事都搞错了,请详细解释。 程序运行时是一个特定的持续时间,程序在其中执行。 我们知道,诺德。js附带预编译的二进制程序,

  • 如果我在windows的命令行上执行我的python脚本,它运行得很好,但是当我在bash上运行它时,它只是一直在等待另一行,但是如果我尝试其他命令,比如,它会显示:

  • 如图,代码来自官方文档的reference,版本也是1.0.0-rc.13

  • 为什么这3行代码一运行网页就会崩溃 完整html

  • 因为问题已经被问了很多次了,但我不能理解清楚。 根据提供的答案,JavaScript运行时意味着执行JavaScript代码的地方。 现在Nodejs的定义,它是一个异步的javascript运行时,这是否意味着在Nodejs内部执行javascript? 另外,javascript runtime environment,是指执行javascript代码的环境或机器设置吗? 对不起,我重复了我的