【问题标题】:Integrate GeeTestTask(python3_anticaptcha) with selenium in python3在 python3 中将 GeeTestTask(python3_anticaptcha) 与 selenium 集成
【发布时间】:2020-02-20 08:11:46
【问题描述】:

我对python3_anticaptcha(anti-captcha.com提供的api)有疑问,在网上搜索,找到支持并尝试了一个多月但没有运气。

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

我在一个网站上做一个自动登录,并在anti-captcha的doc上复制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返回正确的值,我需要做任何其他事情来传递验证码(或将代码传递给geetest服务器)或GeeTestTaskProxyless已经完成(不做任何事情)?

这对我来说非常困难,有人成功使用过这个 api 吗?谢谢

【问题讨论】:

    标签: python-3.x selenium captcha


    【解决方案1】:

    问题不在于反验证码,而在于 geetest 提供程序。 令牌挑战者只能使用一次,当您的浏览器加载 geetest 验证码时,令牌就会过期。 要解决此问题,您只需在浏览器中阻止使用令牌的请求。 转到 devtools 并在浏览器中添加 geestest 验证码 API 的块,如下所示:

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

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

    【讨论】:

      【解决方案2】:

      在我看来,这些错误是由于代理(如果您使用任何代理)或只是错误的 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/

      你需要归档的是从中得到正确的答案,比如这个:

      { “挑战”:“1a2b3456cd67890e12345fab678901c2de”, “验证”:“09fe8d7c6ba54f32e1dcb0a9fedc8765”, “秒码”:“12fe3d4c56789ba01f2e345d6789c012|约旦”}

      那么您只需要在网站上实现该答案。请阅读我给您的第一个链接。

      干杯。

      【讨论】:

      • 谢谢,我可能会决定更换我的提供商。但是我不是很明白“5.使用从我们的API收到的值将您的请求提交到目标网站,将值放入相应的请求字段中:”我该怎么做?
      • 好吧,据我所知(我使用其他验证码类型,主要是图形验证码和 ReCaptcha),提交您需要向您工作的站点发送 POST 请求的答案。首先,您应该在浏览器中打开网络监视器,然后手动解决验证码。您将看到发送到服务器的请求,它必须包含这 3 个参数:geetest_challenge、geetest_validate、geetest_seccode 然后,当您下次通过 2captcha 解决验证码时,您只需向站点发送相同的请求,但您输入了它这些参数来自 2captcha 的答案。
      猜你喜欢
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      • 2016-12-04
      • 2011-04-25
      • 2012-11-28
      相关资源
      最近更新 更多