Datawhale-爬虫

task1-初始爬虫

爬虫用python好,python库多,功能全


反爬机制和反反爬机制

顾名思义,一个是防范爬虫的,一个是应对限制爬虫的方法

好的,我们来更深入地探讨反爬机制和反反爬策略的细节,包括具体的技术手段、实现原理和对抗逻辑。这是一个持续演进的“猫鼠游戏”。

一、反爬机制 (Anti-Scraping Mechanisms) - 网站的防御盾牌

网站采用反爬机制的主要目的是:

1.  保护服务器资源:防止爬虫过度消耗带宽、CPU和内存,影响正常用户访问。
2.  保障数据安全与商业利益: 防止敏感数据、价格信息、用户内容、知识产权等被大规模抓取和滥用。
3.  维护服务稳定性:防止爬虫导致的突发流量高峰(DDoS效应)使服务瘫痪。
4.  遵守法规与隐私: 防止爬取受法律保护(如GDPR, CCPA)或个人隐私的数据。
5.  控制数据访问权限: 确保只有授权用户(如付费用户)才能访问特定数据。
6.  提升垃圾信息门槛: 防止自动化脚本批量注册、发帖、刷票等。

常见且详细的反爬技术手段:

1.  基于请求特征的识别与拦截:
    *   User-Agent 检测与过滤: 检查HTTP请求头中的`User-Agent`字段。如果缺失、格式错误、包含常见爬虫库/框架名称(如`python-requests`, `scrapy`, `selenium`等)或明显是伪造的低质量UA,则可能被拦截。**对抗: 使用大量真实浏览器UA轮换,精心伪造完整请求头。
    *   请求头完整性检查: 检查请求头是否包含浏览器通常会发送的字段,如 `Accept`, `Accept-Language`, `Accept-Encoding`, `Connection`, `Referer` (来源页), `Cookie` 等。缺失关键头部的请求会被怀疑。对抗: 模拟真实浏览器的完整请求头集合。
    *   IP 地址频率限制与封禁:
        *   速率限制 (Rate Limiting): 限制单个IP在单位时间(秒/分/小时)内对特定API或页面的请求次数。超出阈值则返回429错误或临时封禁。
        *   IP 封禁 (IP Banning): 对触发规则(如高频请求、访问敏感路径、触发蜜罐)的IP进行长时间或永久封禁。
        *   IP 信誉库: 使用第三方IP信誉服务,直接拦截已知数据中心IP(云服务器、代理服务器)或标记为恶意的IP。对抗: 大规模、高质量的代理IP池(住宅代理 > 数据中心代理,轮换频繁),分布式爬虫架构。
    *   请求频率与模式异常检测: 分析请求的时间间隔(过于规律或极短)、访问路径顺序(不符合用户正常浏览逻辑)、页面停留时间(极短)等行为模式。对抗: 在请求间加入随机延迟,模拟人类浏览路径和速度。

2.  基于会话与身份验证的防护:
    *   强制登录/注册: 将目标数据放在需要用户登录后才能访问的页面。对抗: 模拟登录流程(处理表单、Cookie/Session保持),购买/获取账号池。
    *   Cookie/Token 验证:
        *   首次访问设置复杂Cookie或Token,后续请求必须携带并验证其有效性。
        *   利用Cookie进行会话跟踪和状态维持,检测异常会话。
        *   生成防篡改的加密Token(如JWT)或签名参数,验证请求合法性。对抗: 仔细分析登录流程和后续请求,完整维护Cookie和Session,逆向工程Token生成算法(难度高)。
    *   验证码 (CAPTCHA):
        *   传统图文验证码: 扭曲、粘连、背景干扰的文字/数字识别。
        *   行为验证码:
            *   滑动拼图: 拖动滑块拼合图片。
            *   点选文字: 按顺序点击图片中的文字。
            *   空间推理: 旋转图片至正确方向。
            *   智能验证: 无感验证,通过分析鼠标轨迹、点击位置、设备信息等隐式判断人机。
        *   二次验证: 在特定操作(如翻页过多)后触发验证码。对抗: 使用OCR库(对简单验证码),接入第三方打码平台(人工识别),使用自动化浏览器+机器学习模型(如基于TensorFlow/PyTorch训练识别模型),尝试绕过触发点(如控制请求频率避免触发)。

