javascript - 使用 addScriptTag 时如何评估带有类型模块的脚本结果

标签 javascript node.js puppeteer es6-modules

我正在尝试使用 addScriptTag 来使用页面上的某些模块。

(async () => {
  const browser = await launch();
  const page = await browser.newPage();
  page.on("console", (c) => console.log(c.text()));
  page.on("error", (c) => console.error(c.message));
  await page.goto("https://example.com");
  await page.addScriptTag({
    path: resolve(__dirname, "verbs.js"),
    type: "module"
  });
  await browser.close(); // <==== Closes before "verbs.js" finishes doing it thing
})();

动词.js:

import nlp from "https://unpkg.com/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="73101c1e03011c1e1a00163342405d405d42" rel="noreferrer noopener nofollow">[email protected]</a>/builds/compromise.mjs";

const selectors = "p, h1, h2, h3, h4, h5, h6";
const links = [...document.querySelectorAll(selectors)];
const pageText = links.map((node) => node.textContent).join("");

const doc = nlp(pageText);

const res = doc
  .verbs()
  .json()
  .map((noun) => noun.text);

export default res; // I need a way of accessing res from node context

另外,我如何评估模块的结果?

我想我正在寻找一种从模块获取某种导出结果的方法。喜欢阅读它默认导出。

最佳答案

也许你可以使用page.exposeFunction()

主脚本末尾:

(async () => {
  // ...
  await page.exposeFunction('useRes', (res) => {
    // use res
    await browser.close();
  });
  await page.addScriptTag(/* ... */);
})();

verbs.js末尾:

// ...
window.useRes(res);

关于javascript - 使用 addScriptTag 时如何评估带有类型模块的脚本结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63072779/

相关文章:

javascript - 提交后隐藏div

javascript - 无法识别 Mozilla Firefox 中的右键单击事件

javascript - 具有动态嵌套对象的 Mongoose 模式

javascript - stub process.nextTick 以传递参数

node.js - 来自 native 代码的 Mocha 测试中未处理的拒绝

javascript - 抓取一些表格数据时得到奇怪的输出

javascript - 带有 Google Apps 脚本的 JQuery Mobile

javascript - 在鼠标悬停时显示一个 div 并拥有它直到我们单击

javascript - puppeteer -无法读取未定义的属性“单击”

javascript - 在 google puppeteer 上作为 evaluate 方法的参数