本文深入评论了运用Selenium库进行网页主动化操作,并结合2Captcha服务完结ReCAPTCHA验证码的破解。内容包含Selenium的基础知识、验证码的分类、2Captcha服务的运用,以及经过实例进行的详细讲解,最后对实践进行总结和优化考虑,为读者供给了一条完好的验证码破解实践路线图。

Selenium+2Captcha 自动化+验证码识别实战

Selenium+2Captcha 自动化+验证码识别实战

一、引言

在现代Web开发中,主动化测验和Web爬虫是很常见的使命。在这两个范畴,Selenium是一个被广泛运用的东西,能模仿浏览器操作并对Web页面进行操作和剖析。在本篇文章中,咱们将首要介绍Selenium的基础知识,然后进一步评论怎么用它来处理另一个常见的Web问题:验证码。

1.1 Selenium简介及其运用场景

Selenium是一个主动化测验东西,首要用于Web运用程序的功用和性能测验。它能够直接运行在浏览器上,支撑多种操作体系、浏览器和编程语言。除了测验,Selenium也经常被用在Web爬虫中,用于模仿和主动化浏览器操作。

from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.python.org')
assert "Python" in driver.title
driver.quit()

上面的Python代码展现了一个简略的Selenium脚本,它启动了一个Firefox浏览器,然后访问Python官方网站并查看页面标题中是否包含”Python”这个词。最后,封闭浏览器。

1.2 验证码的目的与类型

验证码,全名为”Completely Automated Public Turing test to tell Computers and Humans Apart”,是用于区别用户是机器仍是人的揭露全主动图灵测验。首要的目的是避免歹意软件和主动化脚本进行骚扰、乱用服务,或进行其他不良行为。

常见的验证码类型包含文本验证码、图形验证码、滑动验证码、点触验证码等。最近,跟着机器学习技术的开展,比如Google的ReCAPTCHA体系,供给了基于用户行为剖析的验证码服务,这大大增加了破解的难度。

在接下来的文章中,咱们将重点评论怎么运用Selenium来处理这些验证码,尤其是图形验证码和ReCAPTCHA验证码。

二、Selenium知识

Selenium是一个主动化测验东西,首要用于Web运用程序的功用测验。它能够模仿实在的用户行为,例如点击按钮,输入文字,挑选下拉菜单等等。因此,Selenium也常常被用于网页爬虫中,来处理JavaScript渲染的页面,或许模仿用户行为。

2.1 Selenium装置和配置

首要,咱们需求在咱们的机器上装置Selenium。以下是在Python环境中装置Selenium的指令:

pip install selenium

然后,咱们还需求下载对应的浏览器驱动,例如Chrome的驱动便是chromedriver。驱动的下载地址一般能够在浏览器的官方网站找到。

2.2 WebDriver简介

WebDriver是Selenium的核心部分,它是一个接口,界说了操作浏览器的一系列方法。每种浏览器都有自己的WebDriver完结,例如ChromeDriver,FirefoxDriver等等。

以下是一个简略的比如,展现了怎么运用WebDriver翻开一个网页:

from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.google.com/')

上述代码首要创立了一个FirefoxDriver的实例,然后调用了它的get方法翻开了Google的主页。

2.3 页面元素定位

Selenium供给了多种定位页面元素的方法,例如经过id、name、class name、tag name、link text、partial link text、xpath、css selector等等。

以下是一些定位元素的比如:

element = driver.find_element_by_id('id_of_element')  # 经过id定位
element = driver.find_element_by_name('name_of_element')  # 经过name定位
element = driver.find_element_by_class_name('class_of_element')  # 经过class name定位
element = driver.find_element_by_tag_name('tag_of_element')  # 经过tag name定位
element = driver.find_element_by_xpath('//div[@class="my_class"]')  # 经过xpath定位
element = driver.find_element_by_css_selector('div.my_class')  # 经过css selector定位

2.4 操作页面元素

得到了页面元素之后,咱们就能够对它进行操作了。常见的操作有输入文字、点击按钮、获取元素文本等等。

以下是一些操作元素的比如:

element.send_keys('some text')  # 输入文字
element.click()  # 点击元素
text = element.text  # 获取元素的文本

2.5 等候页面加载

在网页爬虫中,咱们经常会遇到需求等候页面加载的情况。Selenium供给了两种等候方法:显式等候和隐式等候。

以下是一个显式等候的比如:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, 'id_of_element'))
)

上述代码会等候最多10秒,直到页面中呈现了id为’id_of_element’的元素。

2.6 高档操作

Selenium还支撑一些高档操作,例如执行JavaScript代码、操作cookies、切换iframe、处理弹窗等等。

以下是一个执行JavaScript代码的比如:

driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')

上述代码执行了一个JavaScript脚本,将页面翻滚到底部。这在处理一些需求翻滚加载的网页时十分有用。

三、验证码破解:Selenium运用2Captcha服务完结ReCAPTCHA验证码破解

验证码是网络世界的一种普遍存在的安全机制,用于区别人类用户和机器。在此,咱们将结合Selenium和一个主动验证码处理方案(TwoCaptcha),来展现怎么破解一种常见的验证码——ReCAPTCHA。

1.1 2Captcha服务介绍 cn.2captcha.com

2Captcha是一种基于人工劳动力的验证码辨认服务。它供给了一个API接口,答应开发者将无法辨认的验证码发送到2Captcha服务。然后2Captcha的工人会手动辨认并回来成果。这种服务对处理图像验证码、reCAPTCHA、FunCaptcha等杂乱验证码有很高的准确率。2Captcha的首要长处是其优异的精确性和灵敏的API,使得开发者能够轻松集成并在不同环境中运用。

