如何在 Selenium Python 中解决验证码 | 2024 完整指南

news2024/10/6 6:37:40

在这里插入图片描述
由于在进行网络自动化时遇到验证码是让许多人感到不知所措的问题。这些验证码专为区分人类用户和自动化脚本而设计,对于使用Selenium进行网络爬虫或自动化任务而言,无疑是一个巨大的挑战。2024年的完全指南将为您提供全面的解决方案,帮助您高效地应对这些障碍,尤其是两种常见的CAPTCHA类型,funcaptcha和recaptcha,当然我们还需要整合第三方CAPTCHA解决方案工具CapSolver。

目录

  1. 什么是CAPTCHA
  2. CAPTCHA示例
  3. 先决条件
  4. 方法1:通过Capsolver API解决CAPTCHA
    • 理解HTML表单
    • 处理隐藏的Textarea元素
    • 获取Token
    • 使用Capsolver Python SDK获取Token
    • 在Selenium中使用Token
  5. 方法2:使用Capsolver扩展解决CAPTCHA
    • 下载和重打包Capsolver扩展

奖励代码

领取您的奖励代码,用于顶级验证码解决方案;CapSolver:WEBS。兑换后,每次充值都将额外获得5%的奖励,无限次数。

在这里插入图片描述

什么是CAPTCHA

CAPTCHA要求用户执行特定任务,例如输入图像中显示的文本或点击符合特定标准的一组图像。这些任务旨在验证用户是人类还是机器人。由于这些任务的动态性质,只有通过人类认知和正确信息解释才能成功完成,这是人工智能常常遇到困难的领域。

某些CAPTCHA变体还支持视力受损的人士,通过生成音频而不是图像来进行验证。

CAPTCHA示例

Google的开源CAPTCHA小部件reCAPTCHA广泛使用,因为它支持各种主要的屏幕阅读器,如JAWS和NVDA,适用于Windows OS上的IE、Edge或Chrome,Chrome OS上的ChromeVox,以及Mac OS上的Safari和Chrome。
在这里插入图片描述

此外,FunCaptcha是另一种常见的CAPTCHA类型,用户需要点击特定的图像,例如选择所有包含特定对象的图像,以完成验证。正常的人类用户通常需要花费长达一分钟的时间来完成复杂的FunCaptcha验证。这两种类型的CAPTCHA有效地防止了自动化脚本攻击,并被许多网站广泛采用。
在这里插入图片描述

先决条件

  • Google Chrome:安装最新版本的Chrome,因为我们将通过代码与Chrome进行交互。
  • Python:确保已安装Python,并且版本为3或更高。不推荐使用3以下的版本。
  • Selenium:Python的自动化工具Selenium的库。
  • Capsolver Python SDK:官方Capsolver Python SDK,可轻松与Capsolver集成。
  • Capsolver Extension:官方Capsolver Chrome扩展,可以自动为您解决各种挑战。

方法1:通过Capsolver API解决CAPTCHA

我们将使用此演示页面作为示例,演示如何在Python Selenium中使用Capsolver API解决reCAPTCHA。

理解HTML表单

在开始之前,我们需要了解HTML表单的基础知识。观察此页面并打开开发者工具。手动解决reCAPTCHA,然后点击提交按钮。您将看到发送的POST请求,提交了三个字段:ex-aex-bg-recaptcha-response,如下图所示:

在这里插入图片描述

这三个字段对应于初始HTML源代码中表单下的两个输入元素和一个文本框元素,如下图所示:
在这里插入图片描述

我们的方法是使用Capsolver API解决reCAPTCHA,获取Token,将其输入到文本区域元素中,然后点击提交按钮以提交表单。

处理隐藏的Textarea元素

在将Token输入到文本区域元素时,请注意页面上的文本区域元素具有CSS样式display: none,这意味着文本区域是不可见的。在这种情况下,如果您尝试直接在Selenium中向文本区域元素输入内容,将会抛出错误:
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable,因为此时文本区域元素是不可交互的。为了解决这个问题,我们需要将文本区域元素的CSS样式设置为display: block。具体的操作方法将在稍后的代码中体现。

