油猴脚本开发入门:用JavaScript给任意网页加『黑科技』功能(从写第一个脚本开始)

ubuntu 给meld加上右键菜单 Ubuntu 基于 python 开发的 meld 比较 工具, 支持 两个 三个 文件夹和 文件 比较。但是 欠缺 右键菜单 的 选择左侧文件 比较 , 以及 和 已经 选中的 文件 XXXX 比较 ,并且每次比较都要一层一层选中文件,特别麻烦。下面介绍可以右键 菜单 功能的 神器 ** nautils-compare **。 阅读详情

油猴脚本开发入门:用JavaScript给任意网页加『黑科技』功能(从写第一个脚本开始)

你是否曾浏览某个网站时,心里冒出这样的念头:“要是这里能自动填表就好了”、“这个按钮要是能一键操作就完美了”、“页面广告太多,真想一键净化”……对于大多数普通用户来说,这些想法往往止步于想象。但对于了解一点前端知识,或者愿意动手尝试的你来说,这些“黑科技”功能完全可以亲手实现。今天,我们就来聊聊如何通过编写用户脚本(UserScript),借助 Tampermonkey(俗称油猴)这个强大的工具,将你的浏览器变成一个高度定制化的“超级浏览器”。

简单来说,用户脚本就是一段运行在特定网页上的JavaScript代码。它像是一个隐形的助手,在网页加载时悄悄介入,按照你设定的规则去修改页面内容、添加功能或自动化操作。而Tampermonkey,就是管理、运行这些脚本的“指挥官”。它本身不提供具体功能,但为你搭建了一个安全、便捷的脚本运行环境。这意味着,你无需等待网站官方更新,也不必依赖功能固定的浏览器扩展,就能为自己打造独一无二的浏览体验。

无论你是刚接触JavaScript的前端新手,还是希望将想法快速落地的开发者,用户脚本开发都是一个绝佳的实践场。它门槛相对较低,能让你立刻看到代码带来的改变,获得强烈的正反馈。接下来,我们将从零开始,一步步构建你的第一个脚本,并深入探讨如何让它变得更强大、更智能。

1. 环境搭建与脚本管理器选择

在开始编写代码之前,我们需要一个“舞台”来运行我们的脚本。这个舞台就是用户脚本管理器。市面上主流的脚本管理器有好几款,它们各有特色,但核心功能相似:安装、管理、启用/禁用用户脚本。

1.1 主流脚本管理器对比

目前,最广为人知且功能最完善的当属 Tampermonkey(篡改猴),这也是本文主要使用的工具。它支持 Chrome、Edge、Firefox、Safari、Opera 等几乎所有主流浏览器,拥有超过千万的用户,生态成熟,文档齐全。除了Tampermonkey,还有 Violentmonkey(暴力猴) 和 Greasemonkey(油猴,Firefox专属) 等选择。

为了帮助你快速做出选择,这里有一个简单的功能对比表格:

特性Tampermonkey (篡改猴)Violentmonkey (暴力猴)Greasemonkey (油猴)
主要支持浏览器Chrome, Edge, Firefox, Safari, Opera 等Chrome, Edge, Firefox, Opera 等仅 Firefox
开源情况部分开源(核心开源)完全开源完全开源
同步功能支持通过浏览器同步、Google Drive、Dropbox等同步脚本支持通过浏览器同步、Gist等同步脚本支持通过浏览器同步
内置编辑器功能强大,支持语法高亮、ESLint检查基础编辑器基础编辑器
高级API支持非常全面,包括GM_*系列API、GM_info等支持大部分常用API支持大部分常用API
社区与生态最庞大,脚本资源极其丰富活跃,资源较多历史悠久,但主要限于Firefox
推荐人群绝大多数用户和开发者,追求稳定和全面功能偏好开源软件、轻量简洁的用户坚定的Firefox用户

提示:对于初学者和大多数场景,强烈建议从Tampermonkey开始。其庞大的用户基数意味着你在遇到问题时更容易找到解决方案,丰富的功能也能满足你未来更复杂的开发需求。

1.2 安装Tampermonkey

安装过程非常简单,以Chrome浏览器为例:

  1. 打开Chrome网上应用店。
  2. 在搜索框中输入“Tampermonkey”。
  3. 找到由“Jan Biniok”开发的“Tampermonkey”扩展,点击“添加到Chrome”。
  4. 在弹出的确认对话框中点击“添加扩展程序”。