3.  基于内容呈现与结构的防护:
    *   JavaScript 渲染与动态加载 (AJAX):关键数据(如列表、价格、详情)不在初始HTML中,而是由浏览器执行JavaScript后,通过AJAX/WebSocket从后端API获取并动态插入DOM。简单的HTTP请求爬虫只能获取“空壳”HTML。对抗: 使用无头浏览器(Headless Browsers)如 Selenium, Puppeteer (Node.js), Playwright, Splash (Scrapy) 等模拟完整浏览器环境执行JS;或通过网络请求分析(浏览器开发者工具的Network面板)找到直接提供数据的API接口并模拟调用。
    *   CSS 样式混淆: 使用CSS类名或样式规则对数据进行视觉伪装或逻辑混淆。
        *   字体映射 (Font Glyph Mapping): 使用自定义字体文件,HTML中的字符编码(如`&#xXXXX;`)对应字体文件中不同的字形(如数字1可能实际显示为5)。爬虫直接提取HTML得到的是乱码。对抗:分析字体文件(`.woff`, `.ttf`)建立编码到实际字符的映射关系。
        *   类名随机化/无意义化: HTML标签的`class`属性每次加载随机生成(如`<div class="j83hx s9k2t">¥100</div>`),无法通过稳定CSS选择器定位。**对抗:** 通过相对位置、标签层级、邻近文本特征或XPath定位;分析JS生成逻辑(如果固定)。
        *   伪元素隐藏: 利用CSS的`::before`, `::after`伪元素和`content`属性插入关键数据,这些内容不在HTML源码里。**对抗:** 使用能渲染CSS的无头浏览器提取完整DOM。
    *   HTML 结构混淆/陷阱:
        *   动态变化的DOM结构: 标签结构、嵌套层级、属性名每次请求可能微调。
        *   蜜罐链接 (Honeypot Traps): 在HTML中插入对用户不可见(`display: none;`, `visibility: hidden;`, 极小尺寸、颜色与背景相同)但对爬虫可见的链接(`<a>`)。爬虫访问这些链接会被记录并封禁IP。对抗: 在解析HTML时忽略隐藏元素或特定样式的元素。
        *   虚假/冗余数据: 插入大量无关或错误数据干扰爬虫解析。

4.  基于API接口的防护:
    *   API 访问令牌 (API Keys/Access Tokens): 要求请求携带唯一密钥,并严格限制调用配额。
    *   参数签名/加密: 要求请求参数按照特定规则排序并加上密钥进行哈希(如HMAC-SHA256)生成签名`sign`,或者对参数进行加密。服务器端验证签名/解密正确性。对抗:逆向工程JS代码中的签名/加密算法(难度高,常混淆)。
    *   GraphQL 查询限制与复杂度分析: 防止恶意构造复杂查询耗尽资源。
    *   WebSockets 协议: 使用非HTTP协议传输数据,增加抓包和分析难度。

5.  其他高级手段:
    *   TLS 指纹/HTTP2 指纹:检测客户端(爬虫库/浏览器)在建立加密连接时的独特特征。
    *   浏览器指纹 (Browser Fingerprinting): 收集浏览器特性(Canvas, WebGL, 字体列表, 插件列表, 屏幕分辨率, 时区, 语言等)生成唯一标识符,追踪和识别爬虫。**对抗:** 使用真实浏览器环境(无头浏览器),但需注意特征暴露;使用插件修改指纹(可能不稳定)。
    *   机器学习行为分析: 在服务端部署ML模型,实时分析用户/爬虫的点击流、鼠标移动轨迹、页面交互模式等,识别自动化行为。**对抗:** 在无头浏览器中模拟更逼真的人类行为(随机移动、滚动、点击延迟),难度极大。
    *   法律声明与 robots.txt: `robots.txt` 文件声明哪些路径允许/禁止爬取(无强制力,但提供法律依据)。清晰的服务条款禁止爬虫。对抗: 法律风险考量,遵守`robots.txt`(至少是尊重),避免爬取明确禁止的数据。

二、反反爬策略 (Anti-Anti-Scraping Strategies) - 爬虫的矛

爬虫开发者的目标是:稳定、高效、低成本地获取目标数据,同时尽量降低对目标网站的影响和规避法律风险。

详细的反反爬策略与技术:

