木偶人 - 识别重新获取验证码的挑战何时变得可见

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

使用这个reCaptcha演示页面。https:/recaptcha-demo.appspot.comrecaptcha-v2-invisible.php。

使用 puppeteer,我的目标是等待和识别何时挑战(必须从网格中选择特定的图像)在页面上变得可见。我并不是在问如何绕过或解决验证码,只是想知道什么时候它是活动的并准备好被解决。

通过DevTools,我找到了代表可见的reCaptcha挑战的HTML元素。重新验证码元素树

不幸的是,我无法让 puppeteer "找到 "特定的元素。以下代码总是打印 "未找到",即使是在浏览器中清晰可见的重新验证码和 #rc-imageselect 元素树中可见。我试验了主框架、子框架等,一直无法让 puppeteer 找到 reCaptcha 元素。

let recap = await myframe.$("body #rc-imageselect")  //.rc-imageselect-payload") // #rc-imageselect
if (recap == null) {
  console.log("imageselect NOT found")
} else {
  console.log("imageselect found")
}

为什么要这样做呢?在真实世界的页面上(不是这个演示页面),对于一些用户来说,重夺宝挑战不会被触发,只会对一些用户弹出。我的目标是识别它什么时候弹出,然后选择如何处理reCaptcha,要么解决(单独,手动),要么退缩,要么完全放弃。

如果有任何帮助木偶人代码来寻找重夺宝元素,我们将非常欢迎。谢谢你。

node.js puppeteer recaptcha chromium invisible-recaptcha
1个回答
1
投票

有一些错误从来没有去控制台,所以仍然无法识别和引起的iframe内的安全问题(这是ChromeChromium浏览器总是一个关键点)。您将需要以下安全禁用参数来启动 puppeteer,因为由于同源策略,您默认不允许进入 iframe 内部。

const browser = await puppeteer.launch({
    headless: true, args: ['--disable-web-security', '--disable-features=IsolateOrigins,site-per-process']
})

在重新验证码的情况下,这些args总是需要的。


1
投票

你不需要进入iframe的DOM,你可以通过检查iframe元素来了解。

let height = await page.evaluate(() => document.querySelector('iframe[title="recaptcha challenge"]').offsetHeight)

根据我的经验,在处理验证码的时候,你不需要用特殊的标志来启动。

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