Mic*_*man 4 javascript confirm puppeteer
我正在尝试学习木偶。我已经成功地编写了登录页面和一些导航的脚本。然后,我点击按钮。该页面抛出一个window.confirm,我希望我的脚本接受此操作以继续进行下一步,但我不知道如何操作。
谁能指出我正确的方向?
在出现对话框确认时,只需在此处做一个简单的测试。只需按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
确认提示由confirm(<string>)
位于 的全局函数触发window.confirm
。该函数冻结脚本的执行,直到给出响应,然后将其返回给调用者。如果用户接受提示,则返回值将为true
。
由于我们正在网页中处理自定义浏览器会话,因此您可以用您想要的任何内容覆盖全局变量。
因此,在运行触发确认窗口的操作之前,请运行
await page.evaluate(`window.confirm = () => true`)
Run Code Online (Sandbox Code Playgroud)
然后当页面代码调用时,confirm()
它会true
立即得到响应,而不显示任何提示。
归档时间: |
|
查看次数: |
6118 次 |
最近记录: |