无法在 puppeteer 中执行 jquery 代码

Not able to execute jquery code in puppeteer

我需要单击 table 中的锚标记。 此锚标记位于 tr 的最后一个 td 中的第一个元素。

我可以使用 jQuery 但是当我尝试使用 Puppeteer 执行相同的操作时我遇到了问题,你能帮我做同样的事情吗?

我的jQuery代码是

  $('table tr td.uname').each(function(el){

    var name  = $(this).text();

   if($.trim(name) == 'testmyself111'){
     $(this).parent().find(':last-child>a')[0].click();
   }
  });

这是我想做但无法执行的事情

      await page.addScriptTag({
        url: 'https://code.jquery.com/jquery-3.4.1.min.js'
     });
      let tr = await page.evaluate(() => {
        let results;
        let items = document.querySelectorAll('table tr td.uname');
       
             items.forEach((item) => {
            if (item.innerText == 'TESTMYSELF111') {
                results = item.parentElement;
            }
       
        });
        return results;
    });
    const anchor = await page.evaluate((tr) => {
        // get the body anchor tag 
        const atag= $(tr).parent().find(':last-child>a')[0];
        return atag;
    }, tr);
    console.log(anchor);

您不能 return Node 对象从页面返回到您的 NodeJS 脚本。您将需要执行以下操作之一:

  1. 在同一个 evaluate 调用中评估所有 on-page 脚本。
  2. 使用 puppeteer $, $$, $eval or $$eval 函数来操纵节点,而无需在浏览器的 Execution Context.
  3. 中执行脚本
  4. Return 对节点的可序列化引用(例如,可以传递到下一个 evaluate 调用的完全限定选择器或其他手动生成的节点地址。