安装成功后,你会在浏览器工具栏的扩展程序区域看到一个猴头图标。点击它,如果看到类似“仪表盘”、“添加新脚本”的菜单,就说明安装成功了。

// 这是一个最简单的Tampermonkey脚本元数据块示例,我们稍后会详细解释
// ==UserScript==
// @name         My First Script
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://www.example.com/*
// @grant        none
// ==/UserScript==

对于无法访问Chrome商店的用户,也可以从Tampermonkey官网或一些可信的第三方扩展商店下载.crx文件进行离线安装。安装完成后,别忘了点击猴头图标,进入“仪表盘”熟悉一下界面。你会看到“已安装脚本”、“实用工具”、“设置”等选项卡,这里就是你未来管理所有“黑科技”的大本营。

2. 编写你的第一个脚本:从“Hello World”到实战

理论知识铺垫完毕,现在让我们动手创建第一个脚本。我们将从一个经典的“Hello World”开始,然后迅速升级到一个有实际用途的案例:为任意网页添加一个自定义按钮。

2.1 创建新脚本与理解元数据

在Tampermonkey面板中,点击“添加新脚本”。你会看到一个预置了模板的编辑器窗口。最上方被// ==UserScript==和// ==/UserScript==包裹的部分称为元数据块(Metadata Block)。它定义了脚本的基本信息和行为规则,是脚本的“身份证”和“说明书”。

让我们逐行解读一个基础元数据块:

// ==UserScript==
// @name         页面美化助手
// @namespace    https://your-site.com
// @version      1.0.0
// @description  自动移除页面广告,并添加夜间模式切换按钮
// @author       YourName
// @match        https://*.zhihu.com/*
// @match        https://www.bilibili.com/video/*
// @exclude      https://www.bilibili.com/read/*
// @grant        GM_addStyle
// @grant        GM_notification
// @require      https://code.jquery.com/jquery-3.6.0.min.js
// @run-at       document-end
// ==/UserScript==
  • @name: 脚本的名称,会显示在管理列表中。
  • @namespace: 一个唯一的标识符,通常使用你的域名,用于避免与其他作者的脚本名称冲突。
  • @version: 版本号,便于更新和管理。
  • @description: 脚本功能的简要描述。
  • @author: 作者信息。
  • @match: 最重要的指令之一。它使用URL模式来指定脚本在哪些网页上运行。例如https://*.zhihu.com/*表示在所有知乎子域名下的所有页面运行。你可以添加多个@match规则。
  • @exclude: 排除规则,即使在@match范围内,符合@exclude规则的URL也不会运行脚本。
  • @grant: 声明脚本需要使用的特殊Tampermonkey API(GM_* API)。例如GM_addStyle用于添加CSS样式,GM_notification用于发送桌面通知。如果不需要特殊API,可以写@grant none。
  • @require: 在脚本运行前,预先加载外部JavaScript库,如jQuery、Lodash等。
  • @run-at: 指定脚本注入的时机。document-end(默认)表示在DOM加载完成后、图片等资源加载前运行;document-start表示尽可能早地运行;document-idle表示在页面完全加载后运行。