获取Token

使用Capsolver API需要我们提供websiteKey,可以通过在页面源代码中搜索关键字data-sitekey来找到:
在这里插入图片描述

使用Capsolver Python SDK获取Token

以下是使用Capsolver Python SDK获取Token的方法:

import capsolver

capsolver.api_key = "your api key"
solution = capsolver.solve({
    "type": "ReCaptchaV2TaskProxyLess",
    "websiteKey": "6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9",
    "websiteURL": "https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php",
})
token = solution["gRecaptchaResponse"]
print(token)

在Selenium中使用Token

接下来,我们需要在Selenium中使用Token。在Selenium中有两个关键操作:

  • 使文本区域元素可见,以便可以与之交互并将Token输入其中。
  • 定位提交按钮并点击以提交表单。

这些操作涉及到元素的定位和交互。如果您对Selenium不太熟悉,可以参考使用Selenium和Python进行网页抓取 | 在网页抓取时解决CAPTCHA

结合Capsolver API,完整的代码如下所示:

import capsolver
from selenium import webdriver
from selenium.webdriver.common.by import By

# 初始化Chrome选项对象并访问目标网站
chrome_options = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=chrome_options)
url = "https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php"
driver.get(url)

# 调用Capsolver API解决ReCaptcha
capsolver.api_key = "your api key"
solution = capsolver.solve({
    "type": "ReCaptchaV2TaskProxyLess",
    "websiteKey": "6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9",
    "websiteURL": url,
})
token = solution["gRecaptchaResponse"]
print(f"Token returned by capsolver: {token}")

# 修改Textarea的display样

式属性为block,使其可见
driver.execute_script("document.getElementById('g-recaptcha-response').style.display = 'block';")
# 模拟向Textarea输入Token
textarea = driver.find_element(By.ID, "g-recaptcha-response")
textarea.send_keys(token)

# 模拟点击并提交表单
submit_btn = driver.find_element(By.CSS_SELECTOR, "button[type='submit']")
submit_btn.click()
input("按任意键退出.")
driver.close()

以上代码演示了如何在Python Selenium中使用Capsolver API解决reCAPTCHA。成功解决后,您将看到以下页面:
在这里插入图片描述

方法2:使用Capsolver扩展解决CAPTCHA

方法1涉及使用Capsolver API解决CAPTCHA,包含许多复杂的操作。如果您正在寻找一种更简单、更方便的解决CAPTCHA的方式,那么Capsolver扩展是您的最佳选择。它可以轻松集成到Chrome和Firefox等浏览器中。Capsolver扩展可以自动识别并解决各种CAPTCHA挑战,无需任何人工干预,让您享受Capsolver的CAPTCHA解决服务,而无需编写任何代码。

我们以FunCaptcha为例,使用目标网页

下载和重新打包Capsolver扩展

由于我们在Selenium中使用Capsolver扩展,我们需要从Capsolver的官方GitHub下载zip文件。使用Capsolver扩展需要您在以下位置输入您的API密钥:
在这里插入图片描述

在Selenium中与浏览器扩展进行交互可能会非常麻烦,因此我们可以在扩展的配置文件中预填写API密钥,然后直接在Selenium中加载它。解压缩我们下载的Capsolver扩展zip文件,并在\assets\config.js文件中输入您的API密钥,如下图所示:
在这里插入图片描述

接下来,我们使用Chrome内置的扩展打包功能重新打包Capsolver扩展。请注意,您不能简单地将文件夹压缩回zip文件;这样的扩展是无法使用的。在Chrome中,访问chrome://extensions/,启用开发者模式,选择打包扩展选项,并导入整个Capsolver扩展文件夹。重新打包后,您将获得一个.crx文件。
在这里插入图片描述

在Selenium中使用Capsolver扩展

