css反爬

普通css

不断变化的class属性带着诡异的样式,找到css样式的地方,按照class聚合起来,分析其中的规律(位移,显示与否),再解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def get_css(ele_txt):
    raw_css = map(lambda x: x.strip(), ele_txt.split('\n'))
    css_dict = defaultdict(dict)
    for r in raw_css:
        if r:
            class_, key, value = re.search(r'\.(\w*).*?{\s*?(.*?):(.*?)\s*}', r).groups()
            css_dict[class_.strip()][key.strip()] = value.strip()

    return css_dict


def parse_css(i, r, css_dict, dis_dict):
    class_ = r['class'][0]
    value = r.get_text(strip=True)
    if class_ in css_dict:
        # content
        if not value and 'content' in css_dict[class_]:
            return True, 'append', int(css_dict[class_]['content'].replace('"', ''))
        # ignore
        if 'opacity' in css_dict[class_]:
            return True, 'ignore', None
        # 位移
        if 'left' in css_dict[class_]:
            displacement = int(re.search(r'(.*?)em', css_dict[class_]['left']).group(1))
            dis_dict[i + displacement] = value
            return True, 'index', None
        # 不动
        else:
            dis_dict[i] = value
            return True, 'index', None

    return False, None, None

最难是找到css样式的地方,可以是js生成的(加密),放在css里面,放在html里面