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所以失败了)。

绕过Cloudflare机器人页面是一项挑战性的任务,但可以使用Python模块来实现。以下是一种方法: 首先,您需要使用Python的requests库来发送HTTP请求。确保您已在Python环境中安装了该库。 然后,您可以使用模块如pyppeteer或selenium来模拟一个浏览器环境,这样您就可以加载和渲染Cloudflare机器人页面。 通过使用pyppeteer,您可以使用以下代码绕过Cloudflare机器人页面: ```python import asyncio from pyppeteer import launch async def bypass_cloudflare(url): browser = await launch() page = await browser.newPage() await page.goto(url) await page.waitFor(3000) # 等待页面加载完全,时间可以根据需要调整 content = await page.content() await browser.close() return content url = "https://example.com" # 替换为目标网站的URL content = asyncio.get_event_loop().run_until_complete(bypass_cloudflare(url)) print(content) ``` 安装pyppeteer:`pip install pyppeteer` 通过上述代码,您将能够获取完全加载了的Web页面的内容。您可以根据需要提取所需的信息进行后续操作。 需要注意的是,另一种选择是使用selenium模块,但它需要与适当的浏览器驱动程序(如Chrome或Firefox驱动程序)进行交互来模拟浏览器环境。 总之,这是绕过Cloudflare机器人页面的一种方法。请注意,在实践中绕过这类安全措施可能违网站的使用条款,具体法律法规以及伦理规范。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值