专栏首页日常学python如何能正常获取17track物流网站的物流信息?

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

原本昨天就要发文章的了,由于之前的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

本文分享自微信公众号 - 日常学python(daily_learn)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

推荐阅读

  • 「网安夜校」开课啦!多门网络安全课程开启限时优惠报名

    众志成城,共抗疫情。腾讯安全联合腾讯云大学、腾讯课堂启动「网安夜校」,为大家提供限时优惠的网络安全课程。欢迎网络安全从业者和信息安全专业学生报名参加学习,快速充电提升自我。

    腾讯安全
    安全培训腾讯云大学
  • Flink源码走读(一):Flink工程目录

    导语 | Flink已经成为未来流计算趋势,目前在很多大厂已经有了大规模的使用。最近在学习Flink源码,就想把自己学习的过程分享出来,希望能帮助到志同道合的朋友。开始阅读源码,说明读者已经对flink的基本概念有一些了解,这里就不再重复介绍Flink了。本文作为学习过程的第一章,首先对Flink的工程目录做一个解读,了解了工程下各个模块的作用,才能在遇到问题时准确定位到代码,进一步学习。

    2011aad
    大数据解决方案
  • Flink源码走读(二):Flink+Kafka实现端到端Exactly Once语义

    Flink通过Checkpoint机制实现了消息对状态影响的Exactly Once语义,即每条消息只会影响Flink内部状态有且只有一次。但无法保证输出到Sink中的数据不重复。以图一所示为例,Flink APP收到Source中的A消息,将其转化为B消息输出到Sink,APP在处理完A1后做了一次Checkpoint,假设APP在处理到A4时发生错误重启,APP将会重新从A2开始消费并处理数据,就会导致B2和B3重复输出到Sink中两次。

    2011aad
    大数据解决方案Kafka
  • kubernetes系列教程(十九)使用metric-server让HPA弹性伸缩愉快运行

    kubernetes监控指标大体可以分为两类:核心监控指标和自定义指标,核心监控指标是kubernetes内置稳定可靠监控指标,早期由heapster完成,现由metric-server实现;自定义指标用于实现核心指标的扩展,能够提供更丰富的指标支持,如应用状态指标,自定义指标需要通过Aggregator和k8s api集成,当前主流通过promethues实现。

    HappyLau谈云计算
    Kubernetes容器微服务微服务架构腾讯微服务平台 TFS
  • 三分钟入坑指北 🔜 Docsify + Serverless Framework 快速创建个人博客系统

    之前由于学摄影的关系,为了提高自己的审美,顺便锻炼下自己的英文能力,翻译了不少国外艺术类的 文章。最近一直想搭一个个人博客来存放这些内容,又懒得折腾建站,遂一直搁置。

    Aceyclee
    ServerlessHTML网站GitGitHub
  • NVM作为主存上对数据库管理系统的影响

    implications of non-volatile memory as primary storage for database management systems

    yzsDBA
    存储缓存数据库数据结构SQL
  • DevOps平台架构演进

    附最新架构图https://www.processon.com/view/5cbd897de4b0bab90962c435

    我思故我在
    DevOps 解决方案微服务架构架构设计
  • 【腾讯云AI小程序大赛】中山大学作品《小耳朵天使》

    ----------------------------------------------------------------------------------

    陈华山
    小程序 · 云开发小程序语音识别文字识别对话机器人
  • Kona JDK 在腾讯大数据领域内的实践与发展

    经常听人谈到 OpenJDK,那它到底是什么呢?相信大家都听说过 Java SE、ME、EE等规范, 通常意义上对 Open JDK 的定义指:Java SE规范的一个免费和开源参考实现。

    腾小云
    JDKJavaJVM大数据Oracle
  • 公告丨腾讯安全产品更名通知

    为了更好地为政企客户的安全保驾护航,腾讯安全即日起更新旗下身份安全、网络安全、终端安全、应用安全、数据安全、业务安全、安全管理、安全服务等八类安全产品的命名,致力于打造全栈安全产品“货架”,让客户选购安全产品/服务更加便捷,更快地找到合适的安全产品,从而对自身的安全建设“对症下药”。

    腾讯安全
    DDoS 防护应用安全 MS验证码(业务安全)应用安全(移动安全)漏洞扫描服务

扫码关注云+社区

领取腾讯云代金券