首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Puppeteer中的page.evaluate内循环

在Puppeteer中的page.evaluate内循环
EN

Stack Overflow用户
提问于 2019-09-03 14:33:58
回答 1查看 1.3K关注 0票数 1

我在page.evaluate方法中有一个循环。该循环迭代查询选择器,该选择器从页面中的文本元素的多个实例中捕获innerText。

我收到一个错误评估失败:无法读取'innerText‘的属性

我试图在page.evaluate外部循环,但无法从page.evaluate函数中访问我的迭代变量。

//以下是我试图实现的目标的粗略草稿:

代码语言:javascript
运行
复制
    const scrapeData = [];
    const data = await page.evaluate(() => {

    // Iteration to capture each target text in the page  
    for (var i = 1; i < 9; i++) {

        // Select target text 
        const serpDesc = document
        .querySelector(
          `#rso > div:nth-child(4) > div > div:nth-child(${i}) > div > div > div.s > div > span`
        )
        .innerText.trim();

      // Build an array for the captured text
      scrapeData[i] = serpDesc

      return {
        serpDesc
      };
    };
  });

我的目标是将页面中的一些链接描述(纯文本)放入一个数组中。没有迭代代码,一切都很好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-03 22:11:15

尝试:

代码语言:javascript
运行
复制
const serpDesc = await page.evaluate(
  () => [...document.querySelectorAll(`#rso > div:nth-child(4) > div > div:nth-child(${i}) > div > div > div.s > div > span`)].map(elem => elem.innerText)
);

您可能需要重新构造选择器,或者可能需要将serpDesc函数包装在for offorEach循环中。

你也可以尝试像这样的东西

代码语言:javascript
运行
复制
async function elSelector(i) {
            //Where i is the incremented value you pass
            
            await page.evaluate((i) => {
            
                let eval = $('yourSelector').toArray();
                $(eval[i]).innerText
            }, i)

        }
        
for (i=0; i<9; i++) {
  elSelector(i);
  }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57766156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档