爬虫作业时寻找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来进行同样的操作。