注意:@match规则编写需要格外小心。过于宽泛(如*://*/*)可能导致脚本在不需要的网站上运行,影响性能甚至引发错误。过于狭窄又可能无法覆盖目标网站的所有页面。建议先使用具体URL测试,再逐步放宽规则。

2.2 实战案例:为页面添加一个功能按钮

假设我们想为某个技术博客网站(例如 example-tech-blog.com)的每篇文章页面添加一个“一键复制文章标题和链接”的按钮。

首先,我们创建脚本并填写元数据:

// ==UserScript==
// @name         技术博客文章助手
// @namespace    https://my-scripts.com
// @version      0.2
// @description  为技术博客文章页面添加一键复制标题和链接的功能按钮
// @author       DevLearner
// @match        https://example-tech-blog.com/article/*
// @grant        GM_setClipboard
// @grant        GM_notification
// ==/UserScript==

(function() {
    'use strict';
    // 你的代码将写在这里
})();

接下来,我们编写核心功能。思路是:等待页面主体内容加载完成,找到文章标题的DOM元素,然后创建一个按钮,并为其绑定点击事件。

(function() {
    'use strict';

    // 使用MutationObserver监听DOM变化,确保目标元素已加载
    const observer = new MutationObserver(function(mutations, obs) {
        // 尝试查找文章标题元素,这里假设标题在一个<h1>标签内,且类名为`.article-title`
        const titleElement = document.querySelector('h1.article-title');
        if (titleElement) {
            // 找到标题后,停止观察
            obs.disconnect();
            // 执行添加按钮的函数
            addCopyButton(titleElement);
        }
    });

    // 开始观察整个文档<body>的子节点变化
    observer.observe(document.body, { childList: true, subtree: true });

    // 如果页面加载很快,可能在我们开始观察前标题就已经存在了,所以立即检查一次
    const initialTitle = document.querySelector('h1.article-title');
    if (initialTitle) {
        observer.disconnect();
        addCopyButton(initialTitle);
    }

    function addCopyButton(titleElement) {
        // 获取文章标题文本
        const articleTitle = titleElement.textContent.trim();
        // 获取当前页面URL
        const articleUrl = window.location.href;

        // 创建按钮元素
        const copyButton = document.createElement('button');
        copyButton.textContent = '📋 复制标题与链接';
        copyButton.style.cssText = `
            position: fixed;
            top: 80px;
            right: 20px;
            z-index: 9999;
            padding: 8px 16px;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            border: none;
            border-radius: 20px;
            cursor: pointer;
            font-size: 14px;
            box-shadow: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08);
            transition: all 0.15s ease;
        `;
        copyButton.onmouseover = () => { copyButton.style.opacity = '0.9'; };
        copyButton.onmouseout = () => { copyButton.style.opacity = '1'; };

        // 为按钮添加点击事件
        copyButton.addEventListener('click', function() {
            // 组合要复制的文本,例如:“文章标题 - 文章链接”
            const textToCopy = `${articleTitle} - ${articleUrl}`;

            // 使用Tampermonkey的API将文本写入剪贴板
            GM_setClipboard(textToCopy, 'text').then(() => {
                // 复制成功后,发送一个桌面通知(需要@grant GM_notification)
                GM_notification({
                    text: `“${articleTitle}”的标题和链接已复制到剪贴板!`,
                    title: '复制成功',
                    timeout: 3000
                });
                // 也可以简单改变按钮文字提示
                const originalText = copyButton.textContent;
                copyButton.textContent = '✅ 已复制!';
                copyButton.style.background = '#10b981';
                setTimeout(() => {
                    copyButton.textContent = originalText;
                    copyButton.style.background = 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)';
                }, 2000);
            }, (err) => {
                // 复制失败的处理
                console.error('复制失败:', err);
                GM_notification({
                    text: '复制失败,请尝试手动复制。',
                    title: '操作失败',
                    timeout: 3000
                });
            });
        });

        // 将按钮添加到页面中
        document.body.appendChild(copyButton);
    }
})();

这个脚本做了以下几件事:

  1. 智能等待:使用MutationObserver确保在文章标题元素加载完成后再执行操作,避免因页面加载速度问题导致脚本失效。
  2. 创建UI:动态创建了一个风格现代的固定定位按钮。
  3. 实现核心功能:点击按钮后,使用GM_setClipboard API将格式化后的标题和链接复制到剪贴板。
  4. 提供反馈:复制成功后,通过GM_notification发送桌面通知,并临时改变按钮样式和文字,给予用户清晰的操作反馈。

保存脚本(Ctrl+S)后,刷新目标博客的文章页面,你应该能看到一个紫色的按钮悬浮在页面右上角。点击它,如果一切顺利,你会收到复制成功的通知,并且粘贴板里已经有了整理好的信息。

3. 掌握核心技能:DOM操作与GM_* API详解

上一个案例我们接触了DOM操作和两个GM_* API。要编写更强大的脚本,必须深入理解这两块内容。

3.1 精准的DOM查询与操作

用户脚本的本质是操作网页的DOM(文档对象模型)。document.querySelector和document.querySelectorAll是你最常用的武器。

  • document.querySelector(selector):返回匹配指定CSS选择器的第一个元素。
  • document.querySelectorAll(selector):返回一个包含所有匹配元素的NodeList(类似数组)。

选择器策略:网站结构可能变化,过于依赖具体的类名或ID可能导致脚本失效。更健壮的策略是:

  • 使用相对路径和语义化标签:例如article h1比.post-header .title .text更稳定。
  • 组合使用属性选择器:a[href*="download"]选择所有链接中包含“download”的<a>标签。
  • 备用方案:如果首选选择器找不到元素,尝试备用选择器。
