DrissionPage过5秒盾:反CloudFlare反爬

5秒盾实例

偶尔有用的解决方式:

curl_cffi可以实现一些简单的反5秒盾。

pip install curl_cffi
from curl_cffi import requests as cffi_requests
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
}
url = ""
res = cffi_requests.get(url, impersonate='chrome110', timeout=10)
print(res.status_code, res.cookies)

无效的网站会返回 403 <Cookies[]>。

DrissionPage反反爬

这里采用DrissionPage自动化来反反爬。

pip install DrissionPage

安装后,编写代码:

from DrissionPage import ChromiumPage
from DrissionPage import ChromiumOptions
co = ChromiumOptions()
page = ChromiumPage(co)
url = ""
page.get(url)
page.wait(5)
print(page.user_agent)
page.get_screenshot(path=r"./test_browser_page.png", full_page=True)
page.quit()

没有开启无头模式时,通过保存截图可以确认正常绕开了5秒盾。如果只需要本地运行,到这里就够了。

但是本任务需要部署到没有GUI的linux服务器,也就意味着浏览器必须是无头模式。尝试修改代码:

from DrissionPage import ChromiumPage
from DrissionPage import ChromiumOptions
co = ChromiumOptions()
co.set_argument('--headless', True) # 无头模式
page = ChromiumPage(co)
url = ""
page.get(url)
page.wait(5)
print(page.user_agent)
page.get_screenshot(path=r"./test_browser_page.png", full_page=True)
page.quit()

结果一看截图,发现又被CloudFlare给拦截了。原来问题出在UA上:

print(page.user_agent)

打印结果是:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/128.0.0.0 Safari/537.36

可以发现里面有`HeadlessChrome`这一串,导致被CloudFlare给拦截了。因此只需要设置一下UA就好了!部署到服务器上后,中间一直有如下的报错:

DrissionPage.errors.BrowserConnectError:
127.0.0.1:18364浏览器无法链接。
请确认:
1、该端口为浏览器
2、已添加'--remote-debugging-port=18364'启动项
3、用户文件夹没有和已打开的浏览器冲突
4、如为无界面系统,请添加'--headless=new'参数
5、如果是Linux系统,可能还要添加'--no-sandbox'启动参数
可使用ChromiumOptions设置端口和用户文件夹路径。

修改后代码如下:


from DrissionPage import ChromiumPage
from DrissionPage import ChromiumOptions
# 创建页面对象
co = ChromiumOptions().auto_port()  # 指定程序每次使用空闲的端口和临时用户文件夹创建浏览器
co.headless(True)   # 无头模式
co.set_argument('--no-sandbox')  # 无沙盒模式
co.set_argument('--headless=new')  # 无界面系统添加
co.set_paths(browser_path="/opt/google/chrome/google-chrome")  # 设置浏览器路径
co.set_argument('--disable-gpu')    # 禁用gpu,提高加载速度
co.set_user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36") 
page = ChromiumPage(co)
url = ""
page.get(url)
page.wait(5)
print(page.user_agent)
page.get_screenshot(path=r"./test_browser_page.png", full_page=True)
with open(r"./test_browser.html", "w", encoding="utf-8") as f:
    f.write(page.html)
page.quit()

设置UA后从截图来看,真的做到了绕开这个5秒盾。其中set_paths用来在服务器上指明chrome路径,本地部署可忽略(?)。

参考爬虫自动化之drissionpage在linux无头模式下过五秒盾Cloudflare

小插曲

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"

中间设置成这个UA也不行,CloudFlare好像也不接受过老版本的浏览器(这里是91.0所以失败了)。

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值