1.  伪装成人类浏览器:
    *   精心伪造请求头: 使用真实、多样化的`User-Agent`,并确保`Accept*`, `Connection`, `Referer`, `Cookie` 等头部完整且合理。工具:`fake_useragent`库。
    *   维持会话状态: 正确处理登录后的`Cookies`和`Session`,并在后续请求中携带。使用`requests.Session()`或自动化浏览器管理会话。
    *   模拟浏览行为:
        *   随机延迟: 在请求间加入随机时间间隔(如 `time.sleep(random.uniform(1, 5))`)。
        *   浏览路径: 模拟用户点击链接的自然顺序,而非直接访问深层链接。
        *   页面停留: 在获取页面后“等待”一段时间再解析或发起下一个请求(尤其在无头浏览器中)。
        *   鼠标移动与滚动 (无头浏览器): 使用自动化浏览器API模拟人类在页面上的随机鼠标移动、滚动操作。

2.  分布式架构与IP管理:
    *   大规模代理IP池:
        *   类型选择: 优先使用住宅代理(IP来自真实家庭宽带,更难被识别)和移动代理,其次是高质量的数据中心代理。避免免费代理(不稳定、不安全、易被封)。
        *   轮换策略: 每个请求/每个会话/达到一定频率后自动切换IP。
        *   代理提供商: 选择可靠、IP池大、更新快的服务商(如BrightData, Oxylabs, Smartproxy等)。
        *   代理协议支持: HTTP(S), SOCKS4/5。
    *   分布式爬虫: 在多台机器(或云服务器)上部署爬虫节点,共享任务队列和结果存储,分散请求源IP和负载。工具:Scrapy-Redis, Celery。

3.  应对验证码:
    *   降低触发频率: 通过控制请求速度、模拟人类行为、维护有效会话,尽量减少触发验证码。
    *   自动化识别 (简单验证码): 使用 `pytesseract` (OCR) + 图像预处理(二值化、降噪、去干扰线)。
    *   第三方打码平台: 将验证码图片发送给平台,由人工打码员识别后返回结果(如Super鹰、图鉴)。需付费,有延迟。
    *   机器学习模型: 针对特定网站的复杂验证码(如点选、滑动),收集标注数据训练CNN等模型进行识别。投入成本高。
    *   自动化浏览器交互 (行为验证码): 使用Selenium/Puppeteer/Playwright的API模拟拖动滑块、点击等操作。可能需要分析JS轨迹生成算法(难度高)或使用预录制的轨迹。
    *   验证码服务集成: 使用如2Captcha, Anti-Captcha等服务的API自动处理验证码(背后也是人工或AI)。

4.  处理动态内容 (JavaScript/AJAX):
    *   无头浏览器:
        *   Selenium: 老牌,支持多语言和浏览器(需对应WebDriver),功能强大但相对慢。
        *   Puppeteer: 官方Chrome/Chromium无头控制库(Node.js),速度快,API现代。
        *   Playwright: 由Puppeteer原团队开发(支持Node.js, Python, .NET, Java),支持Chromium, WebKit, Firefox,功能最全面。
        *   Splash: 基于Webkit的无头浏览器,专为Scrapy设计,轻量高效。
        *   关键: 使用`wait`函数(如`WebDriverWait`, `page.waitForSelector`, `page.waitForFunction`)等待目标元素或数据加载完成再提取。
    *   API 逆向工程:
        *   使用浏览器开发者工具的Network面板,观察页面加载过程中发出的XHR/Fetch请求。
        *   分析请求的URL、方法(GET/POST)、请求头(特别是`Authorization`, `Cookie`, `X-Requested-With`, `Content-Type`)、请求参数(Query String, Form Data, Request Payload - 可能含签名/加密)。
        *   尝试直接模拟这些API请求获取结构化数据(通常是JSON)。这通常比渲染整个页面效率高得多,但需要破解可能的签名/加密机制。

5.  解析混淆数据:
    *   CSS 字体映射:
        *   下载网页中引用的自定义字体文件(.woff, .ttf)。
        *   使用`fonttools`等库解析字体文件,获取字符编码(Unicode codepoint)到字形名称(Glyph name)或轮廓的映射。
        *   对比网页源码中的编码(如`&#xef12;`)和字体映射关系,找到对应的实际字符。可能需要动态维护映射,因为字体文件可能更换。
    *   CSS 类名混淆/伪元素:
        *   无头浏览器渲染: 直接获取渲染后的DOM文本(`element.textContent`, `element.innerHTML`),这是最可靠的方式。
        *   相对定位/XPath: 如果结构相对稳定,使用基于邻近元素、父节点或特定文本模式的XPath定位。
        *   分析JS: 如果类名由固定JS逻辑生成(非完全随机),尝试分析JS代码确定规则。
    *   蜜罐识别: 在解析HTML时,检查元素的CSS样式属性(计算样式`getComputedStyle(element)`),过滤掉`display: none`, `visibility: hidden`, `opacity: 0`, 极小尺寸(`width/height <= 1px`)或位置在视口外的元素。避免点击或跟随这些链接。

