两个库搞定python中引用javascript代码块/文件

在一些特殊的python应用场景下需要逆向执行javascript代码块或者.js文件,比如:爬虫的时候下载下来的html页面中包含你要逆向执行的js代码块。

file

【阅读全文】

在python编程中提供了两个非标准库js2py与PyExecJS都能实现在python中运行代码块的效果的。

1、js2py的使用过程

js2py适用于js代码少量情况,如果用于很长的混淆的js代码,转译过来的大概率会报错。

# 使用pip的方式安装: pip install js2py

执行js代码块的方式来运行代码

import js2py  # 导入js2py处理库

# 创建javascript代码块的python字符串

js_code = '''
      var date = new Date().getTime()   
'''

调用 js2py.eval_js函数执行javascript代码块

result = js2py.eval_js(js_code)

print(result)

# 1648984478464

执行js文件的方式来运行代码

# 创建一个javascript文件hello_world.js
#
# function hello_world(name){
# 	return name;
# }

hello_world = js2py.eval_js(open('./hello_world.js', 'r', encoding='utf-8').read())

print(hello_world("公众号:Python 集中营"))

# 我是 公众号:Python 集中营

2、PyExecJS的使用过程

通过python代码去执行JavaScript代码的库,依赖于javascript运行环境,最好可以装个node.js,相比于js2py,他可以运行多一点的js代码。

使用pip的方式安装: pip install PyExecJS

import execjs  # 导入execjs处理库

print(execjs.get().name)  # 获取javascript的默认执行环境
# Node.js (V8)

我的windows上面默认的js环境是nodejs,当然是用操作系统默认的js环境也是OK的。

执行一下刚刚上面创建的hello_world.js文件。

# 需要先将即将执行的代码块编译一下
compile_code = execjs.compile(open('./hello_world.js', 'r', encoding='utf-8').read())

# 使用编译后的代码块call函数调用js文件中的hello_world函数
result = compile_code.call('hello_world','python')

print(result)

# python

还可以使用eval函数进行调用

result = compile_code.eval("hello_world('python')")

print(result)
# python

当然,也可以像js2py一样直接执行js代码块的。

result = execjs.eval('""+ new Date().getTime()')

print(result)
# 1648986998002

注意:使用execjs执行javascript代码块时,如果使用中文会出现乱码的情况不能自动转换编码。并且在中/英文混用的时候会出现报错的情况。

file

【往期精彩】

python实现excel数据与mysql数据库互通有无!

python 实现超快窗口截图,自动获取当前活动窗口并展示截图...

怎么用python做一个解压缩小工具,以后再也不用下载各种格式的解压缩软件了...

python中最简单的turtle绘图:奥运五环!

知识汇总:python办公自动化应该学习哪些内容?

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:两个库搞定python中引用javascript代码块/文件 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • python 自定义异常/raise关键字抛出异常

    在编程过程中合理的使用异常可以使得程序正常的执行。有直接抛出异常的形式,也能通过捕获异常加入异常时的业务逻辑处理。 【阅读全文】 创建自定义异常类案例 class MyException(Exception): def __init__(self, msg): ”’ :param msg: 异常信息 ”’ self.msg = msg 使用raise关键…

    2023年4月2日
    00
  • 英语没学好到底能不能做coder,别再纠结了先学起来

    其实,编程中用到的英文词汇并不多,经常用到的写着写着就记住了。大多数时候只有给变量或者对象起名的时候才会去Google上查。于是,我将经常在coding中用到的词汇总结了一下。 【阅读全文】 A字母开头的英文词汇 Appearance外表assert/assertion异常add添加append附加args/argument参数attribute属性 B字母…

    2023年4月2日
    00
  • python 如何在多层循环中使用break/continue

    关于break/continue这两个关键字在平常的使用过程中一直比较迷糊。好不容易理解了吧,过段时间不使用好像忘记了什么。这个问题也是很多初学者比较容易提及的问题。 【阅读全文】 先通过一个简单的单层循环来了解一下这两个关键字的使用。 print(‘=============单层循环使用=============’) for n in range(10):…

    2023年4月2日
    00
  • python多线程同步售票系统解决思路

    解决问题场景:假如剩余1000张电影票需要售卖,同时有10家电影App来售卖这1000张电影票。主要的逻辑实现过程是什么,要求使用python技术栈进行解题? 【阅读全文】 1、分析过程 分析:主要信息点是10家App平台同时售卖1000张电影票。此时,可以使用10个python线程来作为10家App平台,同时售卖必须保证电影票数量的同步,比如A平台卖出了一…

    2023年4月2日
    00
  • 自动化办公:手机号码提取器,使用正则表达式轻松提取文本文件中的手机号码

    关于手机号码的提取,其实真正有用的部分就是re模块提供的正则表达式。使用正则表达式就能轻松地匹配到手机号码,由于功能比较简单这次并没有采用UI界面的方式来实现该功能。 【阅读全文】 第一步:写一个控制台输入函数。 path = input(‘请输入需要提取手机号码的文件路径(.txt):n’) 第二步:读取包含手机号码的文本文件。 def read_text…

    2023年4月2日
    00
  • tabulate结合loguru打印出美观又方便查找的日志记录!

    在开发过程中经常碰到在本地环境无法完成联调测试的情况,必须到统一的联机环境对接其他系统测试。往往是出现了BUG难以查找数据记录及时定位到错误出现的位置。 【阅读全文】 面对这种情况可能情况可能是一个简单的BUG导致的,但是定位问题往往就需要很长的时间。在python编程中推荐非标准库tabulate,它可以将程序运行过程中产生的数据记录格式化的打印出来很方便…

    Python开发 2023年4月2日
    00
  • python打包技巧:彻底解决pyinstaller打包exe文件太大的问题

    之前也写过很多的小工具,粉丝朋友们应该都知道在本公众号内回复任意关键字即可获取以往的工具源码或是exe可执行应用。 【阅读全文】 因为以往发过的小工具基本都是几十MB大小的exe应用,也就没有在意exe太大给大家带来的困扰,今天就准备来彻底的解决一下这个问题。 其实每次打包的exe的应用过大无非就是两个方面的语言因导致的,一是我们在开发的代码的过程中为了简便…

    2023年4月2日
    00
  • 用python做一个文本翻译器,自动将中文翻译成英文,超方便的

    translate非标准库是python中可以实现对多种语言进行互相翻译的库,使用时只需要设置目标语言(比如:中文、英文)后,会自动将原始文本翻译成我们需要的目标语言。 【阅读全文】 使用pip的方式安装translate非标准库。 pip install translate 准备好之后进行代码编写过程,实现的方式也比较常规。 输入需要翻译的文本文件路径。 …

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部