由于工作后期偏向架构方向,很久没做单独的爬取操作,居然有点忘记js的逆向过程了,研究了一晚上终于有了点头绪,记录下来免得以后忘记。

下面内容以对美团店铺抓取时需要破解的_token加密为准。

1. chrome浏览器的使用--js断点调试

以美团为例,点进美团的美食页面,使用f12打开开发者工具。清空当前产生的各种请求,然后点击下一页,会发现重新生成大量的请求。切换到xhr页面观察是否通过ajax进行的请求,我们发现getPoiList开头的请求返回了我们需要的结果。

然而观察该请求所携带的参数我们发现,大多数参数是可以通过找规律的办法得到解决的,但_token这个参数是被加密过得,我们无法获取到它的值,这就需要通过反编译来解决问题。

通常情况下,我们可以全局搜索_token来看是否能找到对其进行加密的js,但有的时候,数据的整个键值对都是被加密过得(参考知乎登陆的加密),我们无法通过键找到对应值得加密算法。这时候可以尝试搜索请求url中的关键部分来定位加密部位。

我们可以看到,根据getPoiList我们找到了_token的的值为d,d又是通过Rohr_Opt.reload(p)方法进行加密得到想要的结果的。

我们在这个位置打上断点,再次执行下一页,当执行到reload时,我们进入找到了_token的加密js,打上断点继续观察就可以看到加密的整个流程了,如果你是js高手,可以尝试解密js,然后用python重写,这样结果的性能会好一些,但我这里使用了python直接调用js的方法进行加密。

以上就是js加密的关键部位了。到这里chrome的断点调试完成。

2. python实现js代码的调用

通常来讲,使用execjs或者pyV8是比较主流的python调用js模块,但因为我两者都安装失败了,暂时没法使用,因此使用selenium的execute_script方法进行js调用。首先,我们将其改造成一个html文件rohr.html,并且为其添加一个可被外界调用的返回函数ssss,如下:

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>Checkbox</title>
<script type="text/javascript">
var Rohr_Opt = new Object;
Rohr_Opt.Flag = 100007;
Rohr_Opt.LogVal = "rohrdata";(function() {    var _$_543c = ["\x75\x6E\x64\x65\x66\x69\x6E\x65\x64",
.................
])})();function ssss(url){return Rohr_Opt.reload(url);
}
</script>
</head>
<body></body>
</html>复制代码

使用python对其进行调用:

from selenium import webdriver
import osfile_path = 'file:///' + os.path.abspath('rohr.html')
print(file_path)
browser = webdriver.Chrome()
browser.get(url=file_path)
jv = "https://bj.meituan.com/meishi/api/poi/getPoiList?cityName=北京&cateId=0&areaId=0&sort=&dinnerCountAttrId=&page=3&userId=&uuid=7dc6d913fda1472c8d42.1552289338.1.0.0&platform=1&partner=126&originUrl=https://bj.meituan.com/meishi/pn3/&riskLevel=1&optimusCode=1"
data = browser.execute_script('return ssss()', jv)   # 这里使用execute_script调用了ssss函数,并传入参数jv
print(data)    # data即我们加密后的_token
browser.close()复制代码

第一行是rohr.html文件的绝对路径,第二行即我们所需要的_token的加密结果

转载于:https://juejin.im/post/5c893dd36fb9a049a712adc5

