【问题标题】:UnhandledPromiseRejectionWarning: Error: Evaluation failed: ReferenceError: k is not definedUnhandledPromiseRejectionWarning:错误:评估失败:ReferenceError:未定义k
【发布时间】:2021-11-03 10:34:17
【问题描述】:

我正在尝试使用 for 循环。但是会出现这个错误。 “参考错误:未定义 k” 我该如何解决这个错误?

    let imageURL = [];

    for (let k = 1; k <= images.length; k++) {
      let data = await page.evaluate(() => {
        let innerHTML = document.querySelectorAll('#__layout > main > div.nuxt-container > div > div:nth-child(3) > div.item-container > div:nth-child(72) > div > div.body > div.image-container > ul > li')[k].innerHTML;
        let startIndex = innerHTML.indexOf('&quot;') + 6;
        let endIndex = innerHTML.lastIndexOf('&quot;');
        let imageLink = innerHTML.substring(startIndex, endIndex);

        return {
          image: imageLink,
        };
      });
      imageURL.push(data);
    }

【问题讨论】:

    标签: javascript for-loop


    【解决方案1】:

    假设你正在使用 puppeteer...

    var a = 3;
    await page.evaluate(() => {
      // Here you cannot use 'a', since 'a' is in the context that is different than the context where this function is going to be executed (page context)
    })
    

    如果你看一下api:

    page.evaluate(pageFunction[, ...args])
    

    您可以看到第一个参数是您将在页面上下文中执行的函数。但是您也可以看到,您可以拥有将传递给 pageFunction 的参数 (args)。

    您应该这样做:

    var a = 4;
    await page.evaluate((a) => {
      // Now you can use outer 'a' variable through argument passed 
    }, a);
    

    因此,如果您的论点很少,则相应地:

    await page.evaluate((k, startIndex, endIndex) => {
     
    }, k, startIndex, endIndex);
    

    【讨论】:

    • 现在我明白了。非常感谢!
    猜你喜欢
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多