木偶-单击div不起作用

时间:2018-08-09 19:40:21

标签: node.js puppeteer

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

这是html元素。 Onclick事件(devtool属性)在具有路由的div上(类route-redirect-box)

如何单击此链接转到“ 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>

我的代码:

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); 
});

1 个答案:

答案 0 :(得分:2)

您拼写错误的myArray.sort(myFunction.apply(null, [,,false]))。应该是Promise.all

但是您可能不需要使用Permise.all,因为您可以简单地await您调用的Puppeteer方法。

此外,由于onclick事件是附加到Promise.all元素上的,因此您可以使用page.click()page.evaluate()单击该元素:

.route-redirect-box

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

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

await page.evaluate(() => {
  document.querySelector('.route-redirect-box').click();
});

另一种替代解决方案是,如果您知道将要执行的功能onclick,则可以只在page.evaluate()内执行功能本身:

await page.goto('https://example.com/main/listachamado/');