为了账号安全,请及时绑定邮箱和手机立即绑定

如何显示给定 div 的所有结果,而不仅仅是一个 - puppeter

如何显示给定 div 的所有结果,而不仅仅是一个 - puppeter

牧羊人nacy 2022-12-09 19:52:34
对不起,文档对我来说有点难以理解。我使用的论点:const myDiv = await page.$$eval(".myDiv", myDiv => myDiv.textContent);但是 console.log 只会返回一个结果,而此 div 的结果 >10。我如何显示它们?编辑//这是我正在学习的代码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();})();
查看完整描述

3 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

您可以使用page.evaluate:


const myDiv = await page.evaluate(() => {

  const divs = Array.from(document.querySelectorAll('.myDiv'))

  return divs.map(d => d.textContent)

});

传递给的函数page.evaluate将被序列化并发送到浏览器,因此它在浏览器上下文(而不是节点)中执行。


查看完整回答
反对 回复 2022-12-09
?
倚天杖

TA贡献1828条经验 获得超3个赞

由于您没有提供更多代码,因此这个答案非常自以为是,可能无法解决您的问题。但它向您展示了一种了解正在发生的事情的方法。


特别是在开发过程中,结合使用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);

})();


查看完整回答
反对 回复 2022-12-09
?
波斯汪

TA贡献1811条经验 获得超4个赞

page.$$eval()在其回调中发送一个包含元素的数组,因此您需要这样的东西来获取所有元素数据:

const myDivs = await page.$$eval(".myDiv", divs => divs.map(div => div.textContent));


查看完整回答
反对 回复 2022-12-09
  • 3 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号