查找回调代码

问题描述 投票:0回答:1

我试图从这个页面获取数据

https:/ahrefs.combacklink-checker。

它基本上是一个网站,以检查一个域名排名和其他状态,当你输入一个域名,并点击检查。Check backlinks 按钮,它显示了一个谷歌验证码

我使用一个验证码服务来绕过这个问题,问题是这个网站使用一个回调的验证码完成,当我从我的api接收到的token,并把它放在它的 #g-recaptcha-response 我必须调用回调继续前进,没有提交按钮。

我曾经在这个对象中找到回调。

___grecaptcha_cfg.clients[0].L.L.callback

姑且称之

page.evaluate(`___grecaptcha_cfg.clients[0].L.L.callback("${cap}")`)

但最近这个object却不见了踪影

我得到 Evaluation failed: TypeError: Cannot read property 'L' of undefined

任何想法?

enter image description here

javascript node.js puppeteer recaptcha captcha
1个回答
1
投票

当我检查了那个网址,当验证码在屏幕上,然后里面的对象是 ___grecaptcha_cfg.clients[0] 在回调的地方是不同的,即。L 是不存在的 ___grecaptcha_cfg.clients[0],这就是为什么你可能会得到错误。所以想到了导航到 callback 对象的类型,而不是直接访问。

const client = ___grecaptcha_cfg.clients[0]
const keys = Object.keys(client)
const requiredKey = keys.find(key => client[key].constructor.name === "VK");

const requiredObj = client[requiredKey];

const callbackObjKey = Object.keys(requiredObj).find(key => requiredObj[key].callback);
requiredObj[callbackObjKey].callback("${cap}")

希望能帮到你。

enter image description here我修改了代码,用下面的方法找到了 callback 对象,虽然这个方法没有那么优化,但这是我能想到的找出 callback 办法

const reduceObjectToArray = (obj) => Object.keys(obj).reduce(function (r, k) {
        return r.concat(k, obj[k]);
}, []);

const client = ___grecaptcha_cfg.clients[0]
let result = [];
result = reduceObjectToArray(client).filter(c => Object.prototype.toString.call(c) === "[object Object]")

result = result.flatMap(r => {
    return reduceObjectToArray(r)
})

result = result.filter(c => Object.prototype.toString.call(c) === "[object Object]")

const reqObj = result.find( r => r.callback)
reqObj.callback("${cap}")

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.