6.  应对高级指纹和行为检测:
    *   无头浏览器配置:
        *   启用`--disable-blink-features=AutomationControlled`等标志隐藏自动化特征。
        *   覆盖`navigator.webdriver`属性为`undefined`或`false`。
        *   安装插件(如Puppeteer Extra Stealth Plugin)修改各种浏览器指纹特征(Canvas, WebGL, 字体, 插件列表等)。
        *   模拟不同设备配置文件(分辨率、User-Agent、触摸支持等)。
    *   更精细的行为模拟: 在无头浏览器中,除了点击和输入,加入更随机的鼠标移动轨迹(使用`bezier-curves`模拟人类移动)、滚动的速度和停顿、表单填写的思考时间等。这非常复杂且效果不一定好。

7.  健壮性与容错:
    *   错误处理: 对网络错误(Timeout, ConnectionError)、HTTP错误码(403, 404, 429, 500)、解析失败、验证码出现等情况进行捕获和相应处理(重试、换IP、休眠、记录日志、跳过等)。
    *   重试机制: 对可重试错误(如429, 网络抖动)实施带退避策略的重试(如指数退避)。
    *   状态持久化: 保存爬取进度(URL队列、已爬URL集合、已解析数据),支持断点续爬。
    *   监控与告警: 监控爬虫运行状态、成功率、被封情况,及时告警。

三、核心对抗逻辑与注意事项

*   成本与收益的平衡: 反爬措施越强,反反爬的成本(时间、金钱、技术难度)越高。爬虫开发者需要评估目标数据的价值是否值得投入。
*   持续对抗与更新: 没有一劳永逸的方案。网站会不断升级防御,爬虫脚本也需要持续维护和更新策略。
*   尊重 `robots.txt` 与法律合规: 始终检查目标网站的`robots.txt`文件。即使技术上能绕过反爬,也要考虑服务条款、版权法、数据保护法(GDPR, CCPA, PIPL等)和计算机滥用法。爬取公开数据通常风险较低,但绕过登录抓取私有数据、大规模爬取导致服务中断、侵犯版权或隐私可能面临法律诉讼。
*   道德考量: 避免对目标网站造成过大负担。控制爬取速度,尽量在网站访问低峰期运行。
*   选择合适工具: 根据目标网站的反爬强度选择技术栈。简单网站用`requests`/`BeautifulSoup`;动态网站用`Selenium`/`Playwright`;需要大规模分布式和IP管理用`Scrapy`+代理中间件;破解API优先考虑。

总结:

反爬与反反爬是一场高度技术化的动态博弈。理解双方使用的详细技术原理是制定有效策略的基础。成功的爬虫开发者需要精通网络协议(HTTP/HTTPS)、浏览器工作原理、前端技术(HTML/CSS/JS)、编程、数据分析,并具备逆向工程思维和持续学习能力,同时时刻牢记法律与道德的边界。

(AI生成,仅供参考)

robots协议——表明可以进行爬虫的页面和不能爬虫的页面,提供法律声明

可以使用的库:

from urllib.request import urlopen;import requests——用法有所不同;最开始,我们是爬取页面的源代码

页面渲染

一、所有数据否直接写在HTML中,通过页面源代码获得

二、客户端渲染(前端JS渲染)

客户端第一次请求后,服务器A返回HTML框架(其中有对应数据的服务器地址);

之后,想查看什么数据,请求后,对应服务器B会返回相关数据,填充到对应框架的位置。

协议

简单了解,这里只需认识

HTTP协议:Hyper Text Transfer Protocol(超⽂本传输协议),是⽤于从万维⽹(WWW:World Wide Web )服务器传输超⽂本到本地浏览器的传送协议。浏览器和服务器之间数据交互遵守的就是HTTP协议。

http

请求:(客户端发给服务器)

请求⾏ : 请求⽅式(get/post) 请求url地址 协议
请求头 : 放⼀些服务器要使⽤的附加信息(这些信息中间不能多空一行,每行要连在一起)
请求体 :⼀般放⼀些请求参数(请求头和请求体要用隔开一行)

响应:(服务器对客户端发来的信息的回应,返回给客户端)

状态⾏ : 协议 状态码
响应头 : 放⼀些客户端要使⽤的⼀些附加信息
响应体 : 服务器返回的真正客户端要⽤的内容(HTML,json)等

