本来昨天就要发文章的了,因为以前的pdd文章被投诉了,删除了,影响心情的同时也不敢乱发文章了,因此就暂时歇了一天,也改了另一个网站,就是今天的物流网站。若是你们某天看不到我发文了,估计我也是被举报完了,到时想要看的能够去个人GitHub上看。python
献上GitHub:https://github.com/SergioJune...git
对你有用的话,但愿能点个star,谢谢github
今天网站:https://www.17track.net/zh-cnchrome
这是个物流网站,就是查询物流的,今天要作的就是根据单号查询物流,废话很少说,直接肝。数组
这里咱们查询一个单号,也能够批量查询,参数都差很少,长度变了而已,因此演示就只查询一个单号。浏览器
打开了开发者工具你慢慢找,很容易就找到这个请求。微信
须要的数据就是这个快递轨迹,看到上面的 formdata 好像没什么问题,挺容易的,这还有什么比这爽的,赶忙使用 python 请求一波。cookie
结果返回了这个,果真没有想象中的那么简单,估计又是在cookie上面作了反爬,那咱们就加上cookie试试app
果不其然,真的成功了,通过个人测试,发现须要的cookie 键是 ,那接下来就是看怎么生成的了。ide
上面知道了是哪一个 cookie 反爬的,最简单的寻找就是全局搜索这个参数来看看有没有线索。
果真有,并且文件名字和请求的路径名有几分类似,按经验来讲八九不离十就是这个了,点击进去看看。
格式化就能够看到上图的代码,一眼看去,这代码很像我以前这篇请求网页时,怎么给我返回了一段 JavaScript 代码,都是前面一个大数组,而后在一个地方把这个数组的顺序,而后经过一个函数来将这个数组的元素来解密成正常的函数名。接着就是检测你有没有展开代码之类的,展开了就会内存爆破,具体的均可以看看我刚说的这篇文章。
有了上次的经验,我就直接在浏览器上格式化直接调试了,不把代码复制到本地运行了。
了解了这么多,就是开始调试了,因为咱们须要找的 cookie肯定是在这个文件内生成,可是还不知道在哪生成,因此须要调试下。
涉及到 cookie, 须要先把浏览器的cookie清除才行
点击 clear site data 便可清除,不放心的就点多几回。
接着就是在调试栏的右边的 watch 添加咱们监听的变量,咱们须要监听 cookie 的变化,因此点击 + 号添加 document.cookie 便可。
接着打断点的位置就在咱们搜索到 cookie 值的位置上添加便可
接下来就是刷新网页,等待程序跳到断点的位置
这时看到 cookie 的值是空的,在 application 上看的 cookie 也是空的
接着就是按下断点执行下一行语句,不会的先自行百度,这个调试确定得学会的,这里就很少说了,或者我过两天有时间写篇 chrome 调试供你们参考下。
如今就是漫长的调试寻找加密的时间了,通过个人查找,很快就能够看到这个了。
下面的那句明显就是设置 cookie 的,能够本身复制语句到 console 上运行一次
这样子就找到生成位置了,如今就是查看右边的调用栈,查看是在哪一个地方开始执行的,看看他们之间的调用关系。
在上面的cookie 生成能够看到是一个数组,而后使用 join() 来链接起来的
咱们能够观察这个数组在哪里生成和赋值的,也经过调用栈能够看到参数生成地方是在这里
咱们能够先把这个语句所在的函数扣出来
发现里面的函数有些 document 对象,又由于这个是主函数,因此能够修剪下,把那些判断语句和捕捉异常的都给去掉,就是在原文件中看判断语句的真假运行的哪一个语句就保留,而正常运行不会产生异常,因此把处理异常的也给去掉,就成了这个样子。
而后直接使用浏览器打开运行查看错误
而后对比原文件中的参数 ,发现这个是咱们传的 formdata,因此为了测试先赋值一个便可。
接着是这个错误,这个未定义,也是在原文件中看他的定义处便可。能够这样看
点击上面箭头所指的地方便可到达定义。
直接到达这里,看到了他的定义,因此直接从这里扣出来到最后定义完之处便可,再次刷新,看到变成了另外一个错误
也是在原文件中找定义便可
这是个解密函数,就是我上文说的将加密数组元素解密成正常的函数名,直接扣出来便可,同时咱们还须要找个数组,就是第一行的。
再次刷新,浏览器卡了起来,甚至出现了崩溃
这就是所谓的内存爆破,这时由于里面有个函数检测到了你展开了代码,因此就来内存爆破,这个都是我在请求网页时,怎么给我返回了一段 JavaScript 代码这里获得经验的,若是你须要调试寻找的话,能够先在咱们扣出来的代码随便写个错误,在文件代码出现,而后在第一行加上断点进行调试便可,剩下的就是本身一步一步调试找出内存爆破位置了。
因为说过了,就很少说了,突破了继续刷新也会遇到一些未定义的,也是一样扣代码,就很少说了,这里说另外一个。
这里明明已是定义了,却显示未定义,打了断点一看,原来是函数名字都是乱码的
这是由于咱们在第一行定义的数组是乱序的,须要还原下,这个须要本身一步一步调试查看原文的,我这里就直接说了
里面能够打上断点查看便可。
剩下的仍是重复原来的步骤,查看错误,扣代码便可,因为篇幅这里就很少说了,有问题能够去公众号「平常学python」菜单栏加我微信拉进交流群交流。
这里仍是使用 PyExecjs 库来执行 JS 获取cookie值,若是还原成python 语言成本太大了,不适合。
代码也没有什么的,具体的能够去 github:https://github.com/SergioJune... 上面看
这篇文章昨天就想发了,无耐太累,就一直拖到今天了,有点对不起读者,还有 pdd 的已经被删除了,想看的能够去 github 上看。
最后,原创不易,但愿你们多点赞多转发分享给你的好友,点赞转发越多,我就写得越多!!!