前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何能正常获取17track物流网站的物流信息?

如何能正常获取17track物流网站的物流信息?

作者头像
sergiojune
发布2019-04-29 16:33:07
2.4K0
发布2019-04-29 16:33:07
举报
文章被收录于专栏:日常学python

原本昨天就要发文章的了,由于之前的pdd文章被投诉了,删除了,影响心情的同时也不敢乱发文章了,所以就暂时歇了一天,也改了另外一个网站,就是今天的物流网站。如果大家某天看不到我发文了,估计我也是被举报完了,到时想要看的可以去我的GitHub上看。

献上GitHub:https://github.com/SergioJune/Spider-Crack-JS

对你有用的话,希望能点个star,谢谢

今天网站:https://www.17track.net/zh-cn

这是个物流网站,就是查询物流的,今天要做的就是根据单号查询物流,废话不多说,直接肝。

1. 找到所需数据的 URL 请求

这里我们查询一个单号,也可以批量查询,参数都差不多,长度变了而已,所以演示就只查询一个单号。

打开了开发者工具你慢慢找,很容易就找到这个请求。

需要的数据就是这个快递轨迹,看到上面的 formdata 好像没什么问题,挺容易的,这还有什么比这爽的,赶紧使用 python 请求一波。

结果返回了这个,果然没有想象中的那么简单,估计又是在cookie上面做了反爬,那我们就加上cookie试试

果不其然,真的成功了,经过我的测试,发现需要的cookie 键是 Last-Event-ID ,那接下来就是看怎么生成的了。

2. 寻找生成位置

上面知道了是哪个 cookie 反爬的,最简单的寻找就是全局搜索这个参数来看看有没有线索。

果然有,而且文件名字和请求的路径名有几分相似,按经验来说八九不离十就是这个了,点击进去看看。

格式化就可以看到上图的代码,一眼看去,这代码很像我之前这篇请求网页时,怎么给我返回了一段 JavaScript 代码,都是前面一个大数组,然后在一个地方把这个数组的顺序,然后通过一个函数来将这个数组的元素来解密成正常的函数名。接着就是检测你有没有展开代码之类的,展开了就会内存爆破,具体的都可以看看我刚说的这篇文章。

有了上次的经验,我就直接在浏览器上格式化直接调试了,不把代码复制到本地运行了。

了解了这么多,就是开始调试了,由于我们需要找的 cookie确定是在这个文件内生成,但是还不知道在哪生成,所以需要调试下。

涉及到 cookie, 需要先把浏览器的cookie清除才行

点击 clear site data 即可清除,不放心的就点多几次。

接着就是在调试栏的右边的 watch 添加我们监听的变量,我们需要监听 cookie 的变化,所以点击 + 号添加 document.cookie 即可。

接着打断点的位置就在我们搜索到 cookie 值的位置上添加即可

接下来就是刷新网页,等待程序跳到断点的位置

这时看到 cookie 的值是空的,在 application 上看的 cookie 也是空的

接着就是按下断点执行下一行语句,不会的先自行百度,这个调试肯定得学会的,这里就不多说了,或者我过两天有时间写篇 chrome 调试供大家参考下。

现在就是漫长的调试寻找加密的时间了,经过我的查找,很快就可以看到这个了。

下面的那句明显就是设置 cookie 的,可以自己复制语句到 console 上运行一次

这样子就找到生成位置了,现在就是查看右边的调用栈,查看是在哪个地方开始执行的,看看他们之间的调用关系。

3. 把生成的参数代码扣出来

在上面的cookie 生成可以看到是一个数组,然后使用 join() 来连接起来的

我们可以观察这个数组在哪里生成和赋值的,也通过调用栈可以看到参数生成地方是在这里

我们可以先把这个语句所在的函数扣出来

发现里面的函数有些 document 对象,又因为这个是主函数,所以可以修剪下,把那些判断语句和捕捉异常的都给去掉,就是在原文件中看判断语句的真假运行的哪个语句就保留,而正常运行不会产生异常,所以把处理异常的也给去掉,就成了这个样子。

然后直接使用浏览器打开运行查看错误

然后对比原文件中的参数 ,发现这个是我们传的 formdata,所以为了测试先赋值一个即可。

接着是这个错误,这个未定义,也是在原文件中看他的定义处即可。可以这样看

点击上面箭头所指的地方即可到达定义。

直接到达这里,看到了他的定义,所以直接从这里扣出来到最后定义完之处即可,再次刷新,看到变成了另一个错误

也是在原文件中找定义即可

这是个解密函数,就是我上文说的将加密数组元素解密成正常的函数名,直接扣出来即可,同时我们还需要找个数组,就是第一行的。

再次刷新,浏览器卡了起来,甚至出现了崩溃

这就是所谓的内存爆破,这时因为里面有个函数检测到了你展开了代码,所以就来内存爆破,这个都是我在请求网页时,怎么给我返回了一段 JavaScript 代码这里得到经验的,如果你需要调试寻找的话,可以先在我们扣出来的代码随便写个错误,在文件代码出现,然后在第一行加上断点进行调试即可,剩下的就是自己一步一步调试找出内存爆破位置了。

由于说过了,就不多说了,突破了继续刷新也会遇到一些未定义的,也是同样扣代码,就不多说了,这里说另一个。

这里明明已经是定义了,却显示未定义,打了断点一看,原来是函数名字都是乱码的

这是因为我们在第一行定义的数组是乱序的,需要还原下,这个需要自己一步一步调试查看原文的,我这里就直接说了

里面可以打上断点查看即可。

剩下的还是重复原来的步骤,查看错误,扣代码即可,由于篇幅这里就不多说了,有问题可以去公众号「日常学python」菜单栏加我微信拉进交流群交流。

4. 用 Python 运行获取结果

这里还是使用 PyExecjs 库来执行 JS 获取cookie值,如果还原成python 语言成本太大了,不适合。

代码也没有什么的,具体的可以去 github:https://github.com/SergioJune/Spider-Crack-JS 上面看

最后

这篇文章昨天就想发了,无耐太累,就一直拖到今天了,有点对不起读者,还有 pdd 的已经被删除了,想看的可以去 github 上看。

最后,原创不易,希望大家多点赞多转发分享给你的好友,点赞转发越多,我就写得越多!!!

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 日常学python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CLI 工具
云开发 CLI 工具(Cloudbase CLI Devtools,CCLID)是云开发官方指定的 CLI 工具,可以帮助开发者快速构建 Serverless 应用。CLI 工具提供能力包括文件储存的管理、云函数的部署、模板项目的创建、HTTP Service、静态网站托管等,您可以专注于编码,无需在平台中切换各类配置。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档