使用add_extension方法加载新打包的.crx格式Capsolver扩展。示例代码如下:

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_extension(r"C:\path\to\CapSolver.Browser.Extension-chrome-v1.14.0.crx")
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://iframe.arkoselabs.com/3117BF26-4762-4F5A-8ED9-A85E69209A46/index.html")

input("按任意键退出.")
driver.close()

运行代码,您将看到Capsolver扩展自动解决FunCaptcha挑战:
在这里插入图片描述

CapsolverCN官 方代理交流扣 群:497493756

结论

无论是使用Capsolver API还是Capsolver扩展,您都可以在Python Selenium中完美解决CAPTCHA问题。如有任何疑问,请参考Capsolver文档获取更多有用信息。

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

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

相关文章

Mac本地部署大模型-单机运行

前些天在一台linux服务器(8核,32G内存,无显卡)使用ollama运行阿里通义千问Qwen1.5和Qwen2.0低参数版本大模型,Qwen2-1.5B可以运行,但是推理速度有些慢。 一直还没有尝试在macbook上运行测试大模型&#xf…

ARIES,数据恢复算法,万变不离其宗...

今天来聊两个问题: 1. 如果缓冲池(buffer pool)满了,哪些数据页(page)要刷盘,哪些数据页不刷盘? 2. 数据库崩了,怎么利用检查点(checkpoint)与预写…

MATLAB环境下4种噪声生成

生成噪声包括: 1)粉红色(闪烁)噪声-功率谱密度斜率-3 dB/oct。, - 10db /dec 2)红色(布朗)噪声-功率谱密度斜率-6 dB/oct。, - 20db /dec 3)蓝色噪声-功率谱密度斜率3 dB/oct。, 10db /dec 4)紫色(紫色)噪声-功率谱密度斜率 6db /oct。&…

鸿蒙如何打包应用程序

总结鸿蒙应用程序包 之前文章详细讲解了关于三种程序包的内容,现在简单总结一下: 1. 总结 首先需要搞清楚鸿蒙项目的模块Module的分类: Module分为“Ability”和“Library”两种类型 HAP HAP: Harmony Ability Package , 叫做鸿蒙Ability包。 “Abil…

【虚幻引擎】UE4初学者系列教程开发进阶实战篇——生存游戏案例

一、课程体系 1 学前必读 2 Character类相关基础 -人物移动控制 -动画蓝图 3 常见游戏机制基础 -碰撞器、触发器 -物体使用接口 -视角切换 4其他相关设计 -背包系统 -锻造系统 -物体破碎效果 -简易种植系统 -互动物体动画 5课程结语 二、UI部分 思维导图部分 实操部分 …

若依多数据源原理分析

首先,想明白不同的接口想要使用不同的数据源。 那么自然想到了AOP,自定义注解。 通过自定义注解标注当前方法到底使用的是哪个数据源。 上面是前置条件。 看下若依是怎么处理的: 1.定义自定义注解,以及对应的多数据源的枚举类…

p标签文本段落中因编辑器换行引起的空格问题完美解决方案

目录 1.修改前的代码:2.修改后的代码3.总结 在HTML文档中,如何要在(p标签)内写一段很长的文本段落,并且没有 换行。由于IDE或者编辑器界面大小有限或需要在vue中逻辑处理动态显示文本,一行写完太长&#x…

深入浅出 LangChain 与智能 Agent:构建下一代 AI 助手

我们小时候都玩过乐高积木。通过堆砌各种颜色和形状的积木,我们可以构建出城堡、飞机、甚至整个城市。现在,想象一下如果有一个数字世界的乐高,我们可以用这样的“积木”来构建智能程序,这些程序能够阅读、理解和撰写文本&#xf…

在RT-Thread-Studio中添加arm_math库

1.在CMSIS\Lib\GCC中找到对应的库,如本文使用的libarm_cortexM4lf_math.a。将库拷贝到工程,并做如下图设置。搜索路径为库文件在项目中的实际位置。 2.将CMSIS\DSP\Include下的文件复制到工程目录中,并添加包含路径 3.添加宏定义&#xff0c…

