前言

各位小伙伴,大家好,这次咱们来说一下关于爬虫方向的一个知识,Python如何执行js,快来看看吧!!!

为什么要引出Python执行js这个问题?

都说术业有专攻,每个语言也都有自己的长处和短处。在爬虫方向,Python绝对是扛把子,近几年随着AI的火爆,需要各种各样的数据,所以,爬虫需求也跟着水涨船高起来。

我们做爬虫的当然是爬的爽,但是估计人家后台在骂街,毕竟谁都不希望自己的数据被弄走,所以后台反爬技术也在快速提升,一攻一防就这么在拉锯着。

现在为了防止反爬,前端使用的反爬技术比较多的是js代码混淆。

什么是js代码混淆?

正常代码

我们现在看一段js代码,代码逻辑很简单,就是拼接时间返回。

functionformatDate(now) {

var now = new Date(1230999938);

var year=now.getFullYear();

var month=now.getMonth()+1;

var date=now.getDate();

var hour=now.getHours();

var minute=now.getMinutes();

var second=now.getSeconds();

returnyear+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;

}

运行一下这段代码,如下图所示。

混淆代码

我随便找了个在线的js代码混淆网站。

js代码

functionformatDate(mz1){var KkkGDiH2=new window["\x44\x61\x74\x65"](1230999938);var tsk3=KkkGDiH2['\x67\x65\x74\x46\x75\x6c\x6c\x59\x65\x61\x72']();var YMreyP4=KkkGDiH2['\x67\x65\x74\x4d\x6f\x6e\x74\x68']()+1;var Ozo5=KkkGDiH2['\x67\x65\x74\x44\x61\x74\x65']();var QMYEc$eD6=KkkGDiH2['\x67\x65\x74\x48\x6f\x75\x72\x73']();var JfXVV_Akq7=KkkGDiH2['\x67\x65\x74\x4d\x69\x6e\x75\x74\x65\x73']();var $mP8=KkkGDiH2['\x67\x65\x74\x53\x65\x63\x6f\x6e\x64\x73']();returntsk3+"\x2d"+YMreyP4+"\x2d"+Ozo5+" "+QMYEc$eD6+"\x3a"+JfXVV_Akq7+"\x3a"+$mP8

上面这个真的不是我瞎写的,混淆之后就是这样子的,不信看图片。

可能我们会有个疑问,js代码都成这玩意了,还能执行吗? 答案是肯定的。即使js代码非常乱,但还是可以执行的,结果跟上面的是一样的。

这就造成了一个问题,我们在做爬虫时,如果需要,多多少少可能都要研究一下js代码,然后进行js解密一下,但是,但是,要是代码都混淆成了这了,还怎么解?

一点逻辑都看不通了,基本上不可用Python按照js逻辑重写出来了...

很巧,小编也是卡在这里...后来我就想,要是Python能执行js代码就好了,不用管函数里面的逻辑了,只拿函数返回值就好了。

Python第三方包Execjs

可能是吧,不止我一个人遇到了这种情况,所以大佬们就开发出来这种工具包,用于执行js代码。

安装

在安装之前,需要有node环境,这里就不举栗子了,下一步下一步就好了。

pip3 install PyExecJS

Execjs用法超级简单的,几行代码。

执行js

注:由于上述js代码会生成window对象,并不能直接执行成功,需要额外的其他辅助,这里简单的举一下其他例子。

正常js代码

functionadd(x, y) {

returnx + y;

}

Python执行js代码

import execjs

ctx = execjs.compile("""

functionadd(x, y) {

returnx + y;

}

""")

print(ctx.call("add", 1, 2))

执行结果如下图所示:

混淆js代码

functionadd(bi1,Pl$2){returnbi1+Pl$2}

Python执行混淆js代码

import execjs

ctx = execjs.compile("""

functionadd(bi1,Pl$2){returnbi1+Pl$2}

""")

print(ctx.call("add", 1, 2))

执行结果如下图所示:

可以看到,即使再混淆,只要执行的是js代码,都是没啥问题的。

上述拼接时间返回的js混淆代码也是可以执行的,但是它多了一个window对象,需要node安装jsdom才行,由于网络设置有问题,实在是下载不了举例子,实在是抱歉。

或者使用selenium打开游览器执行再返回也行,当然,速度更慢。

结尾

反爬和爬虫一直都是一攻一防,以后可能这种情况会更严重,但是在Python庞大的生态中总能找到不错的方案。人生苦短,Python当歌。

【编辑推荐】

【责任编辑:华轩 TEL:(010)68476606】

点赞 0

js如何运行python代码_手把手教你如何使用Python执行js代码相关推荐

  1. python量化策略代码_手把手教你用三行python 代码做一个动量策略「量化投资系列」...

    动量策略是右侧交易里最常见的,背后的逻辑是就现在涨的,后市还会涨,动量具有惯性的意思. 首先加载原始数据,我们用天的收盘价即可,按统一转为收益率.因为点位本身不重要,我们最后只关心变化率. 以沪深30 ...

  2. python量化投资代码_手把手教你用三行python 代码做一个动量策略「量化投资系列」...

    动量策略是右侧交易里最常见的,背后的逻辑是就现在涨的,后市还会涨,动量具有惯性的意思. 首先加载原始数据,我们用天的收盘价即可,按统一转为收益率.因为点位本身不重要,我们最后只关心变化率. 以沪深30 ...

  3. 软件_手把手教vscode配置c++,python开发环境

    原创:软件_手把手教vscode配置c++,python开发环境 之前主用Python作为项目开发语言,将项目迁移到arm边缘盒子上后发现arm的cpu不给力,软件速度低于预期,所以计划将部分程序改为 ...

  4. python k线合成_手把手教你写一个Python版的K线合成函数

    手把手教你写一个Python版的K线合成函数 在编写.使用策略时,经常会使用一些不常用的K线周期数据.然而交易所.数据源又没有提供这些周期的数据.只能通过使用已有周期的数据进行合成.合成算法已经有一个 ...

  5. 掌握python编程语言tensorflow_手把手教你eclipse集成Python语言+Tensorflow环境

    本文主要向大家介绍了手把手教你eclipse集成Python语言+Tensorflow环境,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 1.安装Eclipse 百度Eclips ...

  6. python执行js脚本安全吗_手把手教你如何使用Python执行js代码

    前言 各位小伙伴,大家好,这次咱们来说一下关于爬虫方向的一个知识,Python如何执行js,快来看看吧!!! 为什么要引出Python执行js这个问题? 都说术业有专攻,每个语言也都有自己的长处和短处 ...

  7. python数据预测代码_手把手教你用Python玩转时序数据,从采样、预测到聚类丨代码...

    原标题:手把手教你用Python玩转时序数据,从采样.预测到聚类丨代码 原作 Arnaud Zinflou 郭一璞 编译 时序数据,也就是时间序列的数据. 像股票价格.每日天气.体重变化这一类,都是时 ...

  8. 50行python代码打造一款女友监控器_手把手教你50行Python代码,给心目中的女友微博秒评论...

    突然觉得,现在发微博已经成为当代青年的潮流,或分享自拍美照,或分享美食美景,小编的女朋友也不例外,平时爱分享一些我俩生活的趣事. 但是她最近开始给我抱怨我从来不给她的微博评论,我作为骨灰级" ...

  9. python卸载_手把手教Python环境安装

    Anaconda集成环境 Python3.7 如果是linux环境包括MacOs,系统环境中会默认安装python2.7. 尽量量不不要卸载linux环境中的默认python环境,直接安装Python ...

最新文章

  1. mysql数据库事务_MySQL数据库的事务管理
  2. vue上传文件到php,vue+axios+php如何实现上传文件功能?,formdata上传文件附加参数...
  3. Oracle中查询、禁用、启用、删除表外键
  4. Android学习笔记(1)
  5. 前端学习(563):干掉block重叠margin重叠
  6. [UE4]性能优化指南(程序向)
  7. 2013年11月份我国网络不良与垃圾短信息分析报告
  8. 默认权限umask、文件系统权限、特殊权限
  9. 在Android关机中插入脚本
  10. HDOJ 2013 蟠桃记
  11. VRay Next(4.0) for SketchUp之BIG分析图制作教程
  12. 打卡小程序源码,微信小程序源码下载
  13. 获取两个指定数之间的随机数(万能公式)
  14. 在线文档 - 腾讯文档
  15. 解决lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 网络连接不通
  16. Keystone的安装及其配置
  17. 数组的几种表示的方式
  18. 在创建jsp页面之后保存时提示错误,并提示以UTF-8格式进行保存。
  19. 计算机中遇到的问题英语,电脑故障英语对话
  20. 51单片机之数码管静态显示

热门文章

  1. 关于视频变速播放软件
  2. [BZOJ1922]大陆争霸-最短路略微扩展
  3. UltraEdit小众用法
  4. Python学习笔记:Python基础使用
  5. Mybatis之开启二级缓存
  6. 哈工大信息内容安全实验
  7. 【鼠标§鼠标右键菜单清理四招】
  8. MATLAB马尔科夫链预测法
  9. Wordpress采集支持中英Wordpress采集
  10. 部署Kubernetes kube-apiserver启动失败