pythonexecjs详解_Python基于execjs运行js过程解析

pythonexecjs详解_Python基于execjs运行js过程解析

2023年6月29日发(作者:)

pythonexecjs详解_Python基于execjs运⾏js过程解析execjs 使⽤有了selenium+Chrome Headless 加载页⾯为什么还要⽤execjs来运⾏js?selenium+Chrome Headless 必然是爬⾍的⼀⼤利器,可是缺点依然存在, 性能问题不可忽视。但这构不成舍弃它⽽不⽤的理由。我认为舍弃包括Chrome Headless、PhantomJS在内的⽆头浏览器的原因主要有以下⼏点:1. 页⾯结构改变、弹窗(⼀些⽹站的页⾯结构经常⽆规则改变), 影响代码的健壮性。2. ⽆头浏览器的应⽤场景主要是⼀些模拟登陆账号密码加密的场景, 爬⾍全程使⽤⽆头浏览器, 影响性能和效率, 浪费资源。3. 通过js加密的⽹站, 可以看得到加密过程,可以拿得到加密源码。1. 安装pip install PyExecJS # 需要注意, 包的名称:PyExecJS2. 简单使⽤import ("new Date")返回值为: 2018-04-04T12:53:("()")返回值为:80 # 需要注意的是返回值是13位, 区别于python的()需要注意的是: 个别的JS语句, ⽤execjs返回的结果跟浏览器环境返回的结果是有区别的, 以下是浏览器环境返回的结果浏览器环境运⾏的结果3. 调⽤函数# 实际⽣产中处理的js有⼏百⼏千⾏, 不⽅便贴上来。来看⼀下源码中给的例⼦:ctx = e("""function add(x, y) {return x + y;}""")("add", 1, 2) # 第⼀个参数 “add” 为JS函数名的字符串, 后边依次为实参返回值:3execjs的⽤法⾮常简单, 下边来看⼀下执⾏JS的环境, 以及性能:4. 执⾏JS的环境# 1. 在windows上不需要其他的依赖便可运⾏execjs, 也可以调⽤其他的JS环境# windows 默认的执⾏JS的环境().name返回值: JScript# 作者本⼈的windows上装有 , 所以返回值不同().name返回值: (V8)#2. 在ubuntu下需要安装执⾏JS环境依赖, 作者的环境为().name返回值: PhantomJS#3. 源码中给出, 可执⾏execjs的环境:PyV8 = "PyV8"Node = "Node"JavaScriptCore = "JavaScriptCore"SpiderMonkey = "SpiderMonkey"JScript = "JScript"PhantomJS = "PhantomJS"SlimerJS = "SlimerJS"Nashorn = "Nashorn"注1:作者之前在ubuntu环境下执⾏execjs碰见过因为没有环境⽽报错,因时间久远,⽆法肯定。 现在环境齐全, 报错⽆法复原,如有读者出现错误, 请留⾔, 多谢!更新注1:经过朋友⽼冀的指正(在此感谢),在ubuntu环境下, 没有JS环境会报错:Could not find an available JavaScript runtime. 由此可见, execjs在ubuntu需要安装JS环境 。具体的JS环境需根据具体的需求安装, 切不可超过以上8种。5.环境切换# 1. 通过n["EXECJS_RUNTIME"] = "Node"().("1 + 2")# 2. 通过 切换jscript = (e_t) # runtime_names 便是execjs源码中给出的执⾏环境的。e_ xxx必须在上⼀节 #3中取("1 + 2")注: 在切换环境时, 当环境不存在不会报错, 会使⽤默认的环境。 另外需要注意的是, 两种⽅式的区别6. 简易性能分析# 作者只简单试了三种, 在windows下import execjsimport osimport time# 先⽤n["EXECJS_RUNTIME"] = "JScript"print ().nametime1 = ()for i in range(100):("new Date")print () - time1# 切换环境 使⽤n["EXECJS_RUNTIME"] = "Node"print ().nametime2 = ()for l in range(100):("new Date")print () - time2# 打印的结果为: (V8)27.501999855# 在ubuntu下试的是PhantoJS , 结果竟然⾼达 30+ S此注释来⾃execjs作者:PyExecJS的缺点之⼀就是性能。PyExecJS通过⽂本传递JavaScript运⾏时,并且速度很慢。另⼀个缺点是它不完全⽀持运⾏时特定的功能。对于某些⽤例,PyV8可能是更好的选择。总注:使⽤execjs的难点并不是在execjs这个库, ⽽是解析JS的过程, 因为没有浏览器的环境, 没有加密源码的依赖。从成千上万⾏的JS中择出想要的内容,可能是⼀段孤零零的JS函数,也可能是从⼏个JS⽂件去找出各⾃找出⼀段JS代码, 并可以通过execjs顺利执⾏,这并⾮易事。 需要慢慢积累经验。 ⼀旦掌握, 便可以提⾼爬⾍的效率, 以及代码的健壮性, 节省资源!以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

发布者:admin,转转请注明出处:http://www.yc00.com/news/1687981400a63376.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信