本文讨论了在访问某些网站时遇到的异常情况,包括乱码、验证码和页面重定向。一些网站使用了Cloudflare反爬虫的cdn服务,导致访问异常时被百度的云加速服务拦截。在解决乱码问题时,尝试了使用Java和Python,发现Python没有出现乱码的情况。然而,随之而来的是需要验证码的问题,最终通过设置全局代理绕过了验证码。另外,页面重定向是另一个问题,通过注释掉可疑的JavaScript代码解决了重定向问题。
网站访问异常与Cloudflare的云加速服务
有些网站在第一次打开的时候竟然就需要验证码,原本以为是加几个header就能够搞定的,但却并非如此。这些网站一般都是使用了Cloudflare的cdn服务,而且Cloudflare又和百度有合作,所以我们的访问异常时,就会被百度的云加速服务给拦截下来。
乱码问题和解决尝试
一般来说,用Java来写就足够解决问题了。但是,用Java写此次爬虫,Java请求返回的内容总是出现一些乱码的问题。已经设置为utf-8方式并且像gzip、br等解压缩都尝试了,稍微好点的情况只有body标签内的内容为乱码,糟糕的情况就是整个返回的内容皆为乱码。后来就用Python试了试,乱码问题直接没了,这是为什么呢?
验证码问题及绕过方法
之前用Python解决乱码问题后,紧接着又出现的就是访问需要验证码了。当时我是浏览器里访问不需要验证码,但Python访问不管如何,一直出现百度云加速的验证码认证。出现这种情况,我的第一反应是Python中是不是少了某些关键头部,于是将浏览器中的header带到Python中一一去试,但并没有起到什么作用。这里我就贼纳闷了,究竟为什么?后来才突然想起来我浏览器走了代理,于是我干脆给电脑设置了个全局代理,然后用Python继续访问,让人感动的一幕发生了——命令行中返回了目标网站的页面源代码!这时我才察觉,我的本地IP已经进入了目标网站的黑名单。到这里,验证码也就绕过了。
页面重定向问题及解决方法
在把前面的目标网站的页面下载到本地后,然后用浏览器打开该文件,浏览器会加载页面中的一些图片、CSS还有JS等资源文件,其中有个脚本会检测当前页面URL中的协议是否是HTTPS,如果不是,将重定向至对应的HTTPS协议的页面。这里显然,我们打开的本地文件URL是文件的目录,不是以HTTPS开始的。重定向后的页面是不存在的。为了解决这个问题,我们可以手动取消重定向请求,但这样的体验不好。所以我们需要寻找导致重定向的JavaScript代码。
我浏览了渲染后的页面源代码,发现在body标签结束前,有一段可疑的代码:
<script type="text/javascript" id="">"https:"!=location.protocol&&(location.href="https:"+window.location.href.substring(window.location.protocol.length));</script>
这段代码最初的页面内是没有的,说明是被动态加载进来的。我选择了其中的一段代码location.protocol
,在其他可疑的JS文件中进行搜索,但遗憾的是没有找到相关代码。另外,本来想使用浏览器的调试功能,但每次打开调试页面时,浏览器就未响应!最后我只好直接在目标文件上选择性地注释掉可能有影响的代码,注释掉了所有可疑的JS文件,但重定向问题仍然存在!最后,只剩下一个与Google相关的JS文件,注释掉那段代码,终于,重定向问题消失了。
本来以为这段代码就像Google分析那样的一些没啥影响的Google服务,结果却让人有点意外!可能是出于安全的考虑才加入了这段代码。到这里,页面重定向问题也得到解决,成功绕开Cloudflare验证。
本文介绍了绕过Cloudflare5秒盾的一个实际案例。但是,使用某些工具能够帮助我们更加轻松地解决这个问题,比如穿云API。
使用穿云API,您可以轻松地绕过Cloudflare的机器人验证,即使您需要发送10万个请求,也不必担心被识别为抓取者。
一个穿云API即可突破所有反Anti-bot机器人检查,轻松绕过Cloudflare、CAPTCHA验证,WAF,CC防护,并提供了HTTP API和Proxy,包括接口地址、请求参数、返回处理;以及设置Referer,浏览器UA和headless状态等各浏览器指纹设备特征。