如何在 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 实现,没有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
【讨论】:
以上是关于如何在 Nodejs 中使用 document.getElementById()的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows 7 中使用 Nodejs? [关闭]