木偶确认

Mic*_*man 4 javascript confirm puppeteer

我正在尝试学习木偶。我已经成功地编写了登录页面和一些导航的脚本。然后,我点击按钮。该页面抛出一​​个window.confirm,我希望我的脚本接受此操作以继续进行下一步,但我不知道如何操作。

谁能指出我正确的方向?

Kei*_*ith 6

在出现对话框确认时,只需在此处做一个简单的测试。只需按Enter键即可关闭对话框。

所以我们可以在puppeteer中做的就是做到这一点。我打开了一个带有确认框的快速网页,..

例如。

<div>Before confirm</div>
<script>
  window.confirm("confirm");
  document.write("<div>After Confirm</div>");
</script>
Run Code Online (Sandbox Code Playgroud)

现在我们的操纵up脚本。

await delay(1000);
await page.keyboard.press(String.fromCharCode(13));  
await page.screenshot({path: 'screenshot.png'});
await browser.close();
Run Code Online (Sandbox Code Playgroud)

上面做我的截图是

Before confirm
After Confirm
Run Code Online (Sandbox Code Playgroud)

正是我们所期望的,如果按下确认对话框。 delay只是一个简单的基于Promise的setTimeout等待,因此我们有机会出现确认对话框。

如果您当前没有诺言延迟功能,则可以使用以下功能。

const delay = (ms) =>
  new Promise((resolve) => setTimeout(resolve, ms));
Run Code Online (Sandbox Code Playgroud)

更新:不幸的是对话框无法可靠地响应按键。但是puppeter确实有一个对话框事件,我们也可以附加。

page.on("dialog", (dialog) => {
  console.log("dialog");
  dialog.accept();
});
Run Code Online (Sandbox Code Playgroud)

您甚至可以关闭,并阅读发送了哪些消息。更多信息在这里-> https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#class-dialog


fia*_*jaf 5

确认提示由confirm(<string>)位于 的全局函数触发window.confirm。该函数冻结脚本的执行,直到给出响应,然后将其返回给调用者。如果用户接受提示,则返回值将为true

由于我们正在网页中处理自定义浏览器会话,因此您可以用您想要的任何内容覆盖全局变量。

因此,在运行触发确认窗口的操作之前,请运行

await page.evaluate(`window.confirm = () => true`)
Run Code Online (Sandbox Code Playgroud)

然后当页面代码调用时,confirm()它会true立即得到响应,而不显示任何提示。