【问题标题】:ERROR: invalid namespace puppeteer node js错误:无效的命名空间 puppeteer 节点 js
【发布时间】:2018-03-26 15:42:33
【问题描述】:

我制作了一个简单的程序来获取用户的堡垒之夜级别和当前 xp,但包含一个未知错误(错误:无效命名空间)我检查了我的代码,但我找不到问题这是我的代码:

let scrape = async () => {
    const browser = await puppeteer.launch({
        headless: true
    });
    const page = await browser.newPage();

    await page.goto('https://fortnitetracker.com/profile/pc/Twitch.BadGuyBen');
    await page.waitFor(1000);

    const result = await page.evaluate(() => {
        let stats = document.querySelector('.top-stats').innerText;

        return {
            stats
        }

    });

    browser.close();
    return result;
};

scrape().then((value) => {
    let str = value.stats;
    let arr = str.split("\n");

    var lvl = "Level: " + arr[0];
    var xp = "Total XP: " + arr[4];

    console.log(lvl);
    console.log(xp);
});

我已尝试重新安装我的 node_modules 文件夹我已将我的节点更新到 9.9.0 但我仍然遇到相同的错误

编辑: 对于@artur 我得到的唯一错误是:

ERROR:

编辑:在重新安装 puppeteer 并按照@Artur P 的建议更改我的部分代码后。我仍然收到错误:无效命名空间,我还将尝试进一步调查此错误

【问题讨论】:

  • 请填写完整的错误日志
  • @Artur 我添加了我在启动 index.js "node index.js" 时遇到的唯一错误
  • 我认为这个错误信息来自 puppeteer 或 chrominium 实例
  • 尝试使用管理员权限运行 cmd
  • @Artur nope 即使拥有管理员权限,仍然会出现同样的错误

标签: javascript node.js error-handling puppeteer


【解决方案1】:

page.evaluate() 函数中的回调本质上是在浏览器生态系统中进行评估(如在 chrome 控制台中)。因此,当您尝试分配可能导致 ERROR: invalid namespace 我认为的新变量 let stats 时。 你可以尝试稍微改变一下这个函数:

const result = await page.evaluate(() => {
    return {
        stats: document.querySelector('.top-stats').innerText
    };
});

但在我的环境(Windows 10、NodeJS 9.8.0)中,两个版本都是有效的,并且不输出任何错误代码。我在 web.xml 中找不到有关此错误的任何其他资源。 尝试 uinstall puppeteer 并使用管理员权限重新安装。

npm uninstall --save puppeteer
npm i --save puppeteer

您的操作系统是什么?

【讨论】:

  • 我在 windows 10 64bit 我会在早上尝试这个,因为它是 00:35 对我来说(注意:我试图一次又一次地安装 puppeteer,甚至制作新文件夹,我的朋友复制了我的代码并运行它,只有结果没有错误)节点版本 9.9.0 现在我更新了
  • 编辑:我已经尝试过你的建议,但我仍然得到错误。
【解决方案2】:

我的第二个解决方案(有点离题),但是是最好的解决方案:)

npm i request request-promise


'use strict';
const request = require('request-promise');

const reg = /<script type="text\/javascript">var LifeTimeStats = ([^<]*);<\/script>/g;

(async () => {
  const response = await request('https://fortnitetracker.com/profile/pc/Twitch.BadGuyBen');
  const LifeTimeStats = JSON.parse(reg.exec(response)[1]);
  console.log(LifeTimeStats); // all stats here :)
})();

您可以添加 try catch 和一些您想要的功能。

这是输出:

[ { Key: 'Top 3', Value: '47' },
  { Key: 'Top 5s', Value: '81' },
  { Key: 'Top 3s', Value: '126' },
  { Key: 'Top 6s', Value: '217' },
  { Key: 'Top 12s', Value: '165' },
  { Key: 'Top 25s', Value: '92' },
  { Key: 'Score', Value: '325,855' },
  { Key: 'Matches Played', Value: '1523' },
  { Key: 'Wins', Value: '99' },
  { Key: 'Win%', Value: '7%' },
  { Key: 'Kills', Value: '3975' },
  { Key: 'K/d', Value: '2.79' },
  { Key: 'Kills Per Min', Value: '0.5' },
  { Key: 'Time Played', Value: '6d 1h 34m ' },
  { Key: 'Avg Survival Time', Value: '5m 44s' } ]

【讨论】:

  • 谢谢,但我已经从提供的 api 中获得了所有信息,它只是玩家级别,不包括当前 XP
猜你喜欢
  • 2018-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多