如何使用 Python 和 Selenium 解决 Cloudflare 验证码

news2024/11/13 9:46:16

在网络自动化测试或网页数据抓取的过程中,Cloudflare验证码是许多开发者遇到的棘手问题。这一验证码设计的初衷是为了保护网站免受恶意攻击,但它也给合法的自动化操作带来了不小的挑战。

那么,使用Python和Selenium,是否有办法有效应对并解决Cloudflare验证码的问题?有哪些技巧和方法可以帮助我们绕过这道障碍?

通过Python和Selenium,开发者可以模拟用户的行为来与网页进行交互。然而,当遇到Cloudflare验证码时,传统的自动化脚本往往会被阻挡。在实际操作中,有一些技巧可以帮助绕过这些验证码。比如,使用代理和用户代理轮换来减少触发验证码的概率,或者结合第三方验证码解决服务,如2Captcha,将验证码图片发送到服务端进行识别和处理。在一个具体的案例中,某开发团队通过这些方法,成功实现了对多个网页的自动化访问,而未被Cloudflare阻挡。

在本文中,我们将告诉你如何在 2024 年解决 Cloudflare 验证码问题。我们将解释什么是 Cloudflare 验证码为什么它有时会失败,并提供一种通过 Python 和 Selenium 克服这些障碍的有效解决方案。

01 什么是 Cloudflare 验证码

Cloudflare 提供网络工具,并提供一套全面的安全功能,以保护网站免受各种在线威胁。Cloudflare 验证码是一种用于区分人类用户和自动化机器人的功能。它是 Cloudflare 安全服务的重要组成部分,旨在防御网站免受自动化攻击和滥用。

图片

Cloudflare 验证码的独特功能

  • 集成的安全解决方案:

    Cloudflare 的验证码服务通常作为其整体安全解决方案的一部分提供,包括 DDoS 保护、Web 应用防火墙 (WAF)、内容分发网络 (CDN) 等。这使得网站可以从单个平台获得全面的安全保护。

  • 智能流量管理:

    Cloudflare 利用其全球网络和智能流量管理技术,通过在检测到异常流量或潜在威胁时动态触发验证码,更有效地保护网站。

  • 无缝用户体验:

    Cloudflare 致力于通过减少对合法用户的干扰来提供无缝的用户体验。例如他们的“Turnstile”验证码旨在通过最少的用户交互来验证人类访问者。

  • 隐私:

    Cloudflare 强调隐私,致力于减少对用户数据的依赖和收集,并提供更隐私友好的身份验证方法。

02 Cloudflare 如何检测机器人

Chromedriver 检测

确定浏览器是否受自动化工具控制。

像 Chromedriver 这样的自动化工具可以通过检查特定的浏览器行为和属性来检测,这些行为和属性是自动化脚本所特有的。例如,某些 JavaScript 变量或浏览器属性可以揭示自动化工具的存在。此外,监控交互的时间和模式可以帮助识别非人类行为。

设备指纹识别

如果相同的浏览器指纹用于大量访问,可以识别为机器行为。需要使用不同的有效浏览器指纹信息来分配访问。

设备指纹识别涉及收集用户设备的各种属性,如屏幕分辨率、安装的字体、浏览器插件等。通过组合这些属性,可以为每个设备创建一个唯一标识符(指纹)。在多个会话中重复使用相同的指纹可能表明自动化活动。为减轻这种情况,需要随机化和变化指纹数据,使其更像人类。

IP 代理检测

阻止恶意 IP 位置并限制请求频率。

IP 代理检测涉及识别和阻止与恶意活动或高频请求相关的 IP 地址。技术包括维护已知坏 IP 地址的黑名单,使用地理位置数据阻止可疑区域,并实施速率限制以防止单个 IP 地址发出过多请求。此外,分析 IP 地址的行为模式可以帮助区分合法用户和自动化机器人。

浏览器真实性

检查浏览器属性和请求信息是否异常,例如,头部中的 User-Agent 是否由 Python 代码发出,以及 User-Agent 声明的浏览器是否具有相应属性。

JavaScript 挑战

向用户发送 JavaScript 代码。通常,爬虫没有直接渲染 JS 的能力。通过其他手段模拟脚本执行有相应的检测方法。在代码执行期间,收集一系列设备信息,如 canvas、navigator、插件、Chrome 版本以及一系列物理硬件设备信息。这些设备信息被加密并由 Cloudflare 判断其真实性。

