CSS 偏移反爬虫,两种偏移案例

ae8893a49793e8ebbdbeaade10cb86ad.png

8fe655475ff85931aac1e02514be9286.jpeg

前言

很早之前就知道有一种反爬文本混淆,其中包含了图片伪装反爬,css 偏移反爬,字体反爬,SVG 反爬,以前稍微研究过一点字体反爬,可参考:

爬虫 | 五八字体反爬

爬取租房信息,自己设置过滤条件

最近稍微研究了一下 css 反爬,找了一些资料学习,成功通过了 GliedSky 的 css 偏移反爬的题目:

ffd1deb807c38998bb3330a70225a3ed.png

在这里总结两种 css 偏移反爬。

GlidedSky 其他题目的可以参考:

Glidedsky 爬虫挑战 | js 加密1

第一种

第一种 css 反爬,是比较好理解,网上搜到的资料最多的以去哪网为例的,机票价格的偏移。

如在页面上看到的数字是 450,但在获取的 html 中直接提取出来的是 540(好像现在可以直接提取 title 属性获得正确的数字了):

9f5ca3b1601d4c25c64c13c35a50b220.png

可以看到数字是放到 b 标签中的,总共有 4 个,还有一个折叠的,展开,其中有 3 个 i 标签也有数字,所以要提取 450 这个正确的顺序的话,就需要所有数字,先拿出来 797540:

a7320765af09bf17810be04e9e98209a.png

现在开始偏移回去,整个价格标签宽度,即 width 为 48。

1,2,3 标签的宽度各为 16,3 个标签长度刚好为 48,按顺序拼在一起,即 797。

4,5,6 标签各个宽度也为 16,但多了一个 left,这个就是需要偏移的标识,后面接偏移距离,正负号决定偏移距离。

例如 4 标签,left:-32px,在正确的标签上向左偏移 -32,即向右偏移 32 得到此时的位置,所有这个标签向左移动 32 变回去得到正确的位置:

6028495e56845f181799acc15bcd614f.png

为了方便理解,画了一个图:

dffe0d4a12736ac5f44b0ace03798abd.png

这样就还原得到了正确额数字,逻辑明白了,那编写代码就容易多了,感兴趣的可以自己试试。

第二种

第二种,以 GlidedSky 的题目为例的,跟上面的对比有些不太一样,是要利用匹配 css 代码得到具体是怎么偏移的才好还原,上面的值利用标签就可以。

其中又涉及到几种,一个一个来看。

第一种 ::before 伪标签,即在标签中只显示 ::before 但真实的数据是放在 css 当中的:

d4ffec36ae397aafe869a5c98ec79cd4.png

第二种多余标签,即用来捣乱的,实际在页面中是不显示的,css 样式中有 opacity: 0 取值,代表不显示,只要是含有这个样式的标签是不需要的,需要剔除。

可以看到数字为 144,但标签有 4 个,1 标签中取值为 6 且含有 opacity,代表不显示,即剔除:

ae28cf3f10b00f879e0ebbdd7c0781d5.png

第三种没有任何偏移,即就在原位置的,虽没有偏移,但也需要判断后才知道。

我们一个一个标签的看,发现在三个标签的 css 样式中,绿色的部分都没有含有偏移关键字 left,即可判断未偏移:

b379b6e393c0e28d0cfd0de39193552f.png

840c9cd774c4f5a3c5d5a9cfe53cf581.png

7313402a9ba004901bfe182897afb5a1.png

第四种偏移的,即在正确的数字上偏移得到标签中的数字。

例如正确的数字是 256,偏移后的标签得到的是 562:

c89f4eeb68c29b3f1ed2965c18fc1b0a.png

我们一个一个看,绿色部分含有偏移关键字 left 及后面的偏移距离,em 为单位,即向左偏移多少单位得到偏移后结果。

三个标签分别是向左偏移 1 个单位,向左偏移一个单位,向左偏移 -2 个单位,负号控制方向。

为了便于理解,画了一个偏移前后图:

57f2a9a409ed2864cee01bccdba3314e.png

2a5a88f63b5ed1026113e410ebb61df1.png

50aca2c4352ce219df0d219c304cf9f4.png

fca06f942a9c6429e9c7f3bfb3365bd0.png

所有涉及到的偏移都列举了,明白这个逻辑就可以写代码了,提取所有标签,判断每个数字标签是哪种偏移做对应处理。

每个标签都有一个 class 属性,取值是唯一的,可以理解为 id,通过此 id 在 css 样式中提取偏移距离或伪标签数字或移除多余标签或不移动。

css 样式这里是嵌入到了 html 中,直接正则匹配即可,核心代码为:

e357fffaa121522cad9d54213a63933b.png

这样整个逻辑就完成了,这个的完整代码可以回复关键词获取。

源码获取

扫描下方二维码,在公众号对话框回复关键字“css”即可获取

END

读者交流群已建立,找到我备注 “交流”,即可获得加入我们~

听说点 “在看” 的都变得更好看呐~

关注关注小编呗~小编给你分享爬虫,数据分析,可视化的内容噢~

扫一扫下方二维码即可关注我噢~

-END-

87e9bc5d320eedce3637888d8e08ad00.png

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值