在 python3 中将 GeeTestTask(python3_anticaptcha) 与 selenium 集成

Integrate GeeTestTask(python3_anticaptcha) with selenium in python3

我有一个关于 python3_anticaptcha 的问题(api 由 anti-captcha.com 提供),在网上搜索,找到支持并尝试了一个多月但没有成功。

API 文档: https://anticaptcha.atlassian.net/wiki/spaces/API/pages/416972814/GeeTestTaskProxyless+-+captcha+from+geetest.com+without+proxy

我在一个网站上做一个自动登录,复制api反验证码的文档:

def runGee(self, challenge):
    print("start gee")
    try:

        # Enter the key to the AntiCaptcha service from your account. Anticaptcha service key.
        ANTICAPTCHA_KEY = "mycode"
        # обязательные параметры
        websiteURL = "https:\/\/www.nike.com.hk"
        gt = "2328764cdf162e8e60cc0b04383fef81"
        print("sloving1")
        print("challenge:" ,challenge)
        # пример работы с GeeTestTask без прокси
        result = GeeTestTaskProxyless.GeeTestTaskProxyless(anticaptcha_key=ANTICAPTCHA_KEY,
                                                           websiteURL=websiteURL,
                                                           gt=gt).captcha_handler(challenge=challenge)
        print("sloving2")
        print(result)
        print("--end gee--")
    except Exception as err:
        print(err)
        print("--end with error--")

然而,geetask 启动超过 3 分钟(或更长时间),并且每次都出错。通常错误代码如:

{'errorId': 34, 'errorCode': 'ERROR_TOKEN_EXPIRED', 'errorDescription': 'Captcha provider 
reported that additional variable token has expired.', 'taskId': 1204556667}

{'errorId': 12, 'errorCode': 'ERROR_CAPTCHA_UNSOLVABLE', 'errorDescription': '  Captcha 
could not be solved by 5 different workers.', 'taskId': 1204060350}

..等等

取决于我传递的参数。

我可以知道我是否将正确的值传递给了 geetask?还是代码有问题? 此外,如果 geetest return 是正确的值,我需要做任何其他事情来传递验证码(或将代码传递给 geetest 服务器)或 GeeTestTaskProxyless 已经完成(什么都不做)?

这对我来说太难了,有没有人成功地使用过这个api?谢谢

在我看来,这些错误是由于代理(如果您使用任何代理)或 IP 错误造成的。 就个人而言,我使用另一个验证码服务,但我没有遇到这样的问题。 我建议你尝试一下,它实际上更容易:https://2captcha.com/2captcha-api#solving_geetest

您应该发送这样的请求:

https://2captcha.com/in.php?key=1abc234de56fab7c89012d34e56fa7b8&method=geetest&gt=f1ab2cdefa3456789012345b6c78d90e&challenge=12345678abc90123d45678ef90123a456b&api_server=api-na.geetest.com&pageurl=https://www.example.com/page/

你需要完成的是从中得到正确的答案,就像这个:

{ "challenge":"1a2b3456cd67890e12345fab678901c2de", "validate":"09fe8d7c6ba54f32e1dcb0a9fedc8765", "seccode":"12fe3d4c56789ba01f2e345d6789c012|jordan" }

然后您只需要在网站上实施该答案即可。刚看完我给你的第一个link

干杯。

问题不在反验证码中,而是在 geetest 提供程序中。 令牌挑战者只能使用一次,当您的浏览器加载 geetest 验证码时,它会使令牌过期。 要解决这个问题,你只需要在你的浏览器中屏蔽消耗token的请求即可。 转到 devtools 并在浏览器中添加 geestest 验证码 API 的块,如下所示:

您可以使用以下命令将其自动集成到 selenium 中:

driver.execute_cdp_cmd('Network.setBlockedURLs', {"urls": ["api.geetest.com/get.php"]})
driver.execute_cdp_cmd('Network.enable', {})