爬虫作业时寻找post的地址和js分析

1、寻找post的地址

  1.1 使用chrome抓包工具

    进入`https://www.renren.com`

    检查网页源代码

    

     定位到form标签下

    (1)在form表单中寻找action对应的url地址,注意:不是所有的网站的action都有url地址,有的对应的是js

    (2)post的数据是input标签中name属性的值作为键,真正的用户名或密码作为值的字典,post的url地址就是action对应的url地址(有的时候是,有的时候不是,需要注意)。

    (3)当form表单的action没有url地址,这时候需要用Network进行抓包获取真正的post的url地址

      1>输入用户名和密码(可以输入错误的)到表单中,抓取发送pose的url

         记住要勾选住Preserve log这样能够留下所有的请求,包括上一次的数据

          1>>当输入错误的数据登录时,浏览器回向登录地址发送请求,这时通过抓包,可以拿到真正的post的url地址

           2>>在抓取到的数据中,对比是哪个网址接受的formdata数据,则该url为目标url

          3>>找到url后,需要分析formdata的参数组成,通过多次的错误请求,对比参数变化

2、人人网案例分析(网页版)

   如果取模拟操作一些网站,首先可以尝试去获取一些相关参数,当相关参数由js动态生成,且url请求中也存在这些相关参数,可尝试取抓取网页版。

  1.进入人人网

    `http://www.renren.com/SysHome.do`

  2.输入错误的账号和密码(记住勾选住Preserve log)

    请求至少两次,观察生成的相同url请求

    (1)相同页面为

        

     (2)分析相同页面的url

      第一个的url为:`http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=202044220269`

      第二个的url为:`http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=202044228203`

      uniqueTimestamp时间戳在变化,待分析

    (3)分析相同url请求的参数

       第一个的FormData

        

       第二个的FormData

        

      第三个FormData

         

      email:三个都没有变化

      icode:验证码,未输入,所以无

      origURL:请求的url,未变,非相关参数

      domain:请求的域名,未变,非相关参数

      key_id:未知,但是都相同,非相关参数

      password:输入的密码都是123,但是生成的加密密码都一样,属于非动态加密的方式

      rkey:未变,属性未知,待分析

    (3)url的时间戳uniqueTimestamp分析

       输入`ctrl+shift+F`找到全局搜索,输入uniqueTimestamp,寻找相关内容

       

         uniqueTimestamp动态生成,由具体值组成。

        至于怎么获得,需要懂一些js语法。

        获取存在一定难度,我们可以看看手机版,是否有这些参数。

    (4)FormData的参数分析

      <1>password加密分析

        <<1>>输入`ctrl+shift+F`找到全局搜索,输入password,寻找相关js

        <<2>>那么多js,如何定位?我们的干什么?这就是目的,通过目的,拟化关键字,在搜索的匹配结果中,寻找待login字样的js

          

           

         <<3>>也可以通过在Sources中查找,Sources存放有服务器返回的所有文件

            我们的目的是找到在登录页面`https://www.renren.com/SysHome.do`中的加密密码的js算法,所有在该网页域名文件夹下找到相关内容。比如login.js。

            

         <<4>>找到加密password的js文件后,便可以逆向分析出加密的方法,变能够用python实现算法加密,得到加密的password值

       <2>rkey的来源

        <<1>>输入`ctrl+shift+F`找到全局搜索,输入password,寻找相关文件

           

         <<2>>分析login.js文件

          输入`ctrl+F`进行文件内搜索,

          

           找到rkey,通过分析发现rkey是属于n的属性,n又是有e提取出来的,e通过`url: "http://login.renren.com/ajax/getEncryptKey"`获取

          在Network中通过抓包,找到

          

          发现它返回一个json文件

          

           这个json文件中有对应的rkey值,然后我们对比FormData中的rkey值,发现是相等的(因为我抓取的文件多次刷新过,所有会不相同)

          通过请求这个地址,我们便可以得到这个rkey值

3、人人网案例分析(手机版)

  1.请求手机版

    

     可以发现,只返回两个数据,一个是rkey,用于获取rkey值,还有一个是clog,用于发送post请求登录。

    数据相比网页版会清爽很多。

  2.FormData分析

    相关参数只有password和rKey

    rKey可以请求:`http://activity.renren.com/livecell/rKey`网址获得,无非是在请求之前多实现一步,而不用考虑其如何生成的。

    2.1 password分析

      (1)点击Elements,通过元素选择器选择“登录”,打开右侧的Event Listeners,勾选Ancestors all和Framework listeners,可以发现

        

        click下对应的监听到的文件,即为相应的js文件,点击进入 ,然后格式化查看(坐下叫有个{},点击即可格式化查看)

        找到文件中有password处理的内容

        

        可以看到password被处理的过程,通过python代码复现,来得到加密值。

    2.2 Console的使用

      将“ $(".password").value”复制到Console中

      

       可以发现,获取到的是输入的密码的值

      Console可以验证js中的代码,当看不懂时,可以粘贴到里面来进行验证

    2.3 js的调试

      在行号中可以通过点击添加断点

      

       添加完断点后,点击登录,既可进入调试状态,点击下一步按钮,程序运行,断点对应的部分,右边状态栏会高亮。

      Scope下的Local下相应变化的值会呈现出来

      鼠标移动到相应的函数下,会弹出一个对话框,是该函数所在的js文件。

4、总结

  4.1 抓包,寻找登录的url地址

    (1)勾选Preserve log按钮,防止页面跳转找不到url

    (2)寻找post数据,确定参数

      <1>参数不会变,直接用,比如密码不是动态加密的时候

      <2>参数会变

        <<1>>参数在当前的响应中

        <<2>>通过js生成

  4.2 定位到想要的js

    (1)选择会出发js事件的按钮,点击event listener,找到js的位置

    (2)通过chrome中的search all file来搜索url中关键字

    (3)添加断点的方式来查看js的操作,通过python来进行同样的操作。

      

猜你喜欢

转载自www.cnblogs.com/nuochengze/p/12892289.html