找到 recaptcha 回调
finding recaptcha callback
我正在尝试从此页面获取数据
https://ahrefs.com/backlink-checker
它基本上是一个检查域排名和其他状态的网站,当您输入域并单击检查 Check backlinks
按钮时,它会显示 google 重新验证
我正在使用验证码服务来绕过这个,问题是这个网站在验证码完成时使用回调,当我从我的 api 收到令牌并将其放入我有的 #g-recaptcha-response
调用回调以继续没有提交按钮
我曾经在这个对象中找到回调
___grecaptcha_cfg.clients[0].L.L.callback
然后像
一样称呼它
page.evaluate(`___grecaptcha_cfg.clients[0].L.L.callback("${cap}")`)
但是最近找不到这个对象
我明白了
Evaluation failed: TypeError: Cannot read property 'L' of undefined
有什么想法吗?
当我检查 url 并且验证码出现在屏幕上时,___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}")
我正在尝试从此页面获取数据
https://ahrefs.com/backlink-checker
它基本上是一个检查域排名和其他状态的网站,当您输入域并单击检查 Check backlinks
按钮时,它会显示 google 重新验证
我正在使用验证码服务来绕过这个,问题是这个网站在验证码完成时使用回调,当我从我的 api 收到令牌并将其放入我有的 #g-recaptcha-response
调用回调以继续没有提交按钮
我曾经在这个对象中找到回调
___grecaptcha_cfg.clients[0].L.L.callback
然后像
一样称呼它page.evaluate(`___grecaptcha_cfg.clients[0].L.L.callback("${cap}")`)
但是最近找不到这个对象
我明白了
Evaluation failed: TypeError: Cannot read property 'L' of undefined
有什么想法吗?
当我检查 url 并且验证码出现在屏幕上时,___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}")