// 更健壮的元素查找示例
function findArticleContent() {
    // 首选方案:通过文章容器的常见类名或ID查找
    let content = document.querySelector('article .content, .post-content, #articleBody');
    if (content) return content;

    // 备用方案:通过语义化标签和结构查找
    content = document.querySelector('main article, main .post');
    if (content) return content;

    // 最终备用:尝试查找页面中最大的文本容器
    const allDivs = Array.from(document.querySelectorAll('div'));
    const contentDiv = allDivs.reduce((a, b) => a.textContent.length > b.textContent.length ? a : b);
    return contentDiv.textContent.length > 500 ? contentDiv : null; // 假设文章内容至少500字符
}

操作DOM:找到元素后,你可以修改其内容、样式、属性,或者创建、插入、删除元素。

// 修改元素
const title = document.querySelector('h1');
title.textContent = '新标题'; // 修改文本
title.style.color = 'red'; // 修改样式
title.classList.add('highlight'); // 添加CSS类

// 创建并插入新元素
const newDiv = document.createElement('div');
newDiv.innerHTML = '<p>这是动态添加的内容</p>';
document.body.appendChild(newDiv); // 插入到body末尾
title.parentNode.insertBefore(newDiv, title.nextSibling); // 插入到标题后面

// 监听事件
const button = document.querySelector('#myButton');
button.addEventListener('click', (event) => {
    event.preventDefault(); // 阻止默认行为(如表单提交、链接跳转)
    console.log('按钮被点击了!');
});

3.2 强大的GM_* API工具箱

Tampermonkey提供了一系列以GM_开头的特殊API,让脚本能安全地执行一些普通JavaScript在网页上下文中无法完成的操作。使用前必须在元数据中用@grant声明。

以下是一些最常用和强大的API:

API用途示例
GM_setValue / GM_getValue在浏览器存储中保存和读取脚本的持久化数据。GM_setValue('theme', 'dark'); let theme = GM_getValue('theme', 'light');
GM_setClipboard安全地将文本写入系统剪贴板。GM_setClipboard('要复制的文本', 'text/plain')
GM_xmlhttpRequest发起跨域HTTP请求,这是脚本与外部API交互的关键。可用于获取其他网站的数据,实现数据聚合。
GM_addStyle向页面注入CSS样式。比直接修改style标签更优雅。GM_addStyle('body { background-color: #f0f0f0; }')
GM_notification创建桌面通知。GM_notification({text: '任务完成', title: '提示'})
GM_openInTab在新标签页中打开URL。GM_openInTab('https://example.com', {active: false});
GM_registerMenuCommand在Tampermonkey菜单中注册自定义命令。为脚本添加一个快捷操作入口。

让我们看一个结合了数据存储和网络请求的复杂例子:一个简单的网页阅读进度保存器。

// ==UserScript==
// @name         阅读进度保存器
// @namespace    http://tampermonkey.net/
// @version      0.3
// @description  自动保存和恢复你在长文章中的阅读位置
// @match        https://*.long-article-site.com/*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_addStyle
// ==/UserScript==