Cookie

通过检查 cf_clearance 的有效期,持续更新并跟踪用户行为是否异常。

TLS 指纹识别

  • 浏览器通常使用 HTTP/2,但编程语言发出的请求大多默认使用 HTTP/1.1。此外,浏览器请求的 JA3 信息与编程语言的不同。

  • TLS 指纹识别是一种用于识别和验证 TLS(传输层安全)通信的技术。

  • TLS 指纹可以通过检查在 TLS 握手期间使用的密码套件、协议版本和加密算法来确定 TLS 通信的特征。由于每个 TLS 实现使用不同的密码套件、协议版本和加密算法,比较 TLS 指纹可以确定通信是否来自预期的源或目标。

  • TLS 指纹识别可用于检测网络欺骗、中间人攻击和间谍活动等安全威胁,还可用于识别和管理设备和应用程序。

03 如何绕过并解决 Cloudflare 验证码

1. CapSolver

有很多方法可以解决 Cloudflare 中的验证码,但最流行和高效的方法是使用第三方解决服务,你可以使用 CapSolver 来解决验证码。以下是基本步骤:

  • 使用 CapSolver 获取有效令牌,然后通过 TLS 请求库正常访问。

CapSolver 可以通过提供有效的 Cookie 和会话数据来帮助绕过各种检测机制。一旦获得这些凭证,就可以使用令牌正常发送请求。你需要使用 TLS 库发送有效请求。这种方法确保请求看起来是真实的,不太可能被阻止或标记为可疑。

此外,使用 CapSolver 可以帮助你解决以下问题:

  • IP 检测:使用高质量代理绕过 IP 阻止和限制。

  • JavaScript 挑战:像真实浏览器一样执行 JavaScript 代码,确保正确处理挑战。

  • 人机交互:根据挑战执行相应操作,模拟人类行为。

  • 设备环境指纹识别:每次使用干净有效的浏览器环境信息,通过真实性检查。

以下是使用 Python 获取 Cloudflare Turnstile 解决方案的示例代码:


import requests
import time



api_key = "YOUR_API_KEY"  # TODO: 你的 capsolver API 密钥
site_key = "0x4XXXXXXXXXXXXXXXXXXXXX"  # TODO: 目标网站的站点密钥
site_url = "https://www.yourwebsite.com"  # TODO: 目标网站的页面 URL

def capsolver():
    payload = {
        "clientKey": api_key,
        "task": {
            "type": "AntiTurnstileTaskProxyLess",
            "websiteKey": site_key,
            "websiteURL": site_url,
            "metadata": {
                "action": ""  # 可选
            }
        }
    }

    res = requests.post("https://api.capsolver.com/createTask", json=payload)
    resp = res.json()
    task_id = resp.get("taskId")

    if not task_id:
        print("创建任务失败:", res.text)
        return

    print(f"获取任务 ID: {task_id} / 获取结果...")

    while True:
        time.sleep(1)
        payload = {"clientKey": api_key, "taskId": task_id}
        res = requests.post("https://api.capsolver.com/getTaskResult", json=payload)
        resp = res.json()
        status = resp.get("status")

        if status == "ready":
            return resp.get("solution", {}).get("token")

        if status == "failed" or resp.get("errorId"):
            print("解决失败!响应:", res.text)
            return

token = capsolver()
print(token)

2. Puppeteer、Selenium、Playwright

使用浏览器自动化工具来驱动网站访问并检索数据,这可以避免复杂的 JavaScript 检测;然而,这些工具可能会被检测到是由机器人控制的。

浏览器自动化工具如 Puppeteer、Selenium 和 Playwright 可以模拟用户与网站的真实交互,包括处理 JavaScript 挑战和渲染动态内容。虽然它们可以绕过一些检测机制,但它们通常会留下可被反机器人系统识别的痕迹。通过随机化鼠标移动、按键等互动,可以帮助减轻被检测的风险。

3. Undetected Chromedriver

可以绕过一些机器人控制检测。

