当前位置:首页 > 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实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…