(function() {
    'use strict';

    // 为进度条添加样式
    GM_addStyle(`
        #reading-progress-bar {
            position: fixed;
            top: 0;
            left: 0;
            height: 4px;
            background: linear-gradient(90deg, #ff6b6b, #4ecdc4);
            z-index: 10000;
            width: 0%;
            transition: width 0.2s ease;
        }
        #reading-progress-resume {
            position: fixed;
            bottom: 20px;
            right: 20px;
            padding: 10px 20px;
            background-color: #4ecdc4;
            color: white;
            border: none;
            border-radius: 25px;
            cursor: pointer;
            display: none;
            z-index: 10000;
            box-shadow: 0 4px 6px rgba(0,0,0,0.1);
        }
    `);

    // 生成当前页面的唯一标识(使用URL和文章标题)
    const pageKey = `reading_progress_${window.location.pathname}_${document.title}`;

    // 创建进度条和恢复按钮
    const progressBar = document.createElement('div');
    progressBar.id = 'reading-progress-bar';
    document.body.appendChild(progressBar);

    const resumeButton = document.createElement('button');
    resumeButton.id = 'reading-progress-resume';
    resumeButton.textContent = '⏩ 跳转到上次阅读位置';
    document.body.appendChild(resumeButton);

    // 尝试加载上次保存的滚动位置
    const savedScrollY = GM_getValue(pageKey, 0);
    if (savedScrollY > 100) { // 如果保存的位置超过100像素,显示恢复按钮
        resumeButton.style.display = 'block';
        resumeButton.addEventListener('click', () => {
            window.scrollTo({ top: savedScrollY, behavior: 'smooth' });
            resumeButton.style.display = 'none';
        });
        // 10秒后自动隐藏恢复按钮
        setTimeout(() => { resumeButton.style.display = 'none'; }, 10000);
    }

    // 监听滚动事件,更新进度条并保存位置
    let saveTimeout;
    window.addEventListener('scroll', () => {
        // 计算阅读进度百分比
        const scrollTop = window.scrollY;
        const docHeight = document.documentElement.scrollHeight - window.innerHeight;
        const scrollPercent = docHeight > 0 ? (scrollTop / docHeight) * 100 : 0;
        progressBar.style.width = `${scrollPercent}%`;

        // 防抖处理:停止滚动500ms后才保存位置,避免频繁写入存储
        clearTimeout(saveTimeout);
        saveTimeout = setTimeout(() => {
            GM_setValue(pageKey, scrollTop);
            console.log(`阅读位置已保存: ${scrollTop}px`);
        }, 500);
    });

    // 页面卸载前强制保存一次
    window.addEventListener('beforeunload', () => {
        GM_setValue(pageKey, window.scrollY);
    });
})();

这个脚本展示了如何将多个GM_* API与DOM操作结合,创建一个有状态、有交互的实用功能。它自动记录你的滚动位置,并在你下次访问同一文章时提供一键跳转的便利。

4. 调试、优化与脚本发布

脚本写好了,但它可能不完美,或者需要在不同环境下测试。掌握调试和优化技巧至关重要。

4.1 调试你的脚本

Tampermonkey脚本的调试与普通网页JavaScript调试几乎相同。

  1. 使用浏览器开发者工具:在运行脚本的页面上,按F12打开开发者工具。
  2. 切换到“源代码(Sources)”面板:在这里,你可以找到你的脚本。它通常位于 (油猴脚本) -> [你的脚本名称] 目录下。你可以在这里设置断点、单步调试、查看变量。
  3. 控制台(Console)输出:在脚本中使用console.log()、console.warn()、console.error()输出信息,这些信息会显示在开发者工具的Console面板中,是排查问题最直接的方式。
  4. Tampermonkey仪表盘:在仪表盘的“已安装脚本”列表中,可以方便地启用/禁用脚本、检查错误日志、编辑脚本源代码。

注意:有时脚本因为@run-at时机或@match规则问题没有执行。首先检查Tampermonkey图标是否在目标页面显示为彩色(通常有数字),这表示有脚本在该页面运行。如果图标是灰色的,说明@match规则可能不匹配当前URL。

4.2 提升脚本的健壮性与性能

  • 错误处理:使用try...catch包裹可能出错的代码块,避免脚本因一个错误而完全崩溃。
    try {
        const sensitiveData = document.querySelector('.user-balance').innerText;
        // 处理数据...
    } catch (error) {
        console.warn('无法获取用户余额,可能页面结构已更改:', error);
        // 提供降级方案或友好提示
    }
    
  • 防抖(Debounce)与节流(Throttle):对于scroll、resize、input等频繁触发的事件,使用防抖或节流技术来限制处理函数的执行频率,避免性能问题。上一个进度保存器的例子就使用了防抖。
  • 避免全局变量污染:始终将你的代码包裹在立即执行函数表达式(IIFE)中,并使用'use strict';模式。
    (function() {
        'use strict';
        // 你的所有代码在这里
        const myPrivateVar = 'safe'; // 这是局部变量
    })();
    // console.log(myPrivateVar); // 错误!无法访问
    
  • 尊重网站与用户:不要过度请求数据,避免影响原网站性能。如果脚本会修改用户界面,确保改动是直观、非侵入式的,并提供关闭或配置选项。

4.3 分享与发布你的脚本

当你创作了一个有用的脚本,可能会想分享给他人。Greasy Fork 是目前最主流、最安全的用户脚本分享平台。

发布前请确保:

  1. 代码清晰:添加必要的注释,说明脚本的功能和配置方法。
  2. 元数据完整:准确填写@name、@description、@match等。
  3. 遵守规则:阅读并遵守Greasy Fork的发布规则,不发布恶意、侵权或违反道德的脚本。
  4. 考虑开源:将脚本代码托管在GitHub等平台,便于他人贡献和改进。

