找回密码
 会员注册
查看: 11|回复: 0

python如何执行js代码,学会这几个方法就够了

[复制链接]

4

主题

0

回帖

13

积分

新手上路

积分
13
发表于 2024-9-7 12:27:20 | 显示全部楼层 |阅读模式
一、前言Python和JavaScript是两种广泛应用于Web开发的重要编程语言,在日常的Web开发和Web数据处理中,我们经常需要使用这两种语言。例如,在Web端爬虫过程中,我们可能会遇到需要解密网页源代码的情况,这时就需要一层一层剥离关键的JS代码,并使用Python执行这段代码以获取关键信息。那么,Python如何调用JS呢?有哪些方式呢?二、楔子以一段简单的JS脚本(add.js)为例,计算两个数的和。//JavaScript示例代码functionadd(a,b){returna+b;}1234三、常见的Python调用JavaScript的方式a.使用nodejs命令使用Python的os.popen或subprocess执行node命令,执行JS脚本。首先,确保本地已经安装了Node.js环境:>node-vv18.16.112修改JS脚本,新增一个导出函数init,方便内部函数被调用://JavaScript示例代码functionadd(a,b){returna+b;}//新增一个导出函数(node方式)module.exports.init=function(arg1,arg2){//调用函数,并返回console.log(add(arg1,arg2));};//调用init方法并传递参数module.exports.init(parseInt(process.argv[3]),parseInt(process.argv[4]));12345678910111213使用subprocess模拟node.js命令行调用并获取结果:importsubprocessfromloguruimportloggerif__name__=='__main__':#使用subprocess模块执行Node.js命令result=subprocess.run(["node","add.js","init","3","5"],capture_output=True,text=True)#输出执行结果logger.info(f"Node.js执行结果:{result.stdout.strip()}")123456789b.PyExecJS方法PyExecJS是使用最多的一种方式,底层实现方式是本地JS环境下运行JS代码,支持的JS环境包含:Node.js、PhantomJS等。首先第一步安装:pipinstallPyExecJS==1.5.11安装完成之后,即可以使用其调用JS脚本:#!-*-conding=:UTF-8-*-fromloguruimportloggerimportexecjs#定义JavaScript代码#js_code="""#functionadd(a,b){#returna+b;#}#"""if__name__=='__main__':#Python示例代码js_code=open("add.js","r",encoding="utf-8").read()#使用PyExecJS执行JavaScript代码ctx=execjs.compile(js_code)#调用JavaScript函数,并计算结果result=ctx.call("add",3,5)logger.info(f"调用JavaScript函数的结果为:{result}")12345678910111213141516171819202122c.通过Web浏览器DrissionPage方式这款工具既能控制浏览器,也能收发数据包,甚至能把两者合而为一。首先安装依赖库:pipinstallDrissionPage==4.0.4.221执行JS脚本:#!-*-conding=:UTF-8-*-fromDrissionPageimportChromiumPageif__name__=='__main__':page=ChromiumPage()#打开网页page.get("about:blank")#定义JavaScript代码js_code="""functionadd(a,b){returna+b;}"""#在当前页面上执行JavaScript代码,并传递参数result=page.run_js(js_code+"returnadd(8,5)")#输出执行结果print("JavaScript执行结果:",result)#JavaScript执行结果:13page.quit()123456789101112131415161718192021222324playwright方式Playwright是一个用于Web测试和自动化的框架。首先安装依赖库:pipinstallplaywright==1.43.0playwrightinstall#安装驱动123执行JS脚本:#!-*-conding=:UTF-8-*-fromplaywright.sync_apiimportsync_playwrightif__name__=='__main__':#启动Playwrightwithsync_playwright()asp:#启动Chromium浏览器browser=p.chromium.launch(headless=False)#创建新页面page=browser.new_page()#打开网页page.goto("https://baidu.com")#定义JavaScript代码js_code="""functionadd(a,b){returna+b;}"""page.add_script_tag(content=js_code)#使用page.add_script_tag()方法将其注入到页面中,然后在页面上执行它#在当前页面上执行JavaScript代码result=page.evaluate("add(5,7)")#输出执行结果print("JavaScript执行结果:",result)#JavaScript执行结果:12#关闭浏览器browser.close()123456789101112131415161718192021222324252627282930selenium方式Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器和phantomJS无界面浏览器。首先安装依赖库:pipinstallselenium==4.20.01执行JS脚本:#!-*-conding=:UTF-8-*-fromseleniumimportwebdriver#启动Chrome浏览器driver=webdriver.Chrome()#打开网页driver.get("about:blank")#定义JavaScript代码js_code="""functionadd(a,b){returna+b;}"""#在当前页面上执行JavaScript代码,并传递参数result=driver.execute_script(js_code+"returnadd(3,5)")#输出执行结果print("JavaScript执行结果:",result)#关闭浏览器driver.quit()12345678910111213141516171819202122232425类似的自动化工具还有很多,如果只是单纯的调用JS脚本,属实有点杀鸡用牛刀的赶jio。d.Js2Py方式Js2Py作为一个纯Python实现的JS解释器,可以完全脱离JS环境,直接将JS代码转换为Python代码。首先第一步安装:pipinstallJs2Py==0.741调用JS脚本:#!-*-conding=:UTF-8-*-fromjs2pyimporteval_jsif__name__=='__main__':#JavaScript示例代码js_code="""functionadd(a,b){returna+b;}"""#执行JavaScript代码result=eval_js(js_code+"add(3,5)")#输出执行结果print("JavaScript执行结果:",result)1234567891011121314151617e.py-mini-racer方式PyMiniRacer是一个Python模块,它提供了一个轻量级、快速且安全的方式来执行JavaScript代码,无需借助完整的V8引擎或Node.js环境。不知道佬们用的多不多,据说速度比PyExecJS快不少。直接安装:pipinstallpy_mini_racer==0.6.01运行:#!-*-conding=:UTF-8-*-frompy_mini_racerimportMiniRacerif__name__=='__main__':#创建PyMiniRacer实例ctx=MiniRacer()js_code="""functionadd(a,b){returna+b;}"""#在JavaScript环境中执行代码并传递参数ctx.eval(js_code)result=ctx.call("add",3,5)#输出执行结果print("JavaScript执行结果:",result)#JavaScript执行结果:8123456789101112131415161718小结Python中执行和调用JavaScript代码有多种方法:PyExecJS、Js2Py、py-mini-racer提供了在Python中执行JavaScript代码的简单方法。Selenium、DrissionPage和Playwright则更适用于与Web页面进行交互和执行JavaScript。subprocess模块则为与Node.js进行交互提供了便捷的方式。每种工具都有其适用的场景和局限性,选择合适的工具取决于具体的需求和项目要求。最后今天的分享就到这里。如果觉得不错,点赞,关注安排起来吧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 23:03 , Processed in 0.585728 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表