undetected_chromedriver 是一个修改版的 Chromedriver,包含了避免被反机器人机制检测的补丁。它可以通过模拟人类行为和修改浏览器属性来处理各种形式的浏览器指纹识别和其他检测技术。此工具特别适用于网络抓取和自动化测试,其中标准 Chromedriver 会被阻止。

获取有效的 Cookie 后,结合其他方法重复访问网站。关键是要确保 TLS 请求连接有效地被掩盖,否则数据访问仍会受到限制。

04 结论

通过遵循这些步骤,你可以使用 Python 和 Selenium 以及 CapSolver 服务绕过并解决 Cloudflare 验证码。此方法确保你的自动化脚本可以顺利运行而无需人工干预。然而,始终以道德方式使用这些技术,并遵守你所互动网站的服务条款。

如果你在使用Selenium时频繁遇到Cloudflare验证码的问题,不妨试试Python的undetected_chromedriver库,该库专为绕过各类反爬虫机制设计,能够显著提升自动化操作的成功率。

解决Cloudflare验证码并非易事,但通过合理使用Python和Selenium中的各种技术和工具,开发者可以有效降低验证码的干扰,为自动化操作铺平道路。同时,也需要在实际操作中时刻遵循道德和法律规范。

科技进步让自动化变得触手可及,但遵守规则和道德,才是我们在网络世界中行稳致远的关键。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2080092.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PCL 点云ISS关键点提取算法

目录 一、概述二、代码示例三、运行结果📌 结果预览 🔗接上篇 Python 点云ISS关键点提取算法 一、概述 点云ISS关键点(Intrinsic Shape Signatures):利用点云中每个点的局部邻域的协方差矩阵来分析局部几何结构。协方差矩阵的特征值可以揭示局部几何形状的显著性。通…

通过websock实现实时刷新前端(可实现进度条)

业务场景: 领导让我们做一个根据进度实时刷新的进度条,如下所示 后面去网上查了下,可以通过websocket这种双向通信协议的持久链接实现。 配置 创建配置类,启用websocket支持 import org.springframework.context.annotation.…

进阶-task1-深度学习理论基础

学习目标: 从不同的角度更好地优化神经网络 熟悉临界点等与优化有关的常见的概念网络优化失败的常见原因常用的解决/优化方案 具体内容: 网络优化常见的问题? 损失函数Loss不再下降,但是收敛值不合理 深层网络反而不如浅层网…

【扩散模型(七)】IP-Adapter 与 IP-Adapter Plus 的具体区别是什么?

系列文章目录 【扩散模型(二)】IP-Adapter 从条件分支的视角,快速理解相关的可控生成研究【扩散模型(三)】IP-Adapter 源码详解1-训练输入 介绍了训练代码中的 image prompt 的输入部分,即 img projection…

19c库启动报ORA-600 kcbzib_kcrsds_1---惜分飞

一套19c的库由于某种情况,发现异常,当时的技术使用隐含参数强制拉库,导致数据库启动报ORA-00704 ORA-600 kcbzib_kcrsds_1错误 2024-08-24T06:11:25.49430408:00 ALTER DATABASE OPEN 2024-08-24T06:11:25.49437008:00 TMI: adbdrv open database BEGIN 2024-08-24 06:11:25.49…

Iptables-快速上手

Iptables firewall 防火墙Iptables简述一、Iptables的四表五链1.filter表2.nat表3.raw表4. mangle表5.数据包的流通过程 二、快速上手1. 查看规则2. 规则详细3. 添加规则4. 自定义链 三、关于iptables和docker1. 背景2. 解决方案 firewall 防火墙 从逻辑上讲,可以分…

【国外比较权威的免费的卫星数据网站】

国外比较权威的免费卫星数据网站有多个,它们各自在数据覆盖范围、分辨率、以及数据种类等方面具有不同的特点和优势。以下是一些推荐的网站: NASA Worldview 网址:https://worldview.earthdata.nasa.gov/简介:NASA Worldview显示…

Visual Studio解决scanf不能正常输入的问题

总所周知,vs中直接使用scanf会报错,用scanf_s就不会,然而很多时候我们用的还是scanf,下面讲解如何在vs中使用scanf 🎁1.添加#define _CRT_SECURE_NO_WARNINGS 不做任何处理,会出现的报错 注意下方的C499…

MySQL商品复购率计算