发布流程通常是:在Greasy Fork点击“发布新脚本”,将你的脚本代码粘贴进去,填写描述、标签等信息,然后提交审核。通过后,其他用户就可以通过Tampermonkey的“获取新脚本”功能找到并安装你的作品了。

从“Hello World”到能够解决实际问题的自动化工具,用户脚本开发为你打开了一扇通往浏览器无限可能的大门。它不仅是学习JavaScript的绝佳沙盒,更是将想法快速转化为生产力的利器。当你下次再对某个网页产生“要是有这个功能就好了”的想法时,不妨打开Tampermonkey编辑器,尝试用代码将它实现。

meld的使用 Ubuntu入门之六 $ sudo apt install meld 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 下列软件包是自动安装的并且现在不需要了: libm17n-0 libotf0 m17n-db xaw3dg 使用'sudo apt autoremove'来卸载它(它们)。 将会同时安装下列软件: gir1.2-gtksource-3.0 libgtksourceview-3.0-1 libgtksourceview-3.0-commo... 阅读详情

相关推荐

油猴脚本编写教程

油猴脚本(Tampermonkey)是一个非常流行的浏览器扩展,它可以运行由广大社区编写的扩展脚本,来实现各式各样的功能,常见的去广告、修改样式文件、甚至是下载视频。今天我们就来看看如何编写自己的油猴脚本。当然为了运行油猴脚本,你应该在浏览器中安装油猴插件。 安装油猴插件 安装油猴插件非常简单,直接在浏览器的扩展商店中安装即可。国产浏览器的话一般可以通过下载扩展文件手动拖动的方式来安装。下图是微软...

乐百川 9万+

Ubuntu文本比较工具meld安装

在ubuntu中需要比较文件的差异,于是安装meld ​apt-get install meld 安装完后,在/usr/bin/下找到meld,然后发送到桌面上, 或者在命令行执行meld命令 打开后选择:file->new ,打开文件选择界面,输入两个文件的路径,后即可看到两个文件的差异情况。 转载自:http://blog.youkuaiyun.com/shanzhizi

suxiang198的博客 1835

前端基础入门三大核心之JS篇 —— JavaScript编写油猴脚本:让浏览器做你的私人定制助手【含代码示例】

编写油猴脚本是一场创造力与技术的完美融合,它不仅能够提升个人浏览体验,更能激发你探索前端技术的无限潜能。随着你深入实践,不断解决实际问题,你会发现,每一个不起眼的脚本都是通往更高效、更个性化网络世界的钥匙。所以,不妨现在就开始构思,你的浏览器还缺少哪些魔法?分享你的想法,让我们共同探索更多可能!你有没有遇到过某个网站功能缺失,或是想要自动完成某项重复任务?留言区见,让我们一起探讨如何用油猴脚本解决它!欢迎来到我的博客,很高兴能够在这里和您见面!

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 1970

Ubuntu下的文件比较工具--meld

在ubuntu中自带的文件比较工具:diff在ubuntu中需要比较文件或者文件夹的差异的一个比较好的工具:meldapt-get install meld安装完后,在/usr/bin/下找到meld,然后发送到桌面上, 或者在命令行执行meld命令打开后选择:file->new ,打开文件选择界面,输入两个文件的路径,后即可看到两个文件的差异情况。安装后执行命令meld create_mnist

苏的专栏 5298

Ubuntu/Linux系统管理:使用Meld替代Beyond Compare的嵌入式安装文件比对工具

常用的文件比对工具之一是Beyond Compare,然而,有时我们可能需要在嵌入式系统中使用一个类似的工具。Meld是一个开源的图形化文件和目录比对工具,它提供了用户友好的界面和强大的比对功能。通过使用Meld,我们可以方便地比对文件和目录之间的差异,并进行合并操作。通过这些步骤,我们可以在Ubuntu/Linux系统中使用Meld作为Beyond Compare的嵌入式文件比对工具。在Meld界面的菜单栏中,选择"文件"->“保存”,然后指定保存的文件名和位置。安装完成后,我们可以通过在终端中输入。

CyberBytezZ的博客 2337

从零开始编写油猴脚本Tampermonkey(入门全流程指南)

怎么写脚本?看看这篇文章:从零开始编写油猴脚本Tampermonkey(入门指南)

