【问题标题】:how to use document.getElementById() in Nodejs如何在 Nodejs 中使用 document.getElementById()
【发布时间】:2019-02-14 19:54:43
【问题描述】:

我正在尝试使用 nodejs 从 js 文件中的 html 文件中按 id 获取元素。 我收到错误“未定义文档 ID”,因为节点默认不提供文档对象模型。

那么如何在 nodejs 中使用 document.getElementById() 呢?

谢谢!

【问题讨论】:

标签: javascript node.js document getelementbyid dom-node


【解决方案1】:

如果你想解析同一服务器中的文件,你可能应该使用一些this 选项,因为nodejs 只是一个JavaScript 实现,没有window 或document 对象,请参阅this。但要准确回答您的问题:

如何在 nodejs 中使用 document.getElementById() ?

你可以使用Puppeteer来做到这一点

Puppeteer 是一个 Node 库,它提供了一个高级 API 来控制 基于 DevTools 协议的无头 Chrome 或 Chromium。它也可以 配置为使用完整(非无头)Chrome 或 Chromium。

这里是一个基本的例子:

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch();


        page = await browser.newPage();
        await page.goto('http://example.com/some.html', {waitUntil: 'load'});


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

        return  document.getElementById("idexample").innerHTML;

        });

     console.log(newPage)

  })();

【讨论】:

  • OP 想要解析服务器上的 HTML 文件,而不是某个网站。
  • @ChrisG 你可以解析同一台服务器的文件,问题是:“如何在 Nodejs 中使用 document.getElementById()”,这是一种方法。
  • 这个问题没有提到有一个服务器正在运行。它还清楚地写着from an html file,这意味着这几乎是一个XY problem,而使用document.getElementById()一开始就已经是错误的胡同了。最重要的是,这个问题明显重复,并且得到了广泛的回答。
  • @ChrisG 是的,这可能是一个 XY 问题,我已经在我的回答中做出了澄清。无论哪种方式,如果有人发现这个问题在谷歌上搜索如何在节点中使用 document.getElementById(),这是一个可能的正确答案。感谢您的反馈!
【解决方案2】:

使用 JSDOM npm 包:

jsdom 是许多 web 标准的纯 JavaScript 实现,特别是 WHATWG DOM 和 HTML 标准,用于 Node.js。一般来说,该项目的目标是模拟足够多的 Web 浏览器子集,以用于测试和抓取真实世界的 Web 应用程序。 https://github.com/jsdom/jsdom

【讨论】:

    猜你喜欢
    • 2019-02-28
    • 2014-11-02
    • 2013-01-05
    • 2019-04-30
    • 1970-01-01
    • 2012-07-01
    • 2015-11-03
    • 2022-09-23
    • 1970-01-01
    相关资源
    最近更新 更多