【问题标题】:How to click button of prompt of webpage in javascript?如何在javascript中单击网页提示按钮?
【发布时间】:2021-03-11 14:26:14
【问题描述】:

所以我在 node js 中使用 puppeteer 构建了这个网络自动化。这个自动化应该去缩放输入会议ID并点击加入按钮。

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({headless: false});
  const page = await browser.newPage();
  await page.goto('https://us04web.zoom.us/join');
  await page.screenshot({path: 'example.png'});
  //await browser.close();
  
  await page.type("#join-confno", "123 456 7890", {delay: 100})
  await page.click("#btnSubmit")
})();

脚本运行,运行后,浏览器打开并执行自动化操作,但弹出的内容破坏了我的整个想法:

现在我希望脚本按下“打开缩放会议” 我是节点 js 的新手。有没有办法做到这一点?

【问题讨论】:

    标签: javascript html node.js puppeteer webautomation


    【解决方案1】:

    当出现 JavaScript 对话框时(例如 alertpromptconfirmbeforeunload),Puppeteer 通过 'dialog' 事件调度 Dialog 对象。

    您可以接受一个对话框,如下所示:

    page.on('dialog', async (dialog) => {
      await dialog.accept();
    });
    

    您可以阅读dialog.message(),它会返回对话框中显示的消息,以确认您接受了正确的对话框。

    例如:

    page.on('display', async (dialog) => {
      if (dialog.message().endsWith('wants to open this application.')) {
        await dialog.accept();
      }
    });
    

    免责声明:我没有测试过这段代码,但是这样的事情应该是可能的。


    编辑:回复您的评论,您必须提前收听'dialog' 事件。

    您的示例如下所示:

    const puppeteer = require('puppeteer');
    
    (async () => {
      const browser = await puppeteer.launch({ headless: false });
      const page = await browser.newPage();
    
      page.on('dialog', async (dialog) => {
        await dialog.accept();
      });
    
      await page.goto('https://us04web.zoom.us/join');
      await page.screenshot({ path: 'example.png' });
      
      await page.type('#join-confno', '123 456 7890', { delay: 100 });
      await page.click('#btnSubmit');
    })();
    

    我用一个基本页面对其进行了测试,它使用confirm 对话框按预期工作。

    【讨论】:

    • 没有工作 :(const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch({headless: false}); const page = await browser. newPage(); await page.goto('us04web.zoom.us/join'); await page.screenshot({path: 'example.png'}); //await browser.close(); await page.type("#join-confno ", "847 319 8259", {delay: 100}) await page.click("#btnSubmit") page.on("dialog", async (dialog) => { console.log("diaogue is up") await dialog.accept(); }); })();
    • 请帮帮我,我试过你的方法,没用
    • 也许尝试将page.on("dialog"...)移动到await page.goto('us04web.zoom.us/join');之后,否则可能为时已晚。
    • @DjBilljeOfficial 正如@vsemozhebuty 正确指出的那样,您必须更早地收听'dialog' 事件。我根据您提供的示例更新了答案以包含完整的代码 sn-p。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多