Code_流苏:在代码中寻诗意,在实践中觅真知 3807

如何编写一个油猴脚本(自己写的第一个油猴脚本)

这个是一篇油猴脚本的入门文章,帮助每一个新手写出第一个属于自己的油猴脚本

m0_63704444的博客 4983

ASME B31.3-2024工艺管道标准介绍

ASME B31.3-2024《过程管道》是ASME发布的最新版工业管道标准,适用于石油、化工、制药等行业的管道系统设计、建造和维护。该版标准进行了多项重要更新,包括软管管理、应力指数调整、新增管件类型、焊接检查和泄漏测试等条款修订,并新增了书面报告要求。标准共594页,为全球过程工业提供管道安全规范,对保障管道系统完整性、可靠性具有重要意义,被多国强制采用或推荐使用。

TXNMG的博客 4708

【教程】油猴脚本开发入门教程

右击顶部工具栏中的油猴插件图标,在弹出的操作框中选择添加新脚本。 之后你将进入一个编辑页面,我们来看看在这个编辑页面中一些基本的知识点。 这里重要的点有两个,一个是设置匹配的网站,默认的初始生成的代码中,没有对 https 的网址进行匹配,仅对 http 网址进行了匹配,所以要自己添加。第二个就是通过 标签来添加你本地的文件地址,这样当你在本地进行开发的代码,就可以直接在对应的网站上执行了。当用户使用 请求远程数据的时候,需要使用 connect 指定允许访问的域名,支持域名、子域名、IP地址以及

码的世界 4万+

使用SSE流式输出(Javaweb前后端实战)

SSE(Server-Sent Events)是一种在Web应用中实现单向实时通信的技术。通过SSE,服务器可以主动向客户端发送更新,而无需客户端不断发起请求。这对于需要实时更新的应用场景(如聊天应用、实时数据监控等)非常有用。(服务端单向传输客户端,长连接)

记得开心一点嘛的博客 1万+

OpenPose 论文理解

OpenPose: Real-time multi-person keypoint detection library for body, face, hands, and foot estimation paper: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields link: OpenPose paper...

JustForYou的博客 2万+

如何开发一个油猴脚本- 从零开始编写一个油猴脚本

一个没有接触过脚本开发的人如何开发一个简单而又实用的油猴脚本? 本文分为几个要点:油猴的介绍安装,脚本需求分析(重点),代码更迭,最终代码。

mukes的博客 7万+

整车无线布置的综述

车载无线功能日益丰富,涵盖5G、GNSS、V2X等多种技术,布置需兼顾性能与美观。车顶是理想位置,鲨鱼鳍、后视镜等集成方案可优化空间。需考虑射频电缆损耗、GNSS天线视角、V2X全向覆盖等关键因素。整车测试需适应高频段需求,通过链路预算和互补天线设计优化信号。不同车型需定制方案,并注意抗干扰和多频段兼容性。(149字)

Godspeed_zwh的博客 1859

【Tampermonkey】油猴脚本入门

油猴脚本是用户编写的小程序,能够在浏览器中自动修改网页行为和外观,从而实现个性化定制和增强功能。

qq_48180611的博客 2万+

车载测试面试题总结

首先确认是什么问题,如果是测试软件的问题就先确定自己的测试方法有没有问题,如果没有问题,那就是测试软件的问题,这时候就需要提bug 进行跟踪,(比如BCM测试的时候,先明确测试的输入,对输入)进行需求分析,然后设计测试用例,进行用例评审,评审完执行测试用例形成最终的版本,台架分为:hil(黑尔)台架,单个控制器的台架、整车台架、车身台架、动力系统台架等,主要验证其功能,或者实车无法满足的测试环境。这个人不可能一直,点击几千次或者多少次几个小时连续点击,人不可能一直在点。因为要模拟一下这个稳定性,

woaxiaoqing的博客 7818

VisionMaster4.2.0与C#控件开发实战:从入门到精通的完整指南

本文详细介绍了VisionMaster4.2.0与C#控件开发的实战指南,从基础环境搭建到核心控件使用,再到高级功能实现。通过VmFrontendControl、VmGlobalToolControl等核心控件的深入解析,帮助开发者快速掌握机器视觉应用开发技巧,提升开发效率。特别适合需要集成VisionMaster4.2.0 SDK进行视觉系统开发的C#程序员。

weixin_42665725的博客 383

