js 逆向,美拍视频下载_javajs 逆向,美拍视频下载_java_02



简介

美拍网页版热门视频:

https://www.meipai.com/medias/hot

下载每一页的视频,但由于视频链接是加密了的,需要 js 逆向解码,才可得到链接。


文件获取

关注公众号“木下学Python”,回复关键字“美拍视频下载”获取源代码。


链接构造

js 逆向,美拍视频下载_java_03


可看到每一页的 url 类似这样,就 page= 字段不同:

https://www.meipai.com/home/hot_timeline?page=3&count=12

page=1:第一页

page=2:第二页

以此类推


视频链接

js 逆向,美拍视频下载_java_04


切换到旁边的 Preview 选项卡,可以看到 json 数据,其中的 vedio 键所对的那一串乱码就是视频链接

我们需要解码,获得原来的链接,然后才能下载

接下来一步一步来看怎么解码


js 逆向

右键查看元素,可以看到 data-video 所对的值是一串乱码,而 src 所对的值是视频播放的的链接

js 逆向,美拍视频下载_java_05


随便点开一个视频,还可以看到 data-vedio 和 src 字段

js 逆向,美拍视频下载_java_06


切换到 Source 选项卡,2 号是这个网站所有的文件,我们就需要在 3 里面搜索找到可疑的解码的 js 代码;

搜索的是关键词,关键词是不确定的,要想到和要解码的数据有关,比如说 vedio:xxxx,xxxx是要解码的数据,那可以先尝试搜索 vedio 看能不能搜索得到相应的代码,不能的话可以试试 decode,encode,因为和解码编码有关;

在这个问题中,我们视频链接是 .mp4,试着在 2 从上往下一个一个 js 文件的搜索 mp4,下图搜索到了但看代码不太像 

js 逆向,美拍视频下载_java_07


继续找下一个 js 文件,在一个 js 文件中找到了一个带有关键字 decodeMp4 的字段,这个函数可能就是解码的函数了,两个绿色断点中间的部分

js 逆向,美拍视频下载_java_08


在这行代码行数那里打断点,按 F5 刷新,运行到这里会停止,网页呈灰色状态,然后看看这个 decodeMp4 函数里,有没有调用了其他函数,这里发现了一个 atob 函数,把鼠标悬停在上面可以看到调用的地方,点击

js 逆向,美拍视频下载_java_09


点击后看到了这个函数,它最后返回了一个值,好了现在解码函数都找到了,需要把他们扣出来结合 Python使用

js 逆向,美拍视频下载_java_10


扣代码

在这个decodeMp4 函数中可以看到它有 5 个函数1,2,3,4,5

js 逆向,美拍视频下载_java_11


先只把这些函数扣出来,像这样,最好像上面1,2,3,4,5按顺序放,调用的时候就方便清楚一点,大致读代码它们是从上往下调用关系,然后先调试好在用 python 调用

具体的扣的代码,详细看源代码吧,在调试时,如果按原来的扣下来直接运行,总会报一些错:

window。。。:这是 js 在前端显示的语法,删掉

某个变量没定义:可能在扣函数时,原 js 代码中在这个函数前后可能有定义,但我们只扣了函数,没扣变量,也扣下来

this。。。:因为在原 js 代码中是,函数内部调用函数内部,扣出来后要改成调用的函数名

js 逆向,美拍视频下载_java_12


没有了错误后,接下来用 python 调用了,python 执行 js 代码,使用了 execjs 库执行。

js 逆向,美拍视频下载_java_13

.compile:编译打开的 js 字符串

.call():第一个参数为调用 js 的函数名,第二个为此函数的参数


Final

最后扣好了后,写爬虫下载视频,详细见源码,小编只下了 2个 视频作为结果作为参考

js 逆向,美拍视频下载_java_14

最后这样就完成了一次 js 逆向之旅,要是有帮助,扫描下方二维码,小编在那里等你哦