Javascript 如何显示给定div的所有结果,而不仅仅是一个puppeter
对不起,文件对我来说有点不明白 我用这个论点:Javascript 如何显示给定div的所有结果,而不仅仅是一个puppeter,javascript,node.js,puppeteer,Javascript,Node.js,Puppeteer,对不起,文件对我来说有点不明白 我用这个论点: const myDiv = await page.$$eval(".myDiv", myDiv => myDiv.textContent); 但是当此div的结果大于10时,console.log将只返回一个结果 我如何显示它们 编辑//这是我学习的代码 const puppeteer = require('puppeteer'); (async () => { const browser = await p
const myDiv = await page.$$eval(".myDiv", myDiv => myDiv.textContent);
但是当此div的结果大于10时,console.log将只返回一个结果
我如何显示它们
编辑//这是我学习的代码
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('mypage');
// await page.screenshot({path: 'example.png'});
await page.waitForSelector(".myDiv");
const myDiv = await page.$eval(".myDiv", myDiv => myDiv.textContent);
console.log(myDiv);
await browser.close();
})();
因为您没有提供更多的代码,所以这个答案相当固执己见,可能无法解决您的问题。但它向你展示了一种如何理解正在发生的事情的方法 Ex特别是在开发中,结合使用
page.exposeFunction()
和page.evaluate()
来查看浏览器和节点/木偶程序中的情况非常有用。
这是一份草稿,我希望它能帮助你理解
(async () => {
function executedInNodeContext(result) {
//this prints in the Node Console
console.log(result);
}
function executedInBrowserContext() {
console.log('Im in the Browser');
const myDiv = [...document.querySelectorAll('.myDiv')];
window.nameOfNodeFunction(myDiv);
}
// See the browser
const browser = await puppeteer.launch({ headless: false });
// Create a new page
const page = await browser.newPage();
// Callback in Node Context
await page.exposeFunction('nameOfNodeFunction', executedInNodeContext);
// Send puppeteer to a Url
await page.goto('http://localhost/awesome/URL');
// Function executed in the Browser on the given page
await page.evaluate(executedInBrowserContext);
})();
因为您没有提供更多的代码,所以这个答案相当固执己见,可能无法解决您的问题。但它向你展示了一种如何理解正在发生的事情的方法 Ex特别是在开发中,结合使用
page.exposeFunction()
和page.evaluate()
来查看浏览器和节点/木偶程序中的情况非常有用。
这是一份草稿,我希望它能帮助你理解
(async () => {
function executedInNodeContext(result) {
//this prints in the Node Console
console.log(result);
}
function executedInBrowserContext() {
console.log('Im in the Browser');
const myDiv = [...document.querySelectorAll('.myDiv')];
window.nameOfNodeFunction(myDiv);
}
// See the browser
const browser = await puppeteer.launch({ headless: false });
// Create a new page
const page = await browser.newPage();
// Callback in Node Context
await page.exposeFunction('nameOfNodeFunction', executedInNodeContext);
// Send puppeteer to a Url
await page.goto('http://localhost/awesome/URL');
// Function executed in the Browser on the given page
await page.evaluate(executedInBrowserContext);
})();
您可以使用:
constmydiv=wait page.evaluate(()=>{
const divs=Array.from(document.querySelectorAll('.myDiv'))
返回divs.map(d=>d.textContent)
});
传递到页面的函数。evaluate
将被序列化并发送到浏览器,因此它在浏览器上下文(非节点)中执行。您可以使用:
constmydiv=wait page.evaluate(()=>{
const divs=Array.from(document.querySelectorAll('.myDiv'))
返回divs.map(d=>d.textContent)
});
传递到页面的函数。evaluate
将被序列化并发送到浏览器,因此它在浏览器上下文(而不是节点)中执行。页面。$$eval()
在其回调中发送一个包含元素的数组,因此您需要类似以下内容来获取所有元素数据:
constmydivs=wait page.$$eval(“.myDiv”,divs=>divs.map(div=>div.textContent));
页面。$$eval()
在其回调中发送一个包含元素的数组,因此您需要这样的内容来获取所有元素数据:
constmydivs=wait page.$$eval(“.myDiv”,divs=>divs.map(div=>div.textContent));
提供更多信息。可能不是所有div都有文本内容?尝试constmydiv=wait page.$$eval(“.myDiv”,myDiv=>myDiv)
查看选择器是否与所有div匹配。请更具体,并显示更多的代码。确实不可能回答这个问题,使用这个小snipedit返回给我[{}、{}、{}、{}、{}、{}、{}、{}、{}、{},以及同样的东西,但是使用一个$(wait page.$eval),它将错误返回给我错误:错误:找不到匹配选择器的元素“.myDiv”提供更多信息。可能不是所有的div都有文本内容?请尝试const myDiv=wait page.$$eval(“.myDiv”,myDiv=>myDiv);
查看您的选择器是否匹配所有div。请更具体一些,显示更多代码。确实不可能回答,因为这个小的snipedit返回给我[{},{},{},{},{},{},{},{},{},{},以及同样的东西,但是使用一个$(wait page.$eval),它会将错误返回给我错误:错误:找不到与选择器“.myDiv”匹配的元素