【油猴脚本】00036 案例 Tampermonkey油猴脚本,爬虫, 仅用于学习,不要乱搞。网页数据获取器-添加层级不遮挡。Jquery爬虫,HTML+Css+JavaScript编写

附具体完整代码,深入理解,彻底掌握!可以一键复制,查看效果。

宝码香车的博客 1449

56、Cortex - M33处理器浮点单元(FPU)的使用与优化

本文详细介绍了Cortex-M33处理器浮点单元(FPU)的使用与优化方法,涵盖单双精度浮点计算的选择、编译器命令行配置、ABI模式对比、特殊FPU模式设置(如Flush-to-Zero、Default NaN)、浮点异常处理机制以及FPU电源管理策略。结合代码示例和流程图,提供了在不同应用场景下的最佳实践建议,并总结了常见问题及解决方案,帮助开发者提升嵌入式系统中浮点运算的性能、精度与能效。

bread的博客 154

被谷歌插件劝退,我半小时学会了油猴脚本开发

很早以前,我就被里的各种插件所吸引,比如能屏蔽广告的 Adblock能定义标签页界面的 Infinity 新标签页、用来格式化 JSON 的开发小工具,还有截图工具,甚至是这样面向开发者的调试利器。。当我了解到这些插件其实是用 JavaScript 开发的时,我立刻产生了浓厚的兴趣。我兴奋地想着——如果我能掌握插件开发,是不是就能随心所欲地给网页加上各种炫酷的功能?当时脑海里一下冒出了很多点子,觉得这是前端开发和浏览器能力结合后最有趣的事情之一。

石小石Orz的博客 1798

MIKE水动力笔记5_建立水动力模型

前文已经讲了如何制作网格文件(.mdf文件),这一博文就讲如何建立水动力模型。

晏长街的博客 3万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

使用油猴脚本在网页中插入按键

这里写自定义目录标题使用油猴脚本在网页中插入按键要求code 使用油猴脚本在网页中插入按键 测试环境 chrome 浏览器 + 暴力猴插件 + www.baidu.com 要求 懂javascript 与 jquery code // ==UserScript== // @name test // @namespace AceScript Scripts // @match https://www.baidu.com/ // @grant none // ==/UserScript== (func

u010598445的专栏 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

为什么推荐前端学习油猴脚本开发?

油猴(Tampermonkey)是一款浏览器插件,允许用户在网页加载时注入自定义的 JavaScript 脚本,来增强、修改或自动化网页行为。通俗地说,借助油猴,你可以将自己的 JavaScript 代码“植入”任意网页,实现自动登录、抢单、签到、数据爬取、广告屏蔽等各种“开挂级”功能,彻底掌控页面行为。分享一些我实现的有趣网页脚本手势识别实现网页控制人脸识别实现”人脸版黄金旷工“小游戏****接口拦截工具:修改优快云博客数据接口返回值Vue路由一键切换:开发效率起飞。

石小石Orz的博客 1171

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【油猴脚本】00032 案例 Tampermonkey油猴脚本,爬虫,仅用于学习,不要乱搞。网页数据获取器-进入页面缩小化显示。JavaScript爬虫,HTML+Css+JavaScript编写

附具体完整代码,深入理解,彻底掌握!可以一键复制,查看效果。

宝码香车的博客 2095

5分钟开发教你零基础开发属于自己的油猴脚本(网页随机变颜色)

5分钟开发教你零基础开发属于自己的油猴脚本(网页随机变颜色)

weixin_45565886的博客 9082

【油猴脚本】00028 案例 Tampermonkey油猴脚本, 仅用于学习,不要乱搞。添加开始页图标。Jquery爬虫,JavaScript爬虫,HTML+Css+JavaScript编写

附具体完整代码,深入理解,彻底掌握!可以一键复制,查看效果。

宝码香车的博客 1051

【油猴脚本】00038 案例 Tampermonkey油猴脚本,爬虫, 仅用于学习,不要乱搞。网页数据获取器-添加遮罩层动画。Jquery爬虫,HTML+Css+JavaScript编写

附具体完整代码,深入理解,彻底掌握!可以一键复制,查看效果。

宝码香车的博客 1739
上一篇: OrbStack vs Docker Desktop:Mac上轻量级K8s环境搭建对比
下一篇: 当骁龙845遇上Win11:小米Mix2S刷机后能做哪些生产力测试?
python9snake
博客等级 码龄1天 0粉丝 1724原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值