js逆向不用扣代码系列(1)—豆瓣搜索window.__DATA__解密

标签: 爬虫之js逆向

本文仅供学习交流使用,请勿用于商业用途或不正当行为
如果侵犯到贵公司的隐私或权益,请联系我立即删除

网址: https://search.douban.com/book/subject_search?search_text=python&cat=1001

1. 经过抓包分析,数据经过加密,加密后的数据在网页源代码中,即window.DATA

在这里插入图片描述

2.谷歌开发者工具全局搜索window.DATA

在这里插入图片描述

3.打开console,输入Mt,测试浏览器中是否有Mt这个全局对象

在这里插入图片描述
可以看到没有任何提示,可以判定无此全局对象

4.对该js文件改写,使window对象有Mt这个属性,并保存到本地,命名为douban.js

在这里插入图片描述

5.fiddler设置自动响应, 重新访问https://search.douban.com/book/subject_search?search_text=python&cat=1001,替换该js文件

在这里插入图片描述

6.重新打开控制台,输入Mt,测试浏览器中是否有Mt这个全局对象

在这里插入图片描述
可以看出,Mt在浏览器中已经是全局变量

7.selenium访问,并用flask做服务端接口
# -*- coding:utf-8 -*-

from selenium import webdriver
from flask import Flask, request
from urllib import parse


options = webdriver.ChromeOptions()
options.add_argument('--headless')  # 开启无界面模式
options.add_argument('--disable-gpu')  # 禁用显卡
driver = webdriver.Chrome(options=options, executable_path='chromedriver')
driver.get('https://search.douban.com/book/subject_search?search_text=python&cat=1001')

app = Flask(__name__)
app.debug = False


def get_decrypt_data(encrypt_data):
    js = """
        var res = Mt.dispatch("{}");
        return JSON.stringify(res);
    """.format(encrypt_data)
    decrypt_data = driver.execute_script(js)
    return decrypt_data


@app.route('/get_decrypt_data', methods=['GET'])
def douban():
    encrypt_data = parse.unquote(request.args.get("encrypt_data"))
    decrypt_data = get_decrypt_data(encrypt_data)
    return decrypt_data


if __name__ == '__main__':
    app.run()
8.爬虫测试效果
# -*- coding:utf-8 -*-
import requests
import re
from urllib import parse

requests.packages.urllib3.disable_warnings()


for book_name in ['东野圭吾', 'python', 'java', '电影', '篮球', '足球']:
    url = 'https://search.douban.com/book/subject_search?search_text={}&cat=1001'.format(book_name)
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
    }
    resp = requests.get(url=url, headers=headers, verify=False)
    encrypt_data = re.findall('window.__DATA__ = "(.+?)"', resp.text)[0]
    encrypt_data = parse.quote(encrypt_data)

    decrypt_data = requests.get('http://127.0.0.1:5000/get_decrypt_data?encrypt_data={}'.format(encrypt_data)).text
    print(decrypt_data)

在这里插入图片描述
可以看到,数据可以获取

9.总结

优点:只要能够定位到加密位置,可以在短时间内**,避免抠代码的繁琐耗时
缺点:针对检测selenium的网站,该方法无法有效运行,比如抖音分享页signature的**,该方法不适用

针对抖音分享页signature,仍可不用抠代码方式快速**,下次分享

版权声明:本文为weixin_42156283原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42156283/article/details/106731989

智能推荐

JS逆向|对某加密字符串的一次解密,有时候并不需要搜索引擎

声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! 这篇文章寻找加密的参数,咸鱼哥已经写过了,请看 这里。只所以再写是因为那时候水平不够,对某个加密的字符串始终不知道怎么解密,也是看了别人的文章才知道有那么个库。要不然还真的无从下手,后来发现其实好简单的。让我来慢慢分析吧。 一、抓包分析,其接口地址在这里: 它的加密参数如下: 二、全局搜索 cid=,定...

Linux笔记【010】| Linux的运行模式与网卡设置

一.Linux的运行模式 单用户、多用户、单任务、多任务。 单用户:是指操作系统一般只能由一个人同时进行登录; 多用户:是指操作系统可以允许多个人同时进行登录; 单任务:是指操作系统只能同时处理一个任务; 多任务:是指操作系统可以同时处理多个任务; Windows属于单用户、多任务的操作系统;(mstsc是windows系统的远程工具) Linux属于多用户、多任务的操作系统; 在Linux中存在...

用navicat连接数据库报错:1130-host ... is not allowed to connect to this MySql server如何处理

    遇到这个问题首先到mysql所在的服务器上用连接进行处理   连接服务器: mysql -u root -p      查看当前所有数据库:show databases;      进入mysql数据库:use mysql;      查看mysql数据库中所有的表:show tables;      查看user表中的数据:select Host, User,Password from ...

登峰造极 题解

一、题目: 二、思路: 首先这题一看就有打暴力的冲动。flood-fill搞一搞,拿到了70分。 那么我们来讲一讲正解。 首先我们将网格图转化成线性图后按高度从大到小排序。然后我们考虑这样两个点\(i,j\),其中i的高度大于j的高度。我们记i能走到的所有点为集合\(S_i\),记j能走到的所有点为集合\(S_j\),那么如果\(S_i\)与\(S_j\)有交集,那么j就一定不可能是“...

Oracle 基础查询梳理

1、简单查询     1.1、简介         简单查询是指查询一张数据表中的所有数据行内容。     1.2、语法     1.3 、实例       &...

猜你喜欢

webpack基本使用

1.webpack下载 (首先先初始化一下package。json ==> npm init -y) npm i webpack webpack-cli -D 2.在根目录下配置webpack.config.js 3.在package.json文件里添加脚本 4.实现自动打包功能 npm i webpack-dev-server -D 修改脚本如3 5.使用html-webpack-plug...

页面加载性能之优化LCP

影响LCP的四个因素如下: 较慢的服务器响应时间 渲染阻塞的js和css 较慢的资源加载时间 客户端渲染 较慢的服务器响应时间 浏览器获取文档的时间越长,用户看到页面的时间也会越长。较快的服务器响应时间,可以直接改善每一个页面加载相关的指标,包括LCP。 可以使用 TTFB(Time to First Byte) 来测试服务器响应时间,你可以通过以下手段来优化 TTFB 这个指标。 优化服务器 使...

8、搭建本地数据库

一、首先下载docket 它是一套环境,与phpstudy类似,当进行数据库连接时,一定要保证两个环境不能冲突,不然连接不上,接口冲突,使用到的命令如下:(目的就是连接数据库验证数据落地) 二、下载sourcetree(将项目推送到git上) a.首先我们需要将我们的项目引入进来 b.使用我们的phpstorm编写我们的测试用例,编写完成打开我们的sourcetree,在文件状态下能查看到我们所做...

微信小程序开发〖一〗开发登录页面

登录页面展示 登录成功页面 未登录页面 通过点击登录按钮进行微信登陆 前端页面 我用了微信小程序的UI组件 iviewweapp 和ColourUI 的css库,需要提前去官网下载并按照指引下载到项目中,不会来call我,我一一指导~~ wxml wxjs .json .wxss...

html初学

常用标签的练习 标题标签<h1~h6> 1.通常情况下h1到h6是从大到小排列,不过并不是因为h1本身比h6大,而是浏览器默认样式中将h1标签默认渲染的更大,而h1和h6大小本身无法比较。使用时更直观的感受是,h1为一级标题,其他标题依次排列,表现为层级关系。且h1到h6标签仅有6个,没有h7…的标签,在使用时可以照常显示但没有意义所以禁用 2.标题显示时,浏览器会默认在...