先看表格 复购率计算: 根据商品ID、商品名称、订单状态、订单创建时间、收货人电话来进行复购率计算: select b.商品ID,b.名称,b.购买人数,c.复购人数,c.复购人数/b.购买人数 as "复购率" from ( select 商品ID,max(商品名称) as "名称…

嵌入式学习day34

单循环服务器:同一时刻,只能处理一个客户端的任务 并发服务器:同一时刻,能够处理多个客户端的任务 UDP不需要创建连接 TCP并发服务器 1.多进程 2.多线程 3.IO多路复用 1、多进程 2、多线程 3、IO多路复用 IO模型&#xff1a…

机器学习:K-means算法(内有精彩动图)

目录 前言 一、K-means算法 1.K-means算法概念 2.具体步骤 3.精彩动图 4.算法效果评价 二、代码实现 1.完整代码 2.结果展示 3.步骤解析 1.数据预处理 2.建立并训练模型 3.打印图像 四、算法优缺点 1.优点 2.缺点 总结 前言 机器学习里除了分类算法&#xff0…

Threejs绘制方形管道

之前有用Threejs的TubeGeometry绘制管道效果,但是TubeGeometry的管道效果默认是圆形的截面,这节实现方形截面的管道绘制。 因为Threejs不提供方形截面的管道,所以使用的是绘制截面,然后拉伸的方式,所以需要先绘制一个方…

【FPGA数字信号处理】- 什么是时域

​数字信号处理的领域中,时域是我们理解和处理数字信号的关键维度之一。 时域分析能够让我们直接观察信号随时间的变化情况,为后续的信号处理和系统设计提供坚实的基础。 接下来将以通俗易懂的方式,让大家深入了解数字信号处理基础中的时域…

算法学习:一维数组的排序算法

【排序算法】八种排序算法可视化过程_哔哩哔哩_bilibili 1,冒泡排序: 冒泡排序(Bubble Sort): 冒泡排序是一种简单的排序算法,它通过重复地交换相邻的元素,直到整个序列有序。算法思路是:从第一个元素开始,依次比较相邻的两个元素,如果前者大于后者,就交…

day-41 零钱兑换

思路 动态规划的思想&#xff0c;创建一个长度为amount的数组arr&#xff0c;arr[i]表示当amounti时的最少硬币数 解题过程 arr初始化值为Integer.MAX_VALUE&#xff0c;再令arr[0]0&#xff0c;arr[coins[j]]1(0<j<coins.length),然后i从1向后遍历&#xff08;icoins[j…

DNS劫持问题

目录 DNS劫持概述 定义 图示 ​编辑图示说明 DNS劫持的原理 1. DNS请求与响应过程 图示 ​编辑2. 劫持发生点 本地劫持 路由器劫持 中间人攻击 图示 ​编辑图示说明 DNS劫持的影响 1. 对个人用户的影响 图示 ​编辑图示说明 2. 对企业的影响 图示 ​编辑图示…

2024年8月23日(docker 数据存储)

1、打包 [rootdocker1 ~]# docker save -o centos.tar centos:latest [rootdocker1 ~]# systemctl start docker [rootdocker1 ~]# docker ps -all CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e84261634543 …

LoadBalancer负载均衡

一、概述 1.1、Ribbon目前也进入维护模式 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 简单的说&#xff0c;Ribbon是Netflix发布的开源项目&#xff0c;主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的…

监控领域的物理对抗攻击综述——Physical Adversarial Attacks for Surveillance: A Survey

介绍 文章贡献 框架提出&#xff1a;提出了一个新的分析框架&#xff0c;用于理解和评估生成和设计物理对抗性攻击的方法。全面调查&#xff1a;对物理对抗性攻击在监控系统中的四个关键任务—检测、识别、跟踪和行为识别—进行了全面的调查和分析。跨领域探索&#xff1a;讨…

OpenHarmony轻量设备Hi3861芯片开发板启动流程分析

引言 OpenHarmony作为一款万物互联的操作系统&#xff0c;覆盖了从嵌入式实时物联网操作系统到移动操作系统的全覆盖&#xff0c;其中内核包括LiteOS-M,LiteOS-A和Linux。LiteOS-M内核是面向IoT领域构建的轻量级物联网操作系统内核&#xff0c;主要面向没有MMU的处理器&#x…