有趣的前端知识 - day7

本文介绍了如何处理ChromeDriver版本不匹配的问题,如何在Node.js中正确引入和使用fetch,切换到ES模块系统,以及如何通过cheerio操作HTML,以及解决下载文件和解码特殊字体数据的技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

chrome 驱动版本不匹配?

SessionNotCreatedError: session not created: This version of ChromeDriver only supports Chrome version 92 Current browser version is 123.0.6312.107 with binary path C:\Program Files\Google\Chrome\Application\chrome.exe

获取支持新版本的驱动:Chrome for Testing availability

chromedriver win64 https://storage.googleapis.com/chrome-for-testing-public/123.0.6312.122/win64/chromedriver-win64.zip

引入fetch报错?

const fetch = require("node-fetch") 无法被正常加载? ---无需加载即可使用

在 Node.js 环境中,fetch 并不是内置的全局函数,因此通常需要通过 require("node-fetch") 或者类似的方法来引入 node-fetch 模块。

如果你在Node.js中无需引入即可正常使用fetch,这很可能是由于你的项目或环境已经提供了对fetch的支持或polyfill。

nodejs项目不能正常使用import和export,是因为不支持ES吗?

默认情况下,Node.js 支持使用 CommonJS 模块系统,而不是 ES 模块系统。

在 Node.js v12 及更高版本中,你可以修改 package.json:在项目的 package.json 文件中添加 "type": "module" 字段,以指示这是一个 ES 模块项目。

怎么在代码中操作html静态文档像Dom操作一样?

使用node cheerio 库来加载html内容进行操作,

const $ = cheerio.load(html);

获取指定元素的class属性值:

const woffName = $(".rank-body ul li .book-right-info .total p span span").first().attr("class");

参考文档:Loading Documents | cheerio

使用 https.get 方法下载指定文件,哪怕是使用await也无法等待下载结束后再执行后续代码?

在 Node.js 中,https.get 方法是一个异步操作,它会立即返回一个请求对象,而不会等待请求完成。因此,即使使用 await 关键字,也无法直接等待下载完成后再执行后续代码。

要解决这个问题,你可以将 https.get 方法包装在一个 Promise 中,并在请求完成时 resolve 或 reject 这个 Promise。然后,在你的代码中使用 await 来等待这个 Promise 的解决。

return new Promise((resolve, reject) => {

https

.get(woffUrl, (response) => {

response.pipe(fileStream);

fileStream.on("finish", () => {

fileStream.close();

console.log("文件下载完成。");

resolve();

});

})

.on("error", function (err) {

fs.unlink(${saveDir}/${woffFileName});

console.error("下载错误:", err.message);

reject(err);

});

});

获取网页数据是,一部分特殊数据被网站用特定字体加密,导致无法直接复制或者unicode反编码获取具体值应该怎么解决?
  • 获取到字体文件,比如 .woff文件,

  • 通过node 库 openType 来加载和操作字体文件,

    • 使用 openType.load加载woff文件

    • font.tables.cmap.glyphIndexMap 中包含自定义编码和对应的字符对象

    通过拿到的字形映射并查看编码逻辑即可拿到具体值!

    const openType = require("opentype.js");

async function getFontMap(filePath) {

try {

const font = await new Promise((resolve, reject) => {

openType.load(filePath, (err, font) => {

if (err) {

reject(err);

} else {

console.log("字体映射加载成功:", font.tables.cmap.glyphIndexMap);

resolve(font);

}

});

});

return font.tables.cmap.glyphIndexMap;

} catch (error) {

console.error("加载字体文件出错:", error);

}

}

module.exports = getFontMap;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值