cn.2captcha.com

Selenium+2Captcha 自动化+验证码识别实战

支撑验证码类型

Selenium+2Captcha 自动化+验证码识别实战

支撑付出宝付出

Selenium+2Captcha 自动化+验证码识别实战

3.2 ReCAPTCHA简介

ReCAPTCHA是Google推出的一种验证码服务,它的首要特点是供给一个”我不是机器人”的复选框让用户点击。在用户点击后,ReCAPTCHA会评价用户的行为,判别用户是否为人类。假如判别用户为人类,那么验证就经过了;假如不能确定,那么就会给出一个额定的挑战,例如挑选包含某物的图片。

3.3 运用Selenium模仿用户行为

咱们能够运用Selenium来模仿用户点击”我不是机器人”的复选框。在Selenium中,咱们能够用click方法来模仿点击,例如:

checkbox = driver.find_element_by_id('recaptcha_check')
checkbox.click()

但是,这样做可能还不行,由于ReCAPTCHA会剖析用户的行为。例如,假如点击过于迅速或许机械化,那么ReCAPTCHA可能会判定为机器行为。

3.4 运用2Captcha主动处理验证码

假如ReCAPTCHA给出了额定的挑战,咱们就需求运用其他的东西来处理它。这里咱们挑选运用TwoCaptcha,它是一个能够主动处理各种验证码的服务。

在TwoCaptcha中,咱们需求供给网站的URL和网站的sitekey,然后它会回来一个处理验证码的答案,咱们能够将这个答案填回网页,完结验证。

以下是运用TwoCaptcha处理验证码的示例代码:

solver = TwoCaptcha(API_KEY)
result = solver.recaptcha(sitekey=sitekey, url=url)

3.5 结合Selenium和2Captcha破解验证码

有了Selenium和TwoCaptcha,咱们就能够结合起来,构成一个完好的处理方案。具体步骤如下:

  1. 运用Selenium翻开网页。
  2. 找到并点击”我不是机器人”的复选框。
  3. 假如呈现额定的挑战,运用TwoCaptcha处理,并将答案填回网页。

下面的代码就完结了上述的步骤:

from bs4 import BeautifulSoup
from twocaptcha import TwoCaptcha
from selenium import webdriver
API_KEY = 'your_twocaptcha_api_key'
solver = TwoCaptcha(API_KEY)
# 创立一个WebDriver实例
driver = webdriver.Firefox()
# 运用Selenium翻开网页
driver.get('https://www.example.com/')
# 找到并点击"我不是机器人"的复选框
checkbox = driver.find_element_by_id('recaptcha_check')
checkbox.click()
# 假如呈现额定的挑战,运用TwoCaptcha处理
sitekey = 'sitekey_from_webpage'
url = driver.current_url
result = solver.recaptcha(sitekey=sitekey, url=url)
# 将答案填回网页
driver.execute_script('document.getElementById("g-recaptcha-response").innerHTML="{}"'.format(result['code']))

3.6 运用Selenium主动填充验证码

Selenium与2Captcha结合,主动填充解分出的验证码。咱们能够运用Selenium定位到验证码输入框,并填充解析成果。

# 用Selenium定位验证码输入框
input_box = driver.find_element_by_id('captcha-input-box-id')
# 填入解分出的验证码
input_box.send_keys(captcha_solution)

3.7 处理图片验证码

关于图片验证码,咱们能够运用Selenium获取图片元素,并保存为本地文件。然后,咱们能够将本地文件上传到2Captcha进行解析。

# 定位到图片元素
image_element = driver.find_element_by_id('captcha-image-id')
# 将图片保存为本地文件
image_element.screenshot('captcha.png')
# 上传到TwoCaptcha进行解析
solver = TwoCaptcha(API_KEY)
result = solver.normal('captcha.png')
# 填入解分出的验证码
input_box = driver.find_element_by_id('captcha-input-box-id')
input_box.send_keys(result)

3.7 处理其他类型的验证码

除了上述说到的验证码类型外,还有一些其他类型的验证码,例如text CAPTCHA、reCaptcha V2、reCaptcha V3、HCaptcha、Funcaptcha,2Captcha服务均能够很好的处理。

Selenium+2Captcha 自动化+验证码识别实战

四、总结

经过本文,咱们学习了怎么运用Selenium库来模仿浏览器操作,并结合TwoCaptcha服务来完结ReCAPTCHA验证码的主动化破解。现在,让咱们来总结一下咱们的实践并对未来可能的优化提出一些考虑。

经过Selenium,咱们能够对浏览器进行各种杂乱的控制,从翻开网页、填写表单,到模仿点击等等。但是,当咱们遇到验证码这种需求人类参与的挑战时,咱们需求寻找额定的处理方案。

2Captcha供给了一个很好的处理方案。它能够处理各种类型的验证码,包含咱们在本文中说到的ReCAPTCHA。并且,2Captcha供给的API使得咱们能够方便地将其整合到咱们的Selenium脚本中。

如有协助,请多重视 个人微信公众号:【TechLead】共享AI与云服务研发的全维度知识,谈谈我作为TechLead对技术的独特洞悉。 TeahLead KrisChang,10+年的互联网和人工智能从业经历,10年+技术和事务团队管理经历,同济软件工程本科,复旦工程管理硕士,阿里云认证云服务资深架构师,上亿营收AI产品事务负责人。