CSS 伪元素也可以被用于反爬案例?来学习一下。26

news2024/11/27 6:25:31

先说一下什么是 CSS 中的伪元素,CSS 伪元素的概念是指在 CSS 中使用的一些特殊的元素,它们不存在于 HTML 文档中,而是由浏览器生成的元素,用于提供额外的样式控制。这些伪元素在 HTML 代码中不存在,但可以在 CSS 中通过特定的语法来选择它们。

文章目录

    • 常见的 CSS 伪元素
    • 用 CSS 伪元素显示数字
    • CSS 伪元素反爬

常见的 CSS 伪元素

  • :before :允许在元素之前插入生成内容;
  • :after :允许在元素之后插入生成内容;
  • :selection 伪元素用于定义被选中文本的样式,如颜色和背景色;
  • :placeholder-shown伪元素用于定义带有 placeholder 属性的 input 元素或 textarea 元素中 placeholder 文本的样式,当用户没有在输入框中输入内容时,placeholder 文本才会显示;
  • dir() 伪元素,用于根据元素的文本方向(ltr 或 rtl)来应用样式;
  • :lang() 伪元素,用于根据元素的 lang 属性来应用样式;
  • :fullscreen 伪元素,用于在元素进入全屏模式时应用样式;
  • :indeterminate 伪元素,用于定义 input[type="checkbox"] 元素不确定状态的样式;

本次反爬案例中,我们使用的就是 :before:after 伪元素。

用 CSS 伪元素显示数字

在爬虫训练场中,可以直接建立一个伪元素反爬页面,然后输入如下内容。

{% extends "base.html" %} {% block link %}{% endblock link %} {% block style %}
<style type="text/css">
  .txt::after {
    content: "123";
    font-size: 16px;
  }
</style>

{% endblock style %} {% block content %}
<div class="container">
  <span class="txt"></span>
</div>
{% endblock %}

运行代码之后,你可以看到页面渲染效果,下图所示的数字 123 是无法被选中的,而且在网页 DOM 元素中并不存在,它是由 after 添加到目标元素 span 之后的内容,注意伪元素是在元素内容之后插入,不会占用文档流中的空间。

CSS 伪元素也可以被用于反爬案例?来学习一下。26
有了这些基础之后,那我们就可以实现一个比较【有效果】的反爬案例了,将某些关键内容使用伪元素渲染。

CSS 伪元素反爬

实现伪元素反爬的重点其实是动态 CSS 文件生成,在这里我们模拟读取数据,然后使用 IO 读写,将 css 文件渲染到前台即可。

# CSS 伪类实现反爬
@antispider.route('/css_antispider')
def css_antispider():

    with open(app.root_path + '/data/blogs.json', 'r', encoding='utf-8') as f:
        json_data = json.loads(f.read())

    # 将数据生成到 CSS 中
    css_str = ""
    for index, item in enumerate(json_data):
        browse = item["browse"]
        comment = item["comment"]
        collection = item["collection"]

        css_str += f""".browse{index+1}::after{{content:'{browse}';font-size:14px;}}.comment{index+1}::after{{content:'{comment}';font-size:14px;}}.collection{index+1}::after{{content:'{collection}';font-size:14px;}}\n"""

    with open(app.static_folder + '/css/blog_antispider.css', 'w') as f:
        f.write(css_str)

    return render_template("antispider/css.html",data=json_data)

其中重点查看的是 CSS 代码循环部分,我们动态生成了三个类,而且用索引为其进行编号,单独一行得到的 CSS 样式如下。

.browse1::after {
  content: "5950";
  font-size: 14px;
}
.comment1::after {
  content: "49";
  font-size: 14px;
}
.collection1::after {
  content: "206";
  font-size: 14px;
}

本案例使用了 12 条数据,最终得到的结果如下所示。

CSS 伪元素也可以被用于反爬案例?来学习一下。26
前台渲染数据时,只要遵循 css 样式表中的规则即可。

详细代码可以在 爬虫训练场 站点查看,示例代码如下所示。

CSS 伪元素也可以被用于反爬案例?来学习一下。26
为了提高页面加载速度,我们在 Python 中对刚刚生成的 CSS 文件进行一下压缩,使用的库是 csscompressor,安装之后参考下述代码对 CSS 文件进行压缩。

from csscompressor import compress

compressed_css = compress(css_str)

with open(app.static_folder + '/css/blog_antispider.min.css', 'w') as f:
    f.write(compressed_css)

