如何在 Nodejs 中使用 document.getElementById()

Posted

技术标签:

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

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

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

谢谢!

【问题讨论】:

node.js 程序不在浏览器中运行。首先没有document。您是在问如何在 node.js 中解析 HTML 文件? How do I parse a HTML page with Node.js的可能重复 【参考方案1】:

如果你想解析同一服务器中的文件,你可能应该使用一些this 选项,因为nodejs 只是一个javascript 实现,没有windowdocument 对象,请参阅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

【讨论】:

以上是关于如何在 Nodejs 中使用 document.getElementById()的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 7 中使用 Nodejs? [关闭]

如何在nodejs中使用facebook登录

如何在 NodeJS、Mongoose 和 TypeScript 中使用日期和时间?

如何在 nodeJs 中使用 nodemon 调试应用程序

如何在 nodejs 中使用 ES7?

如何在nodejs服务器中使用命令'git clone url'[关闭]