用Python解决验证码

时间:2019-06-07 21:24:16

标签: python-3.x api selenium recaptcha

我正在使用反验证码服务来尝试绕过Google的ReCAPTCHA。

这段代码的结果是:

{'errorId': 0, 'status': 'ready', 'solution': {'gRecaptchaResponse': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'}, 'cost': '0.00...', 'ip': '127.0.0.1', 'createTime': 9999999999, 'endTime': 9999999999, 'solveCount': 0, 'taskId': 11111111}

使用gRecaptchaResponse键,我可以以某种方式绕过验证码,这是我从API文档中了解的内容。

我在https://www.google.com/recaptcha/api2/demo上尝试过网络分析,但是没有获得带有gRecaptchaResponse属性的GET-Request-Method。因此,我不知道如何使它正常工作,因为我不知道在哪里或如何使用从验证码旁路服务获得的gRecaptchaResponse密钥。

但是有些非主题:这怎么可能起作用?我的意思是Google通常会在每次尝试(F5)验证码时都提供一个新的验证码令牌,用于识别您的身份。因此,对我来说,将一个令牌引用到一个gRecaptchaResponse键上是合乎逻辑的。因此,如果其他人为您找到了解决方案,他可以给您gRecaptchaResponse结果键,但是该键如何适用于每个令牌?

已经在此致以最诚挚的问候!

def solveCaptcha():
    ANTICAPTCHA_KEY = "11133331111333777"
    result = NoCaptchaTaskProxyless.NoCaptchaTaskProxyless(
        anticaptcha_key=ANTICAPTCHA_KEY
    ).captcha_handler(
        websiteURL="https://www.google.com/recaptcha/api2/demo",
        websiteKey="6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
    )
    print(result)
solveCaptcha()

1 个答案:

答案 0 :(得分:0)

我想您正在通过Python(Selenium或类似工具)使用网络驱动。 您应该从Anti-Captcha帐户获得ANTICAPTCHA_KEY。它将API的访问权限授予您的反验证码积分。

我建议您将ANTICAPTCHA_KEY添加到您的环境中。在shell中执行以下命令,或将该行添加到您的bash文件(.bashrc或类似文件)

export ANTICAPTCHA_KEY="your_key"

您的代码可能是这样的:

import os 
from python3_anticaptcha import NoCaptchaTaskProxyless
from selenium import webdriver

ANTICAPTCHA_KEY = os.environ["ANTICAPTCHA_KEY"]

def solveCaptcha():
    result = NoCaptchaTaskProxyless.NoCaptchaTaskProxyless(
        anticaptcha_key=ANTICAPTCHA_KEY
    ).captcha_handler(
        websiteURL="https://www.google.com/recaptcha/api2/demo",
        websiteKey="6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
    )
    return result.get("solution").get("gRecaptchaResponse")

首先,设置webdriver,获取页面并执行将响应分配给变量的功能。

driver = webdriver.Firefox()
driver.get("https://www.google.com/recaptcha/api2/demo")
captcha_response = solveCaptcha()

您可以使用以下脚本使grecaptcha响应框可见,以便查看其是否正常运行。

driver.execute_script(
    "arguments[0].style.display='inline'",
    driver.find_element_by_xpath(
        '//*[@id="g-recaptcha-response"]'
    ),
)

然后执行脚本以将响应插入文本框:

driver.execute_script(
'document.getElementById("g-recaptcha-response").innerHTML = "%s"'
            % captcha_response
)

然后按提交按钮,您将看到成功。