无法在puppeteer中执行jquery代码



我需要在表中单击一个带有的锚标记。该锚标签位于tr.的最后td中的第一个元素

我可以使用jQuery,但当我试图用Puppeter执行同样的操作时,我遇到了问题,你能帮我吗。

我的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);

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

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

最新更新