如何在 Selenium Python 中解决验证码 | 2024 完整指南
由于在进行网络自动化时遇到验证码是让许多人感到不知所措的问题。这些验证码专为区分人类用户和自动化脚本而设计,对于使用Selenium进行网络爬虫或自动化任务而言,无疑是一个巨大的挑战。2024年的完全指南将为您提供全面的解决方案,帮助您高效地应对这些障碍,尤其是两种常见的CAPTCHA类型,funcaptcha和recaptcha,当然我们还需要整合第三方CAPTCHA解决方案工具CapSolver。
目录
- 什么是CAPTCHA
- CAPTCHA示例
- 先决条件
- 方法1:通过Capsolver API解决CAPTCHA
- 理解HTML表单
- 处理隐藏的Textarea元素
- 获取Token
- 使用Capsolver Python SDK获取Token
- 在Selenium中使用Token
- 方法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-a
、ex-b
和g-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 capsolvercapsolver.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 webdriverchrome_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文档获取更多有用信息。
相关文章:

如何在 Selenium Python 中解决验证码 | 2024 完整指南
由于在进行网络自动化时遇到验证码是让许多人感到不知所措的问题。这些验证码专为区分人类用户和自动化脚本而设计,对于使用Selenium进行网络爬虫或自动化任务而言,无疑是一个巨大的挑战。2024年的完全指南将为您提供全面的解决方案,帮助您高…...

ASCII码对照表【2024年汇总】
🍺ASCII相关文章汇总如下🍺: 🎈ASCII码对照表(255个ascii字符汇总)🎈🎈ASCII码对照表(Unicode 字符集列表)🎈🎈ASCII码对照表&#x…...

