追不上的不追、不属于自己的不要、挽留不住的不留、生活哪有那么复杂。

1、前言

一、目标网站

aHR0cDovLzYwLjE3My4yNTQuMTI2Lw==

二、明确分析目标

打开网页,随意点击一个小区。

网页重开一个详情页面,如下图所示。反复点击同一个小区,会发现详情页url每次都是变化的,变化的位置已用红框标记。

所以,文章分析的重点就是这一串数字的生成逻辑。

2、生成逻辑分析

一、查找点击事件

打开开发者模式,刷新页面,找到页面请求的接口,在响应中搜索小区名称,定位到如下图位置。

每个a标签下都有onclick,id属性,点击触发的事件名称为reurl,并且传入了this,但这里暂时还看不出this表示什么。

全局搜索reurl,如下图,40行打上断点。

点击小区名称,js正常断下。选中recode(),可以看到生成的结果就是需要的那一串数字。

继续选中参数,可以看到传入的参数即为a标签下id属性值。

二、分析recode()

点击进入recode函数,如下图。

整个逻辑很简单,就是调用了nscaler()和SetObjNum()两个函数,分别生成对应的值。

我们要做的,无非就是抠出对应的js代码,然后执行。

这里需要留意b的值,初次生成是提取了页面id=“iptstamp”标签中value的属性值,我的理解就是获取页面的加载时间。

从接口响应中直接搜索iptstamp可以查到。

放在代码中,可以从页面copy出来作为固定值,也可以从页面动态获取,但是不能自己凭空构造一个13位的时间戳。

三、抠出js代码

之前的文章中js比较简单都是转化成python实现,这里直接抠出对应的函数。

nscaler()部分,注意去除$.

function nscaler(a) {    var b = "";    each(a, function (i, e) {        switch (e) {        case "0":            b += "0";            break;        case "1":            b += "2";            break;        case "2":            b += "5";            break;        case "3":            b += "8";            break;        case "4":            b += "6";            break;        case "5":            b += "1";            break;        case "6":            b += "3";            break;        case "7":            b += "4";            break;        case "8":            b += "9";            break;        case "9":            b += "7";            break        }    });    return b    }

而nscaler()内部又调用了each()

接着抠出each(),里面有很多判断可以忽略,我这里直接全部copy下来了,懒得去调试分析。

