当我在Chrome控制台中使用document.querySelector时,可以获得一些信息,但是当我对puppeeter使用相同的查询时。我得到“未定义”或“承诺{}”。
const text = await page.evaluate(() => document.querySelector('div.tagCloud-slotAble.space--mv-2 > button:nth-child(1)'));
console.log(text)
谢谢
答案 0 :(得分:0)
那是因为querySelector返回一个节点。尝试返回innerText
,
const text = await page.evaluate(() => document.querySelector('div.tagCloud-slotAble.space--mv-2 > button:nth-child(1)').innerText);
console.log(text)
答案 1 :(得分:0)
据我所知,您之所以无法找回文字并输出到控制台的原因有两个:
evaluate
方法中返回值。如果您执行以下操作,这应该可以解决您的问题:
const text = await page.evaluate(() => {
const uiElement = document.querySelector('div.tagCloud-slotAble.space--mv-2 > button:nth-child(1)'));
return uiElement.textContent;
});
console.log(text);
上述功能的替代方法是使用伪造者$eval
方法,如下所示:
const elementSelector = 'div.tagCloud-slotAble.space--mv-2 > button:nth-child(1)';
const text = await page.$eval(elementSelector, (uiElement) => {
return uiElement.textContent;
});
console.log(text);
我个人更喜欢第二个选项(使用$eval
),但这是优先选择的问题。两者都做同样的事情。
请注意,在evaluate
或$eval
方法中运行的所有操作都是在您的页面上下文中执行的。它是在当前在远程浏览器中打开的网页中执行的。您基本上可以使用此方法在测试期间将新的UI元素注入您的网页,在您的网页内执行JavaScript代码,等等。
或者您可以像现在一样使用它来查找UI元素并从中返回文本内容。