刷题之买股票的最佳时机(leetcode)
买股票的最佳时机 动态规划入门题。 最简单的模拟式解法: class Solution { public:int maxProfit(vector<int>& prices) {//也可以换一种思路,因为只交易一次,那么找出股票最便宜的时候买入,最贵的时候卖出ÿ…...

Apache Seata透过源码解决SeataAT模式整合Mybatis-Plus失去MP特性的问题
本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 Apache Seata透过源码解决SeataAT模式整合Mybatis-Plus失去MP特性的问题 透过源码解决SeataAT…...

1.2 如何让机器说人话?万字长文回顾自然语言处理(NLP)的前世今生 —— 《带你自学大语言模型》系列
本系列目录 《带你自学大语言模型》系列部分目录及计划,完整版目录见:带你自学大语言模型系列 —— 前言 第一部分 走进大语言模型(科普向) 第一章 走进大语言模型 1.1 从图灵机到GPT,人工智能经历了什么࿱…...

【QT】按钮类控件
按钮类控件 按钮类控件1. PushButton2. Radio Button3. Check Box4. Tool Button 按钮类控件 1. PushButton 使⽤ QPushButton 表示⼀个按钮,这也是当前我们最熟悉的⼀个控件了. QPushButton 继承⾃ QAbstractButton . 这个类是⼀个抽象类. 是其他按钮的⽗类. 在…...

RedHat运维-Linux软件包管理基础-RHEL9软件包管理基础
Linux软件包管理基础-RHEL9 1. 对于RHEL9来说,软件包管理基础分为增、删、改、查四个部分。对于增来说,有:增加一个仓库的信息文件、启用一个仓库的信息文件、安装rpm包、解压rpm包、安装软件、安装软件组、更新软件。在这里先讲软件包管理中…...

uniapp----- 判断小程序版本有没有更新
const updateManager uni.getUpdateManager();// 当向小程序后台请求完新版本信息,会进行回调updateManager.onCheckForUpdate(function (res) {console.log(是否有新版本, res.hasUpdate);});// 当新版本下载完成,会进行回调updateManager.onUpdateRea…...

Spring Boot的无缝衔接:深入解析与实践
欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 🚀The begin🚗点点关注,收藏不迷路🚩 引言 在快速迭代的软件开发环境中,无缝衔接是提升开发效率、降低维护成本、增强系统稳定性的关键。Spring Boo…...

在Linux上查找文件的2个好用的命令
在Linux上查找文件,两个非常好用的命令是find和locate。 find命令 find命令非常强大,可以在指定目录下查找符合条件的文件。你可以根据文件名、文件类型、大小、修改日期等多种条件来查找文件。例如,要在当前目录及其子目录下查找所有扩展名…...

实现WebSocket聊天室功能
实现WebSocket聊天室功能 什么是WebSocket?WebSocket的工作原理服务器端实现客户端实现 在现代Web开发中,实时通信已经变得越来越重要。传统的HTTP协议由于其无状态和单向通信的特点,无法很好地满足实时通信的需求。而WebSocket协议则应运而生…...

qt opencv 应用举例
在Qt中使用OpenCV可以实现各种图像处理和计算机视觉任务。以下是一些Qt与OpenCV联合应用的具体举例: 1. 图像读取与显示 读取图像:使用OpenCV的imread函数可以方便地读取各种格式的图像文件,如.bmp、.jpg、.png等。这个函数返回一个Mat对象…...

QT5.12环境搭建与源码编译
一、概述 QT版本:QT5.12.10 Qt网址:http://download.qt.io/archive/qt/ 编译平台 ubuntu18.04 二、安装交叉编译工具链 1、获取交叉编译工具链 一般如果是编译系统如果有对应的gcc 就是用这个就可以了 比如rk3128 lin…...

Android中android.fg线程和android.ui线程分别代表什么?
Android中android.fg线程和android.ui线程分别代表什么? android.fg线程(FgThread): FgThread是Android系统中一个特殊的线程,其类定义大致为public final class FgThread extends ServiceThread。它主要用于提供一个…...

MATLAB 2024b 更新了些什么?
MATLAB 2024b版本已经推出了预览版,本期介绍一些MATLAB部分的主要的更新内容。 帮助浏览器被移除 在此前的版本,当我们从MATLAB中访问帮助文档时,默认会通过MATLAB的帮助浏览器(Help browser)。 2024b版本开始&…...

SSM高校教师教学质量评估系统-计算机毕业设计源码03344
摘要 在高等教育中,教学质量是培养优秀人才的关键。为了提高教学质量,高校需要建立一套科学、有效的教师教学质量评估系统。本研究采用 SSM技术框架,旨在开发一款高校教师教学质量评估系统。 SSM框架作为一种成熟的Java开发框架,具…...

【Linux进阶】文件系统5——ext2文件系统(inode)
1.再谈inode (1) 理解inode,要从文件储存说起。 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个…...

华为云简介
前言 华为云是华为的云服务品牌,将华为30多年在ICT领域的技术积累和产品解决方案开放给客户,致力于提供稳定可靠、安全可信、可持续创新的云服务,赋能应用、使能数据、做智能世界的“黑土地”,推进实现“用得起、用得好、用得放心…...

Doris数据库---建表、调整表结构操作
一、简介 本文章主讲创建 Doris 自维护的表的语法,以下为本人最近为数据中台接入doris所踩的坑及其解决方案,欢迎点评。 二、doris建表语法: 官网建表语法网址链接:CREATE-TABLE - Apache Doris 官网建表语法如图所示…...

《昇思 25 天学习打卡营第 11 天 | ResNet50 图像分类 》
《昇思 25 天学习打卡营第 11 天 | ResNet50 图像分类 》 活动地址:https://xihe.mindspore.cn/events/mindspore-training-camp 签名:Sam9029 计算机视觉-图像分类,很感兴趣 且今日精神颇佳,一个字,学啊 上一节&…...

实现多数相加,但是传的参不固定
一、情景 一般实现的加法和减法等简单的相加减函数的话。一般都是写好固定传的参数。比如: function add(a,b) {return a b;} 这是固定的传入俩个,如果是三个呢,有人说当然好办! 这样写不就行了! function add(a…...

Windows环境安装Redis和Redis Desktop Manager图文详解教程
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl Redis概述 Redis是一个开源的高性能键值对数据库,以其卓越的读写速度而著称,广泛用于数据库、缓存和消息代理。它主要将数据存储在内存中࿰…...

SQL Server 2022的组成
《SQL Server 2022从入门到精通(视频教学超值版)》图书介绍-CSDN博客 SQL Server 2022主要由4部分组成,分别是数据库引擎、分析服务、集成服务和报表服务。本节将详细介绍这些内容。 1.2.1 SQL Server 2022的数据库引擎 SQL Server 2022的…...

【大语言模型系列之Transformer】
🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…...

操作系统-懒汉式单例模式
懒汉式单例模式的主要好处有以下几点: 1.资源利用效率高: 只有在第一次调用 getInstance() 方法时才创建实例对象,而不是在类加载时就创建。这可以节省系统资源。 2.延迟加载: 实例对象的创建被延迟到第一次使用时,可以减少系统启动时的资源消耗。 3.线程安全: 这种…...

设计模式探索:策略模式
1. 什么是策略模式(Strategy Pattern) 定义 策略模式(Strategy Pattern)的原始定义是:定义一系列算法,将每一个算法封装起来,并使它们可以相互替换。策略模式让算法可以独立于使用它的客户端而…...

提升效能:Symfony 性能优化实用指南
Symfony 是一个功能丰富的 PHP Web 框架,但在构建高性能应用程序时,开发者需要考虑多种性能优化策略。本文将探讨一系列实用的 Symfony 性能优化技巧,帮助开发者提高应用程序的响应速度和整体性能。 1. 了解 Symfony 缓存机制 Symfony 提供…...

1.pwn的汇编基础(提及第一个溢出:整数溢出)
汇编掌握程度 能看懂就行,绝大多数情况不需要真正的编程(shellcode题除外) 其实有时候也不需要读汇编,ida F5 通常都是分析gadget,知道怎么用, 调试程序也不需要分析每一条汇编指令,单步执行然后查看寄存器状态即可 但…...

迎接AI新时代:GPT-5即将登场的巨大变革与应用前瞻
迎接AI新时代:GPT-5即将登场的巨大变革与应用前瞻 💎1. GPT-5 一年半后发布:AI新时代的来临1.1 GPT-5的飞跃:从高中生到博士生 💎2. GPT-5的潜在应用场景💎2.1 医疗诊断和健康管理💎2.2 教育领域…...

封锁-封锁模式(共享锁、排他锁)、封锁协议(两阶段封锁协议)
一、引言 1、封锁技术是目前大多数商用DBMS采用的并发控制技术,封锁技术通过在数据库对象上维护锁来实现并发事务非串行调度的冲突可串行化 2、基于锁的并发控制的基本思想是: 当一个事务对需要访问的数据库对象,例如关系、元组等进行操作…...