📜  chromedriver 无法进行音频 recaptcha (1)

📅  最后修改于: 2023-12-03 14:59:55.772000             🧑  作者: Mango

chromedriver 无法进行音频 reCAPTCHA

问题描述

在使用 chromedriver 进行访问需要进行音频 reCAPTCHA 验证的网站时,会遇到无法进行音频验证的问题,导致程序无法正常运行。

例如,在使用 selenium 库访问 Google 搜索时,可能会遇到类似以下错误信息:

selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find iframe with recaptcha challenge audio
问题原因

reCAPTCHA 是 Google 开发的用于防止恶意机器人攻击的一种验证方式。其中,音频 reCAPTCHA 是一种人类可听的音频回答的验证方式,用于验证访问者是否为人类。

在使用 chromedriver 进行自动化访问时,很难模拟用户进行音频回答的操作。因此,无法用程序自动完成音频 reCAPTCHA 验证。

解决方案
方案一:手动验证

在遇到音频 reCAPTCHA 时,需要手动进行验证。可以通过以下步骤手动验证:

  1. 程序在遇到音频 reCAPTCHA 时,会弹出一个 reCAPTCHA 生成的网页
  2. 在该网页中,点击“听音频”按钮
  3. 通过听音频的方式获得验证码,并手动输入验证码
  4. 点击“提交”按钮完成验证

由于需要手动操作,因此该方案无法实现完全自动化。

方案二:使用第三方验证码识别服务

还可以使用第三方验证码识别服务,如 2CaptchaDeathByCaptcha 等,来实现自动化验证码识别。这些服务可以通过 API 接口实现与程序的集成。使用该方案需要费用支持。

以下是使用 2Captcha 识别音频 reCAPTCHA 的示例代码:

import requests

# 替换为你自己的 API KEY
API_KEY = 'YOUR_API_KEY'

# 获取 reCAPTCHA 网页的 URL
url = driver.current_url

# 将 URL 传递给 2Captcha API,并等待识别结果
response = requests.post('http://2captcha.com/in.php', data={
    'key': API_KEY,
    'method': 'userrecaptcha',
    'googlekey': 'reCAPTCHA_site_key',
    'pageurl': url,
    'json': 1,
})
result_id = response.json()['request']

while True:
    # 间隔 5 秒进行循环,直到识别结果获取为止
    response = requests.get(f'http://2captcha.com/res.php?key={API_KEY}&action=get&id={result_id}&json=1')
    if response.json()['status'] == 1:
        captcha_text = response.json()['request']
        break
    time.sleep(5)

# 输入验证码并点击提交按钮
driver.find_element_by_css_selector('#audio-response').send_keys(captcha_text)
driver.find_element_by_css_selector('#recaptcha-verify-button').click()

此处,reCAPTCHA_site_key 是要访问的网站的 reCAPTCHA site key,可以在源代码中找到。

总结

音频 reCAPTCHA 验证无法用 chromedriver 自动化完成,但可以通过手动验证和第三方验证码识别服务实现自动化。选择合适的方案根据实际需求和条件权衡。