有没有办法在cssutils序列化后保留整个十六进制颜色?

时间:2018-03-25 10:45:43

标签: python python-3.x validation web-scraping

cssutils 的序列化程序默认情况下将十六进制颜色转换为简写十六进制颜色。例如:

>>> import cssutils
>>> hex_d = cssutils.parseStyle('color: #aaaaaa')
>>> hex_d.color
#aaa

正如您所见, #aaaaaa 已转为 #aaa 。有没有办法配置cssutils的序列化器以某种方式在输出中保持完整十六进制颜色?

2 个答案:

答案 0 :(得分:0)

您可以使用blowdrycss模块执行此操作。它需要cssutils作为依赖。

from blowdrycss import colorparser
hex_d = colorparser.ColorParser('color', '#aaaaaa')
print(hex_d.value)
#Output: #aaaaaa

答案 1 :(得分:0)

你可以这样做:

_short_color_codes = re.compile(r'^#([0-9a-f])([0-9a-f])([0-9a-f])$', re.I)

def get_full_hex(shorthand_val):
    return _short_color_codes.sub(r'#\1\1\2\2\3\3', shorthand_val)

hex_d = cu.parseStyle('color: #aaaaaa')
get_full_hex(hex_d.color)

我在premailer repo。

中找到了该代码段

<强>更新

浏览cssutils个回购后,我发现有一个Preferences类需要minimizeColorHash个参数(默认设置为True)。将其设置为False应该可以防止将colorhash从完整大小最小化为速记的默认行为。

目前存在一个错误,它不允许使用布尔False值来实例化Preferences类。我已提交PR来解决此问题。如果您不想等待,可以直接在本地cssutils模块中应用上述PR中的代码,以使其立即生效。

然后你就可以做到:

import cssutils as cu
prefs = cu.serialize.Preferences(minimizeColorHash=False)
ser = cu.serialize.CSSSerializer(prefs=prefs)
cu.setSerializer(ser)
hex_d = cu.parseStyle('color: #aaaaaa')
hex_d.color
# #aaaaaa