【问题标题】:Cheerio .css([property]) always returns null?Cheerio .css([property]) 总是返回null?
【发布时间】:2016-09-07 01:05:50
【问题描述】:

我最近开始使用 NodeJSCheerio。 我正在获取一个外部 URL,并使用 Cheerio 加载 html。

我偶然发现了一个问题,每当我尝试获取元素的 css 属性时,$.css([property]) 总是返回 null,无论我给它什么选择器或属性。

我在做什么:

var express = require('express');
var fs = require('fs');
var request = require('request');
var cheerio = require('cheerio');
app = express();

app.get('/something_something', function (req, res) {
   request('some_url', function (error, response, html) {
       var $ = cheerio.load(html)
//
       console.log($('body').css('width'));
   }
}

这将始终记录 null,无论它具有什么选择器或 css 属性。 (请记住我已经过度检查了 jQuery 对象 $('body') 是否存在,无论 URL 是什么都会发生这种情况)

另外,如果我设置$('body').css('width', '100px') 然后console.log($('body').css('width')),它将显示100px。所以我猜这不是 css() 方法本身,而是 Cheerio 获取/不获取元素样式的方式

*其他 Cheerio 方法有效,例如 text()val()remove()

我仍然是 NodeJS/Cheerio 新手,所以任何帮助、解释、建议或信息都是宝贵的,

欢呼!

【问题讨论】:

  • 你的'body'有宽度样式吗?如果您想获取body 标签的实际宽度,请使用 $('body').width() api.jquery.com/width
  • 从我在 Cheerio 文档中可以看到,它不支持 width() 方法。此外,css() 始终返回 null,无论属性是“font-size”、“color”还是任何其他 css 属性

标签: javascript node.js web-scraping cheerio


【解决方案1】:

Cheerio 是一个 DOM 接口。它解析 HTML 并允许您访问节点及其属性。它不是试图模拟实际浏览器的 HTML 视图的虚拟浏览器。由于它不进行任何渲染或渲染模拟,因此它无法告诉您只有在涉及渲染问题时才能确定的内容(例如 DOM 元素的尺寸)。

【讨论】:

  • 好吧,我不知道。我想除了 JSDOM 之外别无他法。非常感谢您的回答!
猜你喜欢
  • 2017-12-20
  • 2019-08-05
  • 1970-01-01
  • 2014-03-04
  • 2016-11-02
  • 2014-05-06
  • 2012-06-05
  • 2014-05-30
  • 2014-02-23
相关资源
最近更新 更多