请求头中最常⻅的⼀些重要内容(爬⾍需要):

  • User-Agent:请求载体的身份标识(⽤啥发送的请求)
  • Referer:防盗链(这次请求是从哪个⻚⾯来的?反爬会⽤到)
  • cookie:本地字符串数据信息(⽤户登录信息,反爬的token)

响应头中⼀些重要的内容:

  • Content-Type:返回内容的内容类型,比如Content-Type: text/html; charset=utf-8
  • 各种神奇的莫名其妙的字符串(这个需要经验了,⼀般都是token字样,防⽌各种攻击和反爬)

写爬虫时,要先自己去看要爬的网页的请求格式(爬虫要先仿造浏览器去请求,get、post的请求格式不同)——上面了解http的知识就是为了这一步;

得到response后,就用相关库的函数来操作。

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

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

相关文章

双token三验证(Refresh Token 机制​)

单token存在的问题 我们都知道&#xff0c;token是我们在前后端数据传输的时候为了保证安全从而必须需要进行设置的东西&#xff0c;他的主要作用实际上就是为了保证我们的数据安全&#xff0c;进行身份验证和授权&#xff0c;并且相对于session而言更加适合如今的分布式系统&a…

青少年编程与数学 01-011 系统软件简介 22 VMware 虚拟化软件

青少年编程与数学 01-011 系统软件简介 22 VMware 虚拟化软件 一、历史沿革&#xff08;一&#xff09;创立阶段&#xff08;1998-2003&#xff09;&#xff08;二&#xff09;快速扩张&#xff08;2004-2010&#xff09;&#xff08;三&#xff09;云时代转型&#xff08;2011…

FPGA基础 -- Verilog门级建模之奇偶校验电路

✅ 一、什么是奇偶校验&#xff08;Parity Check&#xff09; &#x1f4cc; 定义&#xff1a; 奇偶校验是一种错误检测编码方式&#xff0c;用于判断一个二进制数据在传输或存储过程中是否发生了单比特错误。 奇校验&#xff08;Odd Parity&#xff09;&#xff1a;总共有奇…

UWB协议精读:IEEE 802.15.4z-2020,15. HRP UWB PHY, STS, HRP-ERDEV, BPRF, HPRF,

跟UWB相关的IEEE标准主要有2个: 1,IEEE 802.15.4-2020 2,IEEE 802.15.4z-2020 IEEE Std 802.15.4z™ ‐ 2020 Amendment 1: Enhanced Ultra Wideband (UWB) Physical Layers (PHYs) and Associated Ranging Techniques scrambled timestamp sequence (STS): A sequence of…

6.IK分词器拓展词库

比如一些行业专业词汇、简单无意义词&#xff08;例如&#xff1a;的、得、地、是等)、网络流行词、后来形成的词、再或者一些禁忌词&#xff08;比如&#xff1a;领导人的名字、黄赌毒犯罪等词要排除的&#xff09; 在es的插件目录下查找配置文件&#xff1a; 找到IKAnalyzer…

Web3-Web3.js核心操作:Metamask、合约调用、事件订阅全指南

Web3-Web3.js核心操作&#xff1a;Metamask、合约调用、事件订阅全指南 我们做了Solidity的合约代码&#xff0c;但是合约仅仅是一个后端逻辑&#xff1b;我们想要让用户来操作你的逻辑还需要做一个基本的网页。如果要做一个基本的网页&#xff0c;我们就要使用到以太坊基金发布…

四色(定理/猜想)染色算法小软件Version1.11

四色(定理/猜想)染色算法小软件Version1.11 2025.6.16 开发者&#xff1a;路人甲/打酱油 增加了【自思肯普法】 为什么加上【自思】两字&#xff1f;因为我也看不明英文的PDF的四色定理证明文档&#xff0c;分什么成千上百种类来证明。我就是百度下&#xff0c;看相关介绍&am…

【Linux驱动开发 ---- 2_深入理解内核模块】

Linux驱动开发 ---- 2_深入理解内核模块 目录 Linux驱动开发 ---- 2_深入理解内核模块学习目标时间安排建议 理论学习1. 什么是内核模块&#xff1f;2. 模块加载与卸载3. 内核模块开发基础 实践任务任务1&#xff1a;准备开发环境任务2&#xff1a;编写简单内核模块任务3&#…

Linux SUID提权 案例以及知识点提高分析

