【问题标题】:NodeJS/Puppeteer - Click on div by title?NodeJS/Puppeteer - 按标题点击 div?
【发布时间】:2019-03-15 21:58:43
【问题描述】:

我必须点击divtitle="Lista de Chamados"。我尝试了几种不同的方法,但没有任何效果。 div 是可拖动的,所以最后一个解决方案无法解决它(而且它不起作用)。

如何点击div title="Lista de Tarefas"(与其位置无关)?

const puppeteer = require('puppeteer');

let scrape = async () => {
    const browser = await puppeteer.launch({ headless: false });
    const page = await browser.newPage();
    const URL = 'https://dummy.br/'

    await page.goto(URL, {waitUntil: 'load'});
    console.log(page.url());

    const SELETOR_USUARIO = '#usuario';
    const SELETOR_SENHA = '#senha';
    const usuario = 'usr';
    const senha = 'pass';

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

    //console.log(page.url());

    //FAZ LOGIN:
    page.click('#login'),
    page.waitForNavigation({ waitUntil: 'networkidle0' });


    //browser.close();
};

scrape().then((value) => {
    console.log(value); 
});

--编辑

...
    //FAZ LOGIN:
    await page.click('#login'),
    //await page.waitForNavigation({ waitUntil: 'networkidle0' }) //espera nova página carregar


    await page.waitForNavigation({waitUntil: "domcontentloaded"});

    //await page.click('div[title="Lista de Tarefas"]'); //Error: No node found for selector: div[title="Lista de Tarefas"]

/*  const seletor = 'div[title="Lista de Tarefas"]';
    const botao = await page.$(seletor);
    console.log(botao); //null
    botao.click(); */

    const botao = await page.evaluate( () => {
        let b = document.querySelector('div[title="Lista de Tarefas"]');
        console.log('in>>> ' + b); // b and b[0] are NULL
    });

这是我需要点击的元素的代码:

 <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>

【问题讨论】:

    标签: javascript node.js google-chrome-devtools puppeteer headless-browser


    【解决方案1】:

    您可以使用attribute selector[title=""]page.click() 内部按标题点击元素:

    await page.click('div[title="Lista de Tarefas"]');
    

    【讨论】:

    • @tramada 关于您的编辑,page.$$() 返回一个 Promise,它解析为一个 ElementHandle 数组。这意味着您需要通过索引指定ElementHandle,您希望使用该索引来指定focus()click()
    • @tramada 另外,elementHandle.focus()elementHandle.click() 都返回 Promises,因此请确保您将 await 运算符与这两个函数一起使用。
    • 我无法使用 page.click,因为没有选择器节点,并且仍然无法使用 waitForNavigation。我只是无法点击它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    相关资源
    最近更新 更多