我试图从这个页面获取数据
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
任何想法?
当我检查了那个网址,当验证码在屏幕上,然后里面的对象是 ___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}")
希望能帮到你。
我修改了代码,用下面的方法找到了 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}")