反-反调试+Ajax请求,javascript渲染

之前实习有遇到很烦的反爬措施-反调试,当时不懂,领导就说是跳不过breakpoint断点,就用selenium+webdriver解决了,最近看了两篇推送,大神解开了我的疑惑。原来网站的反爬措施是反调试+ajax请求+javascript渲染
https://mp.weixin.qq.com/s/Ki8QZFhTRIlFwrIC9BkoQQ
https://mp.weixin.qq.com/s/-QCAs8BBq5klEyW3ofZ24w
了解常用的反爬措施点这里

JS反调试(反debug)

当爬虫工程师用f12去查看网页加载过程或者调试JS,这种操作太多了,有的网站就会增加反调试的策略。还是以国家药监局的网站为例,f12开始调试,就会暂停在’debugger’代码行,无法跳过。
在这里插入图片描述
在这里插入图片描述
常用的策略是:通过Call Stack找到把我们带入死循环的函数,重新定义。我们可以把这个函数在“Console”里面重新定义,比如把它重新定义为空函数,这样再运行它时就什么都不做,也就不会把我们带人陷阱。在这个函数调用的地方打个“Breakpoint”。因为我们已经在陷阱里面了,所以要刷新页面,JS的运行应该停止在设置的断点处,此时该函数尚未运行,我们在Console里面重新定义它,继续运行就可以跳过该陷阱。

这里查到一篇博客用Fiddler解决,但是鉴于教程较多,我就没采取这个方法,感兴趣的朋友可以去这里

  • 我的解决方法比较傻瓜式,其实解除断点就可以了
    在这里插入图片描述
    这之后就可以继续操作了,这种方法虽然可以防止无限循环命中debugger断点,但是也存在很大的缺陷,因为对于其他代码,我们还是需要断点调试功能的。所以这个方法仅限于静态分析。

  • 采用手动替换代码的方法,跟上面的Fiddler异曲同工。在Console里重新编写debugger函数,首先需要定义一个空函数,再将几个debugger函数重新定义,即可解决
    在这里插入图片描述

  • 还有更简单的手动方法,只需要将几个debugger处都加上断点也可以
    在这里插入图片描述

Ajax请求,js渲染

Asynchronous JavaScript & XML,Ajax是web开发的一种技术。

  • Ajax请求的步骤
    (1)创建XMLHttpRequest对象,也就是创建一个异步调用对象;
    (2)创建一个新的HTTP请求,并指定该HTTP请求的方式、URL及验证信息;
    (3)设置响应HTTP请求状态变化的函数;
    (4)发送HTTP请求;
    (5)获取异步调用返回的数据;
    (6)使用JavaScript和DOM实现局部刷新
    在这里插入图片描述
    通俗的说就是在页面进行链接点击操作时,请求的url并未改变,只是网页的response进行局部的刷新,这在爬取的过程中必须想办法解决
  • 通过调取控制台发现翻页为post请求,从表单中我们发现了规律,即curstart参数跟页码对应,所以采用了拼接url的方式进行访问爬取
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值