Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Puppeter中迭代html标记以获得带有通配符的innerText?_Javascript_Node.js_Puppeteer - Fatal编程技术网

Javascript 如何在Puppeter中迭代html标记以获得带有通配符的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

出于教育目的,我正在尝试获取本页的评论。我每页有10条评论,我有一组html选择器(我的代码用于获取每页的所有10条评论,但页面已更新):

改变的两件事是评论id和第四个div(介于第n个子项4和第5之间,我不知道这些是否也会影响innerText的结果。我试图得到这些元素的内部文本,但我没有运气。我目前使用的代码是:

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好的,谢谢你的建议。我更新了帖子。看起来你可以通过class
prw\u reviews\u text\s获取所有元素summary\u hsx
with
document.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);
}