Javascript 木偶演员querySelectorAll没有';不能正确地获取元素
我正在使用Puppeter并尝试使用Javascript 木偶演员querySelectorAll没有';不能正确地获取元素,javascript,arrays,node.js,puppeteer,Javascript,Arrays,Node.js,Puppeteer,我正在使用Puppeter并尝试使用document.querySelectorAll获取元素列表,然后循环并执行一些操作,但是,似乎我的代码中有一些错误,它要么不返回任何内容,未定义的,要么返回空的{},尽管我的元素在页面上,我的JS: let elements=wait page.evaluate(()=>document.querySelectorAll(“div[class^='my-class--'])) for(让el表示数组。from(元素)){ //做点什么 } 我的元素和页面
document.querySelectorAll
获取元素列表,然后循环并执行一些操作,但是,似乎我的代码中有一些错误,它要么不返回任何内容,未定义的
,要么返回空的{}
,尽管我的元素在页面上,我的JS:
let elements=wait page.evaluate(()=>document.querySelectorAll(“div[class^='my-class--']))
for(让el表示数组。from(元素)){
//做点什么
}
我的
元素
和页面有什么问题。在这里评估
?据我所知,Puppeter将所有HTML作为一个巨大的字符串返回。这是因为节点不在浏览器中运行,因此不会解析HTML。所以DOM选择器不起作用
要解决这个问题,您可以使用模块,它允许您像解析DOM一样使用JQuery获取元素。因为
puppeter
将所有HTML
作为字符串返回,您可以使用DOMParser
如下示例中所示
let doc=new DOMParser().parseFromString('check out','text/html');
让templateContent=doc.querySelector(“模板”);
让template=new DOMParser().parseFromString(templateContent.innerHTML,'text/html');
让target=template.querySelector(“span”);
log([templateContent,target])代码>这是否回答了您的问题?这对我来说很有效,但是,在内容加载到cheerio后,我是否可以点击网页上的按钮,并重新更新cheerio必须解析的内容?Awesome@RyanHolton!您可以完全与页面交互,但需要在page.evaluate()函数中进行交互。这是在您使用page.content()
将内容加载到变量之前-在您为Cheerio加载内容之前。因此,在page.evaluate()
函数中,您可以像往常一样与DOM交互(使用document.querySelector()
),找到要单击的按钮并运行。单击()
方法,例如document.querySelector('.\theButton')。单击()。它将单击按钮并加载新页面,但在获取内容之前给页面一些加载时间。@RyanHolton如果要从两个页面获取内容,您可能需要编写一个函数,该函数将在整个过程中运行两次。