打开斗鱼登录界面:按F12输入错误账号密码,查看提交的请求是哪个:查看FormData:可以看到password变成了一串啥,应该是加密了,现在从调用栈进去,最好点击文件名里包含login的进去:进去之后搜索password:在上面这里打上断点。
Form Data 解决了,再来看看 Request Headers 里的 token 参数,由于它存在于请求头里,所以我们可以通过 Hook 的方式来查找其生成的地方:这里我们也可以直接搜索 token、setRequestHeader 之类的关键字,很容易在 common.js 里找到,当我们点击登陆,会有一个 csrfSave 的请求,返回的 data 值,经过 encrypt 方法加密后就是登陆请求头的 token 了。
字符串拼接反爬原理为了加大JS的阅读难度和调试难度,字符串拼接构成可执行的JS方法(document,avigator,window)是比较常见的策略。比如常用的全局搜索变量名在这种情况下就会失效,同时很多新手会觉得很难而放弃爬取(眼睛都会看花)。
跟进到 _0x7f9865 函数中,直接把算法扣下来:我们来分析下这是什么算法,倒着看,_0x70f89f、_0x1d4342 之类的是一些十进制数,keyStr.charAt 就是获取 keyStr 字符串特定位置的字符值,最后拼接起来:keyStr 就是源码中的 this,其值如下,长度为 65 位:这一串完全符合 Base64 编码索引表的特征,包含大写字母、小写字母、数字、加号和斜杠,64 位,还有一个填充字符,Base64 编码的基本流程如下,例如编码 Hello 字符串:首先,将 Hello 转换为 ASCII 码,得到 72 101 108 108 111;
如果一个页面大部分是script标签构成,80%以上是webpack打包。然后重写 window 数组的 push 方法为 webpackJsonpCallback,也就是说 window.push 其实执行的是 webpackJsonpCallback,window.push接收三个参数,第一个参数是模块的ID,第二个参数是 一个数组或者对象,里面定义大量的函数,第三个参数是要调用的函数。
定义了一个变量 open 保留原始 XMLHttpRequest.open 方法,然后重写 XMLHttpRequest.open 方法,判断如果 rnd 字符串值在 URL 里首次出现的位置不为 -1,即 URL 里包含 analysis字符串,则执行 debugger 语句,会立即断下。
正所谓条条道路通罗马,上次我们使用了Selenium自动化工具来爬取网易云的音乐评论,Selenium自动化工具可以驱动浏览器执行特定的动作,获得浏览器当前呈现的页面的源代码,做到可见即可爬,但需要等网页完全加载完,也就是JavaScript完全渲染出来才可以获取到当前的网页源代码,这样的爬取效率太低了、爬取速度太慢了。
日常工作中,经常需要对数据表格进行逆透视处理,举个例子,我们希望从左边表格的样式,转换成右边表格的样式结果因为通过右边的数据,使用数据透视表,轻松得到左边的结果但是,如果从左边的结果,还原到右边的数据源效果,就比较难,这个过程,通常被称为逆透视工作中,这样的场景非常多1、传统方法