目录 &#x1f4da; Linux SUID 提权原理与红队实践 &#x1f680; 概述 &#x1f6e0;️ SUID 提权原理 核心机制 技术栈 &#x1f50d; 案例背景&#xff1a;sudo -l 与 .monit 脚本 案例信息 脚本内容 &#x1f9ea; 提权步骤分解 &#x1f4cb; 1. 检查 sudo 权限…

S参数与串扰-信号完整性分析

S参数与串扰: 四端口网络S参数中&#xff0c;仍表示反射&#xff0c;表示信号的传输。根据S参数的定义&#xff0c;和两个参数的含义为 当只有端口1有正弦信号激励源时&#xff0c;从端口3和端口4出来的正弦信号只能是互连结构内部耦合过来的&#xff0c;因此表示的是近端串扰…

Android OkHttp 框架超时设置详解

OkHttp 提供了四种不同的超时设置&#xff0c;每种针对网络请求的不同阶段&#xff1a; 1. callTimeout (调用超时) 作用&#xff1a;控制整个调用从开始到结束的总时间&#xff0c;包括所有重定向和重试 默认值&#xff1a;0 (不超时) 场景&#xff1a;当你希望限制整个请求…

如何让LLM通过反思来提升生成sql的正确率 - 以Gemini生成sql为例

什么是Agent Reflection 通常指 “智能体反思”&#xff0c;即让 AI 系统通过自我反思机制优化决策或任务处理过程&#xff0c;类似人类通过复盘改进策略。 创建一个 SQL Agent 导入相关的库 import openai import pandas as pd import sqlite3 from util.get_schema impor…

数字IC学习笔记(二)

数字IC学习笔记&#xff08;二&#xff09; 宏定义&#xff0c;异步FIFO, 时钟来源&#xff0c;复位信号 文章目录 数字IC学习笔记&#xff08;二&#xff09;1. define宏定义的使用2&#xff0c;异步FIFO原理3&#xff0c;时钟来源4&#xff0c;复位参考资料 1. define宏定义的…

日志输出功能

当程序运行出现问题时&#xff0c;日志记录是一种非常有用的工具&#xff0c;它可以帮助我们追踪和定位问题。在 MicroPython 中&#xff0c;可以使用 log 模块来记录程序运行中的信息。本文将介绍 log 模块的使用方法和常见功能。 日志级别 log.DEBUG 常量&#xff0c;用来…

【JVM】- 类加载与字节码结构1

类文件结构 ClassFile {u4 magic;u2 minor_version;u2 major_version;u2 constant_pool_count;cp_info constant_pool[constant_pool_count-1];u2 access_flags;u2 this_class;u2 …

Android及Harmonyos实现图片进度显示效果

鸿蒙Harmonyos实现&#xff0c;使用ImageKnife自定义transform来实现图片进度效果 import { Context } from ohos.abilityAccessCtrl; import { image } from kit.ImageKit; import { drawing } from kit.ArkGraphics2D; import { GrayScaleTransformation, PixelMapTransform…

linux 中的自动化之systemd

linux | 自动化之systemd linux 中的自动化之systemd 学习总是循序渐进的。 linux 中程序的自动化&#xff0c;包括早期手动启动&#xff0c;查看启动后的日志、分析启动情况&#xff0c;再到后面封装脚本(大致要求启动后检查是否挂了&#xff0c;挂了拉起&#xff0c;没挂跳过…

【编译工具】CodeRider 2.0:驭码 CodeRider 2.0 全流程智能研发协作平台深度技术测评报告

目录 前言&#xff1a;CodeRider 2.0 简介 &#xff08;1&#xff09;核心功能 &#xff08;2&#xff09;适用场景 &#xff08;3&#xff09;优势 一、产品概述与技术架构 &#xff08;1&#xff09;产品定位与核心价值 &#xff08;2&#xff09;技术架构解析 &…

抓包 TCP 四次挥手报文

文章目录 抓包 TCP 三次握手报文一、第一次挥手二、第二次挥手三、第三次挥手四、第四次挥手 抓包 TCP 三次握手报文 抓包 TCP 三次握手报文 一、第一次挥手 二、第二次挥手 三、第三次挥手 四、第四次挥手

KMP(Kotlin Multiplatform)发布Web版本乱码

一、背景 最近用KMP尝试运行在Android、iOS、desktop都成功了&#xff0c;网络数据访问也正常。 可是当运行wasmJs的时候遇到了2个较大的问题。 中文字体出现乱码。 出现了跨域问题。 首先贴一下每个平台的运行截图&#xff1a; Android iOS Desktop 二、问题 当web跑起…