1.免费版的五秒盾

要绕过这个5秒盾非常简单,只需要使用一个第三方库,叫做cloudscraper。我们可以使用pip来安装:

1
pip install cloudscraper

安装完成以后,只需要使用3行代码就能绕过 Cloud Flare 的5秒盾:

1
2
3
import cloudscraper
scraper = cloudscraper.create_scraper()
resp = scraper.get('目标网站').text

我们还是以上面的网站为例:

1
2
3
4
5
6
7
8
import cloudscraper
from lxml.html import fromstring
 
scraper = cloudscraper.create_scraper()
resp = scraper.get('https://mv-voice.com/news/2021/05/04/mountain-view-whisman-students-sent-home-after-children-test-positive-for-covid-19').text
selector = fromstring(resp)
title = selector.xpath('//h1/text()')[0]
print(title)

运行效果如下图所示:

破盾成功。

CloudScraper[2]  非常强大,它可以突破 Cloud Flare 免费版各个版本的五秒盾。而且它的接口和 requests 保持一致。原来用 requests 怎么写代码,现在只需要把requests.xxx改成scraper.xxx就可以了

2.付费版的CloudFlare五秒盾

付费版的CloudFlare五秒盾,有没有什么办法绕过呢?其实方法非常简单。只需要使用Docker运行一个容器就可以了。启动命令为:

1
2
3
4
5
6
docker run -d \
  --name=flaresolverr \
  -p 8191:8191 \
  -e LOG_LEVEL=info \
  --restart unless-stopped \
  ghcr.io/flaresolverr/flaresolverr:latest

这个容器启动以后,会开启8191端口。我们通过往这个端口发送http请求,让他转发请求给目标网站,就可以绕过五秒盾。

具体使用示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import requests
import json
 
url = "http://localhost:8191/v1"
 
payload = json.dumps({
  "cmd": "request.get",
  "url": "https://www.coinbase.com/ventures/content",
  "maxTimeout": 60000
})
headers = {
  'Content-Type': 'application/json'
}
 
response = requests.post(url, headers=headers, data=payload)
 
# 这个Docker镜像启动的接口,返回的数据是JOSN,网页源代码在其中的.solution.response中
print(response.json()['solution']['response'])

访问效果如下图所示:

我们启动的这个容器,为什么可以绕过CloudFlare的五秒盾呢,关键原因就在这个项目中:FlareSolverr[2]。大家可以阅读他的源代码,看看他是怎么绕过的。

[1] Codebase: https://www.coinbase.com/ventures/content

[2] FlareSolverr: https://github.com/FlareSolverr/FlareSolverr