Puppeteer - 单击 div 不起作用

tra*_*ada 3 node.js puppeteer

我可以登录,但我需要单击一个没有 id 的 div,但我不知道该怎么做

这是 html 元素。Onclick 事件(devtool 属性)位于具有路由(路由重定向框类)的 div 上

我怎样才能点击这个链接去“listachamados”页面?

页面html:

<div class="menu-lateral-contraido-sub-container" title="Lista de Chamados" draggable="true" style="opacity: 1;">

<div to="/main/listachamado/" class="route-redirect-box"><div class="menu-lateral-item-contraido-container cor-tema-topo-fundo ">

<div class="menu-lateral-item-contraido-icon"><i class="ellevo-icons">lista_chamado</i></div></div></div></div>

<div class="menu-lateral-item-contraido-icon"><i class="ellevo-icons">lista_chamado</i></div>
<i class="ellevo-icons">lista_chamado</i>
Run Code Online (Sandbox Code Playgroud)

我的代码:

const puppeteer = require('puppeteer');

let scrape = async () => {
    const browser = await puppeteer.launch({ headless: false });
    const page = await browser.newPage();
    await page.goto('https://notreal.br/', {waitUntil: 'load'});
    console.log(page.url());

    const SELETOR_USUARIO = '#usuario';
    const SELETOR_SENHA = '#senha';
    const usuario = 'username';
    const senha = 'password';


    await page.type(SELETOR_USUARIO, usuario);
    await page.type(SELETOR_SENHA, senha);
    //await page.waitForNavigation();


    console.log(page.url());
    await Promise.all([
        page.click('#login'),
        page.waitForNavigation({ waitUntil: 'networkidle0' })

        //page.click('.menu-lateral-item-contraido-container cor-tema-topo-fundo'),

    ]);

    await Permise.all([
      page.waitFor('load'),
      await page.evaluate(() => {
          let lista = document.getElementsByClassName('div.route-redirect-box')
          lista.click()
          //page.click(lista)
      })
    ]);

    //browser.close();
};

scrape().then((value) => {
    console.log(value); 
});
Run Code Online (Sandbox Code Playgroud)

Gra*_*ler 6

你拼错了Permise.all。它应该是Promise.all

但您可能不需要使用,Promise.all因为您只需调用await您调用的 Puppeteer 方法即可。

此外,由于onclick事件附加到.route-redirect-box元素,您可以使用page.click()page.evaluate()单击该元素:

await page.click('.route-redirect-box');

await page.evaluate(() => {
  document.querySelector('.route-redirect-box').click();
});
Run Code Online (Sandbox Code Playgroud)

或者,由于您似乎知道尝试重定向到的页面的 URL,因此您可以使用另一个页面page.goto()来手动导航:

await page.goto('https://example.com/main/listachamado/');
Run Code Online (Sandbox Code Playgroud)

另一种替代解决方案是,如果您知道将要执行的函数onclick,则可以在以下内容中执行该函数本身page.evaluate()

await page.evaluate(() => {
  function_to_be_executed_onclick();
});
Run Code Online (Sandbox Code Playgroud)