至此,完成本反爬案例,具体地址请访问:CSS 伪元素反爬

CSS 伪元素也可以被用于反爬案例?来学习一下。26

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 833 篇原创博客

从订购之日起,案例 5 年内保证更新

  • ⭐️ Python 爬虫 120,点击订购 ⭐️
  • ⭐️ 爬虫 100 例教程,点击订购 ⭐️

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/166982.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[idekCTF 2023] Malbolge I Gluttony,Typop,Cleithrophobia,Megalophobia

这些题名字我都不认识&#xff0c;这是什么语呀。这个比赛感觉太难了&#xff0c;加上春节将近比较忙&#xff0c;仅作了4个简单题。记录一下。Misc/Malbolge I Gluttony这是个虚拟机的题&#xff0c;放入misc感觉有点不可思忆&#xff0c;题目给了7个命令&#xff0c;有"…

【云原生进阶之容器】第五章容器运行时5.1节--容器运行时总述

1 Kubernetes引言 Kubernetes 已经成为容器编排调度领域的事实标准,其优良的架构不仅保证了丰富的容器编排调度功能,同时也提供了各个层次的扩展接口以满足用户的定制化需求。其中,容器运行时作为 Kubernetes 管理和运行容器的关键组件,当然也提供了简便易用的扩展…

图解二叉树的构造 | 中序 + 后序

中序后续构造二叉树 https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/ 递归思路 递归思路很简单, 因为无论是构造一棵大树还是一棵小树, 都是重复的子问题, 思路主要麻烦在边界上 如下图所示 上述是中序和后续序列 我们要递归, 需…

BetaFlight飞控AOCODARC-F7MINI固件编译

BetaFlight飞控AOCODARC-F7MINI固件编译1. 编译目标&#xff08;AOCODARC-F7MINI&#xff09;2. 编译步骤Step 1 软件配置环境准备Step 2 获取开源代码Step 3 构建命令介绍Step 4 构建命令准备Step 5 厂家目标板查询Step 6 目标固件编译Step 7 目标固件清理3. 参考资料BetaFlig…

MyBatis中TypeHandler的使用教程

一.TypeHandler作用及其使用场景在我们平常开发操作数据库时&#xff0c;查询、插入数据等操作行为&#xff0c;有时会报数据类型不匹配异常&#xff0c;就可以得知数据的类型是不唯一的必然是多种不同的数据类型。并且我们必须要明确的一点就是java作为一门编程语言有自己的数…

如何使用ElementUI的table组件来实现单元格的行合并

前言 最近在编写一个值班的排班表&#xff0c;然后中间涉及到了表格应用。并且还要做出类似这种效果的行合并效果: 然后就开始找组件了。Html的table是有rowsSpan和colsSpan的属性来实现行合并和列合并的。然后就在网上找资料&#xff0c;发现没有几篇能把这两个属性将好的&a…

LeetCode刷题模版:111 - 120

目录 简介111. 二叉树的最小深度112. 路径总和113. 路径总和 II114. 二叉树展开为链表115. 不同的子序列116. 填充每个节点的下一个右侧节点指针117. 填充每个节点的下一个右侧节点指针 II118. 杨辉三角119. 杨辉三角 II120. 三角形最小路径和结语简介 Hello! 非常感谢您阅读海…

SWPUCTF 2022新生赛 web部分wp

&#x1f60b;大家好&#xff0c;我是YAy_17&#xff0c;是一枚爱好网安的小白。 本人水平有限&#xff0c;欢迎各位大佬指点&#xff0c;一起学习&#x1f497;&#xff0c;一起进步⭐️。⭐️此后如竟没有炬火&#xff0c;我便是唯一的光。⭐️ 目录 [SWPUCTF 2022 新生赛]…

linux中使用KubeSphere和集群k8s 部署springboot项目

上期已经介绍了单体k8s部署springboot项目&#xff0c;这期讲解集群k8s部署springboot项目 因为部署方式已经在单体中讲过&#xff0c;现在大体粗略讲一下首先看下集群节点&#xff0c;如下所示&#xff1a; 第一步&#xff1a;创建项目----》按照做的项目名称建 创建后&…

MyCat实现单库分表+代理所有表

MyCAT支持水平分片与垂直分片&#xff1a; 水平分片&#xff1a;一个表格的数据分割到多个节点上&#xff0c;按照行分隔。 垂直分片&#xff1a;一个数据库中多个表格A&#xff0c;B&#xff0c;C&#xff0c;A存储到节点1上&#xff0c;B存储到节点2上&#xff0c;C存储到…