js逆向解析技巧--selenium相关推荐

  1. JS逆向解析---某知名小说网站内容加密

    该小说网站的全部内容都是经过一个JS的加密,要想爬取这个网站那么将其内容解析是不可避免的,本文将讲解如何对其进行JS的逆向解析.网站:shuqi 随便点开一本书,打开浏览器自带的抓包工具: 点击第一个 ...

  2. Python爬虫入门之淘宝JS逆向解析请求参数Sign加密(一)

    关于JS逆向,相信这是很多小伙伴学习爬虫的一个门槛之一,如果你是初学者入门,开发一款爬虫,要以思路为主,代码是其次的 这里所说的思路指两个方面,一,分析观察目标站点思路,二,代码开发思路,二者缺一不可 ...

  3. 淘宝直播h5页面js逆向解析

    最近公司需要爬取直播商品的一些数据,其中就有淘宝直播. 分析淘宝直播app 很显然,直接搞难度很大,想到找h5页面,半天没找见:然后搞淘宝直播app,先抓包,请求尝试: import requests ...

  4. Python爬虫从入门到精通:(43)JS逆向:完美世界RAS逆向_Python涛哥

    完美世界有很多游戏,比较出名的就是诛仙.魔兽世界等.完美今天就来看下完美世界登陆的逆向分析! JS逆向解析 登陆的时候这里有个点击认证.没关系,完美先忽略它,直接点击.完美主要探讨密码的逆向方式. 抓 ...

  5. JS逆向之巨量创意signature签名

    文章目录 目标网站 接口分析 定位_signature生成位置 补环境还原js 编码测试 往期逆向文章推荐: JS逆向之百度翻译 JS逆向解析之有道翻译 JS逆向之企名科技 JS逆向之人口流动态势 j ...

  6. JS逆向之巨量星图sign签名

    文章目录 1. 目标网站 2. 初步抓包分析 3. 定位加密参数生成位置 4. 编码测试 往期逆向文章推荐: JS逆向之百度翻译 JS逆向解析之有道翻译 JS逆向之企名科技 JS逆向之人口流动态势 j ...

  7. Scrapy实战案例--抓取股票数据并存入SQL数据库(JS逆向)

    目标网址:http://webapi.cninfo.com.cn/#/marketDataZhishu 之前在这篇文章里面对该网站的JS进行了一个逆向的解析:JS逆向解析案例 接下来我们来创建一个Sc ...

  8. js逆向系列:解决网页版微博登陆的js加密(2020.9.1最新版)

    一.前言 博主最近沉迷js逆向,向各网站开刀,于是决定拿比较经典的微博登陆js加密来作为案例给大家讲解一下. 二.分析过程 我们先从这个登录界面进行调试.先随便填写账号密码,找到登陆的请求接口. 很容 ...

  9. 送书 | 用啥selenium!JS逆向不香吗?

    大家好!我是啃书君 正所谓条条道路通罗马,上次我们使用了Selenium自动化工具来爬取网易云的音乐评论,Selenium自动化工具可以驱动浏览器执行特定的动作,获得浏览器当前呈现的页面的源代码,做到 ...

最新文章

  1. Leetcode 207.课程表
  2. 哪些业务流程和RPA更匹配?
  3. C/C++ static和const关键字的作用
  4. Python之一行代码
  5. 鸿蒙密视视频加密软件,鸿蒙密视视频加密软件
  6. dev 居中_div居中 div水平居中代码 | 帮助信息-动天数据
  7. 查看防火墙状态并关闭防火墙
  8. 【362】python 正则表达式
  9. 关于Java中被static修饰的静态变量 (类变量)
  10. JAVA数组批量设值(初始化)的办法
  11. max导unity注意及解决
  12. tensorflow.js基本使用 图标识别(八)
  13. linux 解决内存不足问题(设置虚拟内存)
  14. 泰坦尼克号数据_数据分析实战3:泰坦尼克号生存分析
  15. Java 使用pio生成word
  16. sort()与拉姆达表达式
  17. 苏州数字孪生工厂3D模型,三维可视化建模,三维虚拟仿真交互模型
  18. 计算机病毒的基本结构
  19. python爬虫:批量刷新网页
  20. Google Sheet 学习笔记

热门文章

  1. 网络编程之 进程间的通信之管道的使用
  2. 爆赞!excel导入mysql并生成数据表
  3. 第 18 章 访问者模式
  4. py脚本实现用例执行html报告,pytest文档7-pytest-html生成html报告
  5. python中两个文件如何互相传参_argparse模块如何在jupyter notebook中用于传参?
  6. python编写个人信息_1、纯python编写学生信息管理系统
  7. 快速入门 Pinia 状态管理库
  8. 彻底理解js是单线程
  9. redux-saga使用
  10. java入门第六天课程_Java基础学习第六天 小游戏