【MySQL】MySQL 9.0悄悄的来了

MySQL 9.0.0 中的变化 MySQL 9.0 中的新功能 JavaScript 存储程序 MySQL 企业版现在支持用 JavaScript 编写的存储程序,例如使用 CREATE FUNCTION下面显示的语句和 JavaScript 代码创建的这个简单示例: CREATE FUNCTION gcd(a INT, b INT) RETURNS …

【PTGui、Pano2VR6、UE4】VR全景拍摄及漫游交互制作操作实例(更新中)

一、基本思路 首先进行VR全景拍摄,获取高质量的全景图像;然后使用PTGui进行图像拼接,确保图像的连续性与准确性;接着利用Pano2VR6进行VR漫游的制作,添加交互元素与多媒体内容;最后进行作品的调试与优化&am…

11.SQL注入-盲注基于(base on boolian)

SQL注入-盲注基于boolian案例利用 首先总结一下sql语句中的函数意思 #查看当前所在的数据库 mysql> select database(); ------------ | database() | ------------ | pikachu | ------------ 1 row in set (0.00 sec)#函数substr里1是从第几位开始取字符,2…

时序模型综述论文

时序模型综述论文: A Survey of Time Series Foundation Models: Generalizing Time Series Representation with Large Language Model

抖音矩阵智能剪辑系统源码,saas多平台多账号一站式管理,系统搭建流程

‘1. 将MySQL升级至5.6版本,PHP更新至7.2版本,并使用Apache作为服务器。数据库应命名为“juzhen”。 2. 在Nginx环境下,实现伪静态的切换。 3. 将安装包解压至项目的根目录,并定位至application/database.php文件以更换数据库密…

Linux shell编程学习笔记62: top命令 linux下的任务管理器

0 前言 top命令是Unix 和 Linux下常用的性能分析工具,提供了一个动态的、交互式的实时视图,显示系统的整体性能信息,以及正在运行的进程的相关信息,包括各个进程的资源占用状况,类似于Windows的任务管理器。 1 top命令…

JVM原理(十五):JVM虚拟机静态分配与动态分配

1. 分派 本节讲解的分派调用过程将会揭示多态性特征的一-些最基本的体现,如“重载”和“重写”在Java虚拟机之中是如何实现的。 1.1. 静态分派 案例: 我们先来看一段代码: Human mannew Man(); 我们把上面代码中的“Human"称为变量的“静态类型…

前端面试8

基础知识 解释一下什么是跨域问题,以及如何解决? 跨域问题是由于浏览器的同源策略限制了从一个源加载的网页脚本访问另一个源的数据。解决方法包括使用JSONP、CORS(跨源资源共享)、设置代理服务器等。 描述一下事件冒泡和事件捕获…

企业搭建知识库:解锁无限潜力的钥匙

在当今这个信息爆炸的时代,企业如何高效地管理、传播与利用知识,已成为衡量其竞争力的重要标尺。知识库,作为这一背景下的产物,正逐步成为企业不可或缺的数字资产。它不仅是一个自助式的数字门户,更是连接员工、客户与…

编程建模文件

你可以在MATLAB命令提示符下以编程方式执行大多数Simulink建模基础。与基本建模操作(如创建模型、向模型添加块和设置参数)相对应的命令列在“模型编辑基础知识”的“功能”部分中。这些示例显示了其中一些命令以及如何使用它们。 加载模型 加载模型会…

【Sping Boot2】笔记

Spring Boot 2入门 如何创建一个Spring Boot的Web例子?1.如何创建一个Spring Boot项目1.1 使用Maven构建一个Spring Boot 2项目1.1.1创建Maven工程注:Maven项目结构: 1.1.2引入SpingBoot相关依赖依赖注意事项: 1.1.3创建主类1.1.4…