Javascript 如何在Puppeter中迭代html标记以获得带有通配符的innerText?
出于教育目的,我正在尝试获取本页的评论。我每页有10条评论,我有一组html选择器(我的代码用于获取每页的所有10条评论,但页面已更新): 改变的两件事是评论id和第四个div(介于第n个子项4和第5之间,我不知道这些是否也会影响innerText的结果。我试图得到这些元素的内部文本,但我没有运气。我目前使用的代码是:Javascript 如何在Puppeter中迭代html标记以获得带有通配符的innerText?,javascript,node.js,puppeteer,Javascript,Node.js,Puppeteer,出于教育目的,我正在尝试获取本页的评论。我每页有10条评论,我有一组html选择器(我的代码用于获取每页的所有10条评论,但页面已更新): 改变的两件事是评论id和第四个div(介于第n个子项4和第5之间,我不知道这些是否也会影响innerText的结果。我试图得到这些元素的内部文本,但我没有运气。我目前使用的代码是: const comentarios = 'div[id^=review_] > div:nth-child(1) > div:nth-child(2) > di
const comentarios = 'div[id^=review_] > div:nth-child(1) > div:nth-child(2) > div:nth-child(5) > div:nth-child(1) > p:nth-child(1)'
const comnetarioLength = 'partial_entry';
let listLength = await page.evaluate((sel) => {
window.scrollBy(0, window.innerHeight);
return document.getElementsByClassName(sel).length;
}, comnetarioLength);
console.log(listLength);
以下是我的旧代码,以前可以使用,但是页面已经更新,我不知道我到底要做什么,因为我只得到每个页面的第一个内部文本:
for (let i = 1; i <= listLength; i++) {
let selectorComentarios = comentarios.replace("Index", i); //<--I know
//this is supposed to be different
let comentario = await page.evaluate((sel) => { // Let's create variables and store values...
try {
let comentarioText = document.querySelector(sel).innerText;
return comentarioText;
}
catch (e) { }
}, selectorComentarios);
console.log(comentario);
}
for(让i=1;i类似于这样的内容?此脚本输出一个包含前10条评论的数组
“严格使用”;
const puppeter=require('puppeter');
(异步函数main(){
试一试{
const browser=wait puppeter.launch();
const[page]=wait browser.pages();
等待页面。转到('https://www.tripadvisor.es/Restaurant_Review-g294308-d4754017-Reviews-or10-TAC_ROLL-Quito_Pichincha_Province.html');
const reviews=wait page.evaluate(
()=>[…document.querySelectorAll('p.partial_entry')]
.map(({innerText})=>innerText)
)
控制台日志(评论);
等待浏览器关闭();
}捕捉(错误){
控制台错误(err);
}
})();
也许值得提供一个页面URL和需要获取的元素的屏幕截图。innerText
的部分代码片段很难完全理解任务。@vsemozhetbyt好的,谢谢你的建议。我更新了帖子。看起来你可以通过classprw\u reviews\u text\s获取所有元素summary\u hsx
withdocument.getElementsByClassName('prw\u reviews\u text\u summary\u hsx'))
,它返回10条注释,只需在NodeList上迭代即可获得每个元素的内部文本。似乎连'p.partial_entry'
选择器都可以使用。太棒了!它解决了我的问题。我本来打算走很长的路,但这实际上让它变得非常简单。Thx。
for (let i = 1; i <= listLength; i++) {
let selectorComentarios = comentarios.replace("Index", i); //<--I know
//this is supposed to be different
let comentario = await page.evaluate((sel) => { // Let's create variables and store values...
try {
let comentarioText = document.querySelector(sel).innerText;
return comentarioText;
}
catch (e) { }
}, selectorComentarios);
console.log(comentario);
}