function each ( obj, callback, args ) {    var name,        i = 0,        length = obj.length,        isObj = false;    if ( args ) {        if ( isObj ) {            for ( name in obj ) {                if ( callback.apply( obj[ name ], args ) === false ) {                    break;                }            }        } else {            for ( ; i < length; ) {                if ( callback.apply( obj[ i++ ], args ) === false ) {                    break;                }            }        }    // A special, fast, case for the most common use of each    } else {        if ( isObj ) {            for ( name in obj ) {                if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) {                    break;                }            }        } else {            for ( ; i < length; ) {                if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {                    break;                }            }        }    }    return obj;}

接着就是SetObjNum()

function SetObjNum(n) {    var a = "";    for (var i = 0; i < n; i++)        a += Math.floor(Math.random() * 10);    return a    }

接着就是入口函数了,首次生成b的值,作为参数value传递进来。

function recode(a,value) {    var n = nscaler(a);    var c = SetObjNum(a.length);    var d = SetObjNum(a.length);    n = parseInt(n) + parseInt(d);    var b = value;    var b = nscaler(b.toString());    return c + "-" + n + "-" + d + "-" + b    }

3、代码展示

测试代码如下!

代码中没有动态获取页面的加载时间,直接从页面上复制了一个。

小区id也是随机取了一个,作为测试。

返回结果如下

ok,生成的数字串可以正常获取详情页面信息。简单的一个网站,主要是抠出对应的js代码,注意缺啥补啥就行。

对你有帮助,请扫码关注!感谢!

公众号:逆向旅行

微信号:fzcoder888888

定期分享Python进阶技术,爬虫

str4表示client_ver

js获取a标签的value值_js逆向 | 某住房网跳转链接生成逻辑分析相关推荐

  1. js获取select标签选中的值

    var obj = document.getElementByIdx_x("testSelect"); //定位id var index = obj.selectedIndex; ...

  2. js 获取图片url的Blob值并预览

    js 获取图片url的Blob值并预览 1)使用 XMLHttpRequest 对象获取图片url的Blob值 参考:https://www.cnblogs.com/tujia/p/6483255.h ...

  3. 编辑器js获取浏览器高度和宽度值(转)

    js获取浏览器高度和宽度值 网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight 网页可见区域宽: docume ...

  4. php 获取js对象的属性值,js获取对象,数组所有属性键值(key)和对应值(value)的方法示例...

    本文实例讲述了js获取对象,数组所有属性键值(key)和对应值(value)的方法.分享给大家供大家参考,具体如下: var values=function(object) { var values ...

  5. 原生js获取指定标签的父元素

    js是没有这个函数的,js只有.parentNode获取上一级的父元素.如果想用js获取指定标签的祖先元素,不想使用jq.下面是封装的函数,初学者自己写的,实测有效. //js获取指定标签的父元素,获 ...

  6. 面试题-js获取cookie中存储的值?

    js获取cookie中存储的值? 1.cookie是浏览器提供的一种机制,它将document 对象的cookie属性提供给JavaScript.可以由JavaScript对其进行控制,而并不是Jav ...

  7. js获取li标签中子标签属性

    js获取li标签中子标签属性 1.获取并修改li标签下子标签的classname var ul=document.getElementById("ul的id").getElemen ...

  8. js获取php页面session的值,在html页面中取得session中的值的方法

    1.首先呢session的key-value都是存在server的,浏览器HTML页面是没有办法直接取得session中的值,只有在html里能通过js拿到jesessionid之类的东西. 1.1. ...

  9. js获取单选框里面的值

    rt,如果想获取单选框里面的值,该如何获取呢. <script> window.onload = function(){ //通过名字获取 getElementsByName //var ...

最新文章

  1. 计算机CAD作文,【2人回答】职校课堂里我最喜欢上CAD课600字作文-3D溜溜网
  2. java内存分配和回收策略
  3. 机器学习常用算法(LDA,CNN,LR)原理简述
  4. 关于C#调用Excel的资源占用问题
  5. python的模块和类_Python模块和类.md
  6. BigInteger用法-Java大数据存储、运算
  7. android 解决Error:This Gradle plugin requires a newer IDE able to request IDE model level 3. For Andro
  8. leetcode面试题 02.08. 环路检测
  9. 逆向课程第二讲,寻找main入口点
  10. SSM框架:MyBatis
  11. 关于win10 pagefile.sys文件的解读及占用C盘空间太大的处理
  12. python 视频清晰度_python识别视频黑屏或者低清晰度
  13. MainMenu.xib
  14. 11.4王者荣耀服务器维护中,4月11日全服不停机更新公告
  15. 牛客网在线编程——二维数组中的查找
  16. 《The Wiley Handbook of Human Computer Interaction》翻译(冰山一角)
  17. Mozilla Firefox 全版本下载
  18. 简单保护动物网页制作stu-works.com学生保护动物网页设计作品HTML 濒危动物静态网页成品下载
  19. 如何在靠tiktok在三个月内快速赚到20w的?实现人生逆转
  20. 被囊群优化算法(TSA)详解,附源码,直接可以

热门文章

  1. 【Python】下载所有 XKCD 漫画
  2. [极客大挑战 2019]BuyFlag
  3. 人生价值观的培养和建立
  4. 六逻辑层次 职业规划案例_我如何在六个月内改变职业并找到了一名开发人员...
  5. 数组复制速度 System.arraycopy()clone() Arrays.copyof() for()探究
  6. java switch case多个条件_JAVA基础程序设计之判断与循环
  7. zlib.h: 没有那个文件或目录
  8. Django中的路由分发
  9. 大数据技术周报第 003 期
  10. Python多任务——进程