Unity 过场工具(Cutscene)设计(二)

Unity 过场工具(Cutscene)设计&#xff08;二&#xff09; 本章主要分析一下过场一般的必要组成元素&#xff0c;以及在Unity中的制作方案 镜头 通常来说一个表现要求比较高的过场&#xff0c;需要专业的导演进行运镜操作的。 在Unity中官方有一个很好的镜头插件 Cinemachine…

基于Leaflet的VideoOverlay视频图层叠加实战

前言在基于二维的场景中&#xff0c;也许会遇到以下的需求。在某交通路口或者重要的监控点&#xff0c;需要将实时或者录制的视频信息叠加在地图上。更有甚者&#xff0c;随着设备通讯方式的增强&#xff0c;无人机等设备可以采集实时数据&#xff0c;实时回传到控制终端&#…

纵有疾风起,Petterp与他的2022

引言 每逢年末&#xff0c;都要来聊一聊关于今年的各种事情&#xff0c;今昔也不例外:) 与往年不同的是&#xff0c;今天刚搬完家&#xff0c;现在是晚上 1:44 ,正是忙碌一天后比较头痛的时刻。 此刻写点东西&#xff0c;脑子也许会放松一下。&#x1f916; 坐在桌子前&…

RFID技术应用在服装门店管理

服装行业是一个高度一体化的行业&#xff0c;集设计研发、成衣生产、运输、销售于一体。在这些过程中&#xff0c;传统的服装供应链往往消耗巨大的人力、物力和资金成本&#xff0c;但效果一般。当今市场消费者的需求变幻莫测&#xff0c;时尚潮流日新月异。稍有延误&#xff0…

从零编写MDK的FLM烧录算法

文章目录前言一、将代码中的图片资源下载到外部flash1. 修改分散加载文件2. 添加外部flash算法二、制作FLM文件步骤三、使用STM32CubeMX新建工程前言 上文讲过&#xff0c;当我们要下载编译好的镜像到Flash时&#xff0c;首先要做的一步就是选择合适的Flash下载算法&#xff0…

WPS Office 2019 版本 excel透视图创建及删除

摘要&#xff1a;记录一下在做2022年总结数据时遇到的问题&#xff0c;主要问题有2个&#xff0c;①从飞书多维表格导下来数据后不能求和计算和下拉序号&#xff0c;②excel数据透视表创建及删除。 相关文章&#xff1a; 一、Excel WPS Office 2019 版本 excel透视图创建及删…

合作升级|Kyligence 跬智智能分析平台入选华为云联营商品

近日&#xff0c;Kyligence 跬智智能分析平台正式入选华为云联营商品&#xff0c;成为华为云在数据分析领域的联营合作伙伴。通过联营模式&#xff0c;双方将加深在产品、解决方案等多个领域的合作&#xff0c;携手打造“共生、共创、共营、共赢”的合作生态&#xff0c;为用户…

[激光原理与应用-65]:激光器-器件 - 多模光纤(宽频光纤)、单模光纤的原理与区别

第1章 光纤基础与概述1.1 概述光纤是光导纤维的简写&#xff0c;是一种由玻璃或塑料制成的纤维&#xff0c;可作为光传导工具。传输原理是“光的全反射”。微细的光纤封装在塑料护套中&#xff0c;使得它能够弯曲而不至于断裂。通常&#xff0c;光纤的一端的发射装置使用发光二…

Spring Boot(五十三):SpringBoot Actuator之简单实现

1 场景介绍 对于一个大型的几十个、几百个微服务构成的微服务架构系统&#xff0c;在线上时通常会遇到下面一些问题&#xff0c;比如&#xff1a; 1. 如何知道哪些服务除了问题&#xff0c;如何快速定位&#xff1f; (健康状况&#xff09; 2. 如何统一监控各个微服务的性能指标…

不确定性量化 (UQ) 可以显著提高预测准确性,在不确定的世界中获得最佳结果昆士兰大学Mike McKerns-中国学者网

在不确定的世界中获得最佳结果,不确定性量化可以解开成功与失败之间的区别。不确定性量化 &#xff08;UQ&#xff09; 可以显著提高预测准确性&#xff0c;提供设计优化&#xff0c;并在充满未知的世界中促进快速解决方案改进。昆士兰大学的一个机构"不确定性量化基金会&…