油猴脚本去水印实现原理

sxkk20082年前知识分享261

本文同步视频地址

前言

上周微信公众号推出了一种新的形式,类似小红书这样子,群里有小伙伴调侃,是否是小红书的产品经理跳槽到微信了,那作为一个公众号运营者,我也想利用这一点。那么如何快速设计出好看的小红书封面,便成了我的目标。我在 google 上搜索到了一篇文章,可以通过一个好用的网站,比格设计,设计出好看的封面。它跟稿定设计一样,也是一个在线制图的网站,当然如果你没开会员的话,下载下来也是有水印的。那么我在想,是否也可以写一个油猴脚本来实现白嫖呢?

脚本演示

脚本我已经写好了,大家可以自行搜索下载安装。安装完成后,设计的图片就没有水印了,右上角还有一个免水印按钮,点击下载,便可以下载无水印图片了。

image.png

实现原理

接下来,我们就来说说,这个脚本的实现原理。那并不是任何网站都可以破解会员,是因为这个网站不够建全,我们可以利用一些前端知识来绕过付费。

打开 chrome dev tools, 在 HTML 中搜索 water ,我们可以搜索到带水印的 div,给这个 div 加一个样式: display none。就可以实现去水印了。 原理就是通过这一行代码实现去水印了, 现在我们可以使用截图工具截图保存即可。

image.png

接下来说说,右上角的无水印下载按钮是怎么实现的。

其实设计网站实现图片下载,一般由 2 种方式:

第一种: 使用一个前端库 dom-to-img 来实现

第二种: 使用服务器 puppeteer 截图实现。

第一种方式就是它自带的按钮(极速下载测试版)

第二种服务端生成:当我们点击上面的(下载带水印)按钮,我们可以看到它的 2 个请求接口,其中有一个请求带参数 waterMark 值为 1 ,那么是否是改成 0, 就没有水印了呢?

第二个接口可以通过第一个接口返回的 uid,获得下载图片的地址。那么我们就可以自己模拟请求这个 2 个接口,来实现这一个功能。

代码分析

// ==/UserScript==
// @grant        GM_addStyle
// @require      https://cdn.jsdelivr.net/npm/jquery@3.2.1/dist/jquery.min.js
// @license MIT
// ==/UserScript==
(function () {
  "use strict";

  GM_addStyle(`.water,.water-tip{display:none!important}`);

  const toast = (content, time) => {
    return new Promise((resolve, reject) => {
      let elAlertMsg = document.querySelector("#fehelper_alertmsg");
      if (!elAlertMsg) {
        let elWrapper = document.createElement("div");
        elWrapper.innerHTML =
          '
' + '

' + content + "

";
elAlertMsg = elWrapper.childNodes[0]; document.body.appendChild(elAlertMsg); } else { elAlertMsg.querySelector("p").innerHTML = content; elAlertMsg.style.display = "flex"; } window.setTimeout(function () { elAlertMsg.style.display = "none"; resolve && resolve(); }, time || 1000); }); }; const headers = { Authorization: `Token ${localStorage.getItem("__token__")}`, }; function requestDownload(id) { toast("已加入下载队列,请稍候。", 2000).then(() => { $.ajax({ method: "GET", url: `/new/udesign/checkdownload/${id}`, headers, dataType: "json", }).then((res) => { if (res.code === 203) { requestDownload(id); return false; } window.open(res.data.url, "_blank"); }); }); } setTimeout(() => { const container = document.querySelectorAll(".ant-space-item")[10]; $(container) .css({ display: "flex" }) .append( '无水印下载' ); $("#tm-download").on("click", () => { const queryString = window.location.search; const urlParams = new URLSearchParams(queryString); const bid = urlParams.get("bid"); $.ajax({ method: "GET", url: `/new/udesign/downloadAsync/${bid}`, headers, dataType: "json", data: { width: parseInt($(".canvas-view-item").text()), height: parseInt($(".canvas-view-item:eq(1)").text()), id: bid, format: "png", watermark: 0, role_type: 3, preview_path: "/bill/output", fast_download: false, }, }).then((res) => { console.log(res); requestDownload(res.data.uid); }); }); }, 1000); })();

首先我们通过 require 加入 jquery,方便我们 dom 操作,然后通过一个定时器,在 dom 加载之后,往右上角插入一个无水印下载的按钮。

点击这个按钮,模拟调用刚才的 2 个接口,并且发送参数:bid、图片的宽度、高度。

  • bid: 也就是 url 上的 id。
  • 图片宽度和高度:也就是页面上输入的值。

最后我们通过接口返回的图片地址,使用 window.open 方法实现图片下载。

是不是很简单呢?你学会了吗?

以上就是本期视频的全部内容,感谢给我的观看,我们下期再见。

相关文章

为了能完成这个目标,团队内部分享就成了这个目标的关键结果,那么如何在短时间内完成这项任务呢?下面分享下我的技巧。

明确主题

首先我们要明确公司需要什么?我们不能随便搞一个知识点去分享,这样没有人愿意去听,比如公司接下来可能会上前端监控系统,那么我们可以在先做一个技术调研,出一个《前端监控体系搭建要点》,比如公司接下来需要做小程序,那么我们可以出一个《小程序跨端实现方案探索》等,如果没有什么新的功能要开发,那么我们也可以谈一谈《前端性能优化》、《Typescript 快速上手》,总之要明确一个切合实际的目标。

巧用搜索引擎

确定好主题后,我们可以在技术社区搜索相关的技术文章,比如掘金、知乎、思否、微信公众号等, 比如直接在掘金搜索“性能优化” 然后按热度排序,就可以找到不错的文章。

掘金搜索性能优化

接下来我们需要根据这些文章中的内容制作 PPT

使用 markdown 来制作 PPT

程序员做 PPT 可能会浪费不少时间,所以我选择是 markdown 来制作 PPT,这里我分享 2 个工具

Marp for VS Code vscode 插件 Marp for VS Code 只用关注内容,简单分隔一下,就可以制作 PPT,看下 marp 官方文档可以很快学会用法,看看 jeremyxu 写的效果,项目地址:kubernetes 分享 PPT 源文件

Marp kubernetes 分享 PPT

二: Slidev 也可以让我们用 Markdown 写 PPT 的工具库

官网地址:https://sli.dev, 基于 Node.js、Vue.js 开发,而且它可以支持各种好看的主题、代码高亮、公式、流程图、自定义的网页交互组件,还可以方便地导出成 PDF 或者直接部署成一个网页使用。

  • 演讲者头像

当然还有很多酷炫的功能,比如说,我们在讲 PPT 的时候,可能想同时自己也出镜,Slidev 也可以支持。

演讲者头像

  • 演讲录制

Slidev 还支持演讲录制功能,因为它背后集成了 WebRTC 和 RecordRTC 的 API,

演讲录制

如何快速在团队内做一次技术分享?

前言相信很多小伙伴跟我一样,是一位奋斗在一线的业务开发,每天有做不完的任务,还有项目经理在你耳边催你,“这个功能今天能完成吗?”其实作为一名前端工程师,任务就是完成 Leader 的任务, 但公司实行...

人工智能绘图:创新与无限潜能

人工智能绘图:创新与无限潜能

  人工智能(Artificial Intelligence,简称AI)作为当今科技领域最热门的话题之一,在诸多领域的应用日益普及。其中,人工智能绘图技术逐渐受到广泛关注...

红外AI技术-用得越来越普遍

红外AI技术-用得越来越普遍

  红外AI技术在目前的智能化进程中起着越来越重要的作用。红外传感器寻找到人类体表的温度分布,判断人的存在或活动状态,接着机器学习算法进行人体识别,从而实现对人体的监控识别及...

小度PL:探索AI领域的前沿技术应用

小度PL:探索AI领域的前沿技术应用

  随着人工智能技术的不断发展,小度LC成为探索AI领域前沿技术与应用的领先机构之一。小度LC立足于人工智能技术的研发和应用,致力于为用户提供更便捷、智能的生活体验。  作为...

大方智能——赋能AI智能化发展的引领者

大方智能——赋能AI智能化发展的引领者

  在当今数字化时代,人工智能(AI)已成为引领科技进步和经济发展的关键核心。而在AI技术的应用与实践中,大方智能作为一家创新的科技企业,以其领先的技术实力和卓越的解决方案,...

AI绘画的机理及其应用

AI绘画的机理及其应用

  近年来,AI(人工智能)在绘画领域中得到了越来越广泛的应用。AI绘画的基本思路是将计算机视觉和机器学习技术应用于图像处理和绘画中。那么,AI绘画的机理是什么?它有哪些应用...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。