当前位置:首页 > JavaScript

js实现水印清除

2026-03-15 16:10:15JavaScript

清除网页水印的JavaScript方法

方法一:移除DOM元素

通过检查页面元素结构定位水印元素并移除。常见水印可能包含特定类名或ID:

js实现水印清除

document.querySelectorAll('.watermark, .water-mark, #watermark').forEach(el => el.remove());

方法二:修改CSS样式

若水印通过CSS实现,可覆盖相关样式属性:

js实现水印清除

const style = document.createElement('style');
style.innerHTML = `
  [class*="watermark"], [id*="watermark"] {
    display: none !important;
    opacity: 0 !important;
  }
`;
document.head.appendChild(style);

方法三:处理Canvas水印

对于Canvas绘制的水印,需重写绘图方法:

const originalFillText = CanvasRenderingContext2D.prototype.fillText;
CanvasRenderingContext2D.prototype.fillText = function(...args) {
  if (!/watermark/i.test(args[0])) {
    originalFillText.apply(this, args);
  }
};

方法四:拦截图片请求

针对动态加载的水印图片:

const originalCreateElement = document.createElement;
document.createElement = function(tagName) {
  const el = originalCreateElement.call(document, tagName);
  if (tagName.toLowerCase() === 'img') {
    el.addEventListener('load', function() {
      if (/watermark/.test(this.src)) this.style.display = 'none';
    });
  }
  return el;
};

注意事项

  • 部分网站使用SVG或WebGL实现水印,需针对性处理
  • 清除水印可能违反网站使用条款
  • 某些水印采用背景重复平铺方式,需同时处理background-image属性

完整示例代码

(function() {
  // DOM元素清除
  document.querySelectorAll('[class*="mark"],[id*="mark"]').forEach(el => {
    if (/water|logo|signature/i.test(el.className + el.id)) el.remove();
  });

  // CSS样式覆盖
  const style = document.createElement('style');
  style.innerHTML = `
    .watermark-layer, .protected-content { 
      pointer-events: auto !important; 
      user-select: auto !important; 
    }
  `;
  document.head.append(style);

  // Canvas处理
  if (window.CanvasRenderingContext2D) {
    const textMethods = ['fillText', 'strokeText'];
    textMethods.forEach(method => {
      const original = CanvasRenderingContext2D.prototype[method];
      CanvasRenderingContext2D.prototype[method] = function(text, ...args) {
        if (!/watermark|copyright/i.test(text)) original.call(this, text, ...args);
      };
    });
  }
})();

标签: 水印js
分享给朋友:

相关文章

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…