首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我试图使用2 2captcha绕过funcaptcha

我试图使用2 2captcha绕过funcaptcha
EN

Stack Overflow用户
提问于 2021-03-28 02:37:15
回答 1查看 2K关注 0票数 3

我一直试图绕过卡普查,但一切努力都徒劳无功。我不知道哪个功能triger,因此它前进,因为在网站上没有提交按钮。因此,它只向前移动显示挑战完成的屏幕时,有人做手工解决。

我被注射令牌卡住了。请指导我下一步该做什么,因为我是javascript中的noob,这里有几个javascript函数,这些都是导致这一切的原因。请告诉我如何触发回调函数,以便将其移到下一页。或者完成Funcaptcha。

谢谢

代码语言:javascript
复制
var loadedCheck = 0;
function getAllUrlParams(e) {
    var t = e ? e.split("?")[1] : window.location.search.slice(1),
        a = {};
    if (t)
        for (var n = (t = t.split("#")[0]).split("&"), i = 0; i < n.length; i++) {
            var o = n[i].split("="),
                s = o[0],
                r = void 0 === o[1] || o[1];
            if (((s = s.toLowerCase()), "string" == typeof r && (r = r.toLowerCase()), s.match(/\[(\d+)?\]$/))) {
                var l = s.replace(/\[(\d+)?\]/, "");
                if ((a[l] || (a[l] = []), s.match(/\[\d+\]$/))) {
                    var c = /\[(\d+)\]/.exec(s)[1];
                    a[l][c] = r;
                } else a[l].push(r);
            } else a[s] ? (a[s] && "string" == typeof a[s] ? ((a[s] = [a[s]]), a[s].push(r)) : a[s].push(r)) : (a[s] = r);
        }
    return a;
}
function loadArkose() {
    var e = getAllUrlParams(window.location.href);
    "xbox_1" === e.uitheme
        ? navigator.__defineGetter__("userAgent", function () {
              return "Xbox_Dark";
          })
        : "xbox_2" === e.uitheme
        ? navigator.__defineGetter__("userAgent", function () {
              return "Xbox_Light";
          })
        : "win8wiz" === e.uitheme &&
          navigator.__defineGetter__("userAgent", function () {
              return "Win8Wiz";
          });
    var t = window.location.pathname.split("/"),
        a = new ArkoseEnforcement({
            public_key: t[1],
            language: e.mkt,
            target_html: "arkose",
            callback: function () {
                parent.postMessage(JSON.stringify({ eventId: "challenge-complete", payload: { sessionToken: a.getSessionToken() } }), "*");
            },
            loaded_callback: function () {
                (frameHeight = document.getElementById("fc-iframe-wrap").offsetHeight),
                    (frameWidth = document.getElementById("fc-iframe-wrap").offsetWidth),
                    "xbox_1" === e.uitheme || "xbox_2" === e.uitheme ? a.enableDirectionalInput() : e.uitheme,
                    parent.postMessage(JSON.stringify({ eventId: "challenge-loaded", payload: { sessionToken: a.getSessionToken(), frameHeight: frameHeight, frameWidth: frameWidth } }), "*"),
                    (loadedCheck = 1);
            },
            onsuppress: function () {
                parent.postMessage(JSON.stringify({ eventId: "challenge-suppressed", payload: { sessionToken: a.getSessionToken() } }), "*");
            },
            onshown: function () {
                parent.postMessage(JSON.stringify({ eventId: "challenge-shown", payload: { sessionToken: a.getSessionToken() } }), "*");
            },
        });
}
window.addEventListener("message", function (e) {
    try {
        JSON.parse(e.data);
    } catch (e) {
        return;
    }
    var t = JSON.parse(e.data);
    switch (t.eventId) {
        case "challenge-left":
        case "challenge-right":
        case "challenge-down":
        case "challenge-up":
        case "challenge-proceed":
            window.dispatchEvent(new CustomEvent("FunCaptcha-action", { detail: { action: t.payload.action } }));
    }
});
var interval = setInterval(function () {
    (frameHeight = document.getElementById("fc-iframe-wrap").offsetHeight),
        (frameWidth = document.getElementById("fc-iframe-wrap").offsetWidth),
        1 == loadedCheck && parent.postMessage(JSON.stringify({ eventId: "challenge-iframeSize", payload: { frameHeight: frameHeight, frameWidth: frameWidth } }), "*");
}, 3e3);
EN

回答 1

Stack Overflow用户

发布于 2021-06-11 11:09:19

嗯,在尝试了很多之后,我无法找到解决方案,但是突然间,反captcha api服务更新了那里的扩展。

所以这个方法对我有效。

  1. 在AntiCaptcha.com注册并获得api
  2. 从本页下载下载扩展名并设置名称anticaptcha
  3. 通过此代码段向您的selenium代码添加扩展。 co = Options() co.add_extension(os.path.abspath('anticaptcha.crx')) driver = webdriver.Chrome(options=co)
  4. 现在定义函数,它将在将api键注入到扩展中。 def acp_api_send_request(驱动程序,message_type,data={}):message ={ 'receiver':'antiCaptchaPlugin',# request类型,例如setOptions 'type':message_type,# merge with附加数据**data }返回driver.execute_script(“返回window.postMessage({});“”.format(json.dumps(讯息))
  5. 现在,在加载网站之前,您需要首先解决captcha问题,加载任何网站,这样就可以正确地注入api。像这样调用上面的函数。用Your_API_KEY_HERE文本替换api键。 acp_api_send_request(驱动程序,'setOptions',{'options':{'antiCaptchaApiKey':‘Your_API_KEY_HERE’})
  6. 现在一切都是完美的,就在captcha加载脚本时,将自动检测并解决它并提交表单。

快乐编码..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66837922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档