当前位置: 代码迷 >> 综合 >> cloudflare cdn 反爬
  详细解决方案

cloudflare cdn 反爬

热度:18   发布时间:2024-02-07 01:58:31.0

?    文章来源于公众号:爬虫逆向与数据分析

相信有翻墙经验的小伙伴,在墙外自由冲浪的时候, 总会碰到类似于这样的页面:

对于这种页面呢, 我们直接用requests对目标网站发起请求,会发现无法获取到我们想要的内容。这到底是怎么一回事呢?哈哈, 不懂问度娘啊!!经过我的一番搜索:

此处来自度娘

大致来说呢, 这个东西就是用来防止ddos攻击的(没想到连爬虫也一起给处理了)。好了, 既然清楚了这是个什么东东, 接下来我们的任务就是要攻破他了。

首先我们打开chrome浏览器, 访问这个页面(为了避免不必要的麻烦, 网站url就不展示了)。这时我们会看到这样的内容:

等待大概5秒钟左右吧,我们就会直接进入这个页面的首页了。此时我们打开chrome浏览器的调试页面(快捷键F12),并点击到network下面,会显示这样一个页面:

经过简单的分析, 我们可以看出页面首先请求了首页的url, 但是此时返回了503, 然后接着请求了一些css和图标,之后又请求了url(如上图中2所示),这时我们可以点开看一下,经过查看, 我们发现这个页面就是我们所要爬取的首页。那接下来我们分析一下这个页面的请求:

    以上可以看出, 该请求是一个post请求, 请求参数有r, jschl_vc, pass, jschl_answer这四个值。并且呢还有一个cookie值。看到这里,细心的小伙伴应该已经知道这个cookie值是哪里来的了吧?不细心的小伙伴可以看我们的第一个请求的url(其中有一个set-cookie,便是这个值)。

    这里我们已经知道了cookie值, 但是还有四个请求参数和这个url是怎么来的还不清楚。接下来我们便来分析这五个值。还记得我们发起的首页请求吗, 虽然请求的状态码是503,但是他也是有返回内容的,其中就有这几个值哦:

综合以上分析, 除了jschl-anwser这个值, 其他值我们均已经知道啦。其实到了这里,我们已经成功了一大半了。剩下的jschl-anwser这个值有一些麻烦,但是也还是比较简单的。不说了,直接上图:

 

经过简单的分析里面的js, 我们便可以发现,其实a.value(由于代码太长,a.value没有截出来)就是我们要的jschl-anwser的值,二话不说我们运行这段js,看看这个值是什么东东。这里们用execjs来运行这段js(没有环境的小伙伴需要装一下哦)。其实这里直接运行会报错,比如没有了settimeout, document啦什么的。而我的做法也是比较粗暴简单的,就是替换掉这些东西,话不多说,直接来代码:

 

经过这些打磨之后, 再来运行这个js代码, 就可以获取到jschl-anwser这个值了(其实访问cloudflare会发现,这个请求返回的类型大概有两三种,而这个代码只是适配了其中一种哈,因为个人比较懒,就没有多写了)

    哈哈, 分析到这里, 我们的url,以及四个请求值都已经有了,这时我们大胆的发起post请求(别忘了加cookie哦),就可以获取到我们的页面内容了(记得请求之前停顿4秒哦,cloudflare会检查这个时间),最后获取到页面之后,记得保存返回的cookie值,之后每次请求都要携带这个cookie值才可以。

写在最后:这是本人第一次写公众号文章, 写的可能不够好, 还请小伙伴们留言指正,接受一切批评哈。注:如果有些小伙伴对文章内容不是很理解,欢迎咨询哦。


有兴趣的同学可以关注下公众号,想要代码的同学关注下公众号并私信我哦: