article_image

原标题:使用 Keyboard Maestro 提高剪藏同类网页的效率

UNTAG 介绍了多种保存纯净网页的方法,让信息爱好者直呼过瘾。在重复、大量保存一个网站的同类网页时,其实还有进一步解放双手的方法。

以 UNTAG 网站的《卡片笔记实践篇》这篇文章为例,下面的关联文章和底部页脚部分是不需要的,保存到本地会扰乱搜索结果。

Alt text
1-1 UNTAG 网站文章多余的部分

可以通过 Keyboard Maestro 运行针对固定网站的剪藏代码,将不需要内容删除掉,省去每次鼠标来回点击的时间。再模拟 SingleFile 插件保存网页的快捷键 ⌘ + ⇧ + Y ,实现剪藏+保存一键触发,干净利落。

Alt text
1-2 保存效果演示

Chrome Keyboard Maestro 动作下载

也可以为 UNTAG 网站自制一个书签小工具,一刀剪出干净页面。

Alt text
1-3 使用书签小工具

剪藏 UNTAG(拖拽到网址收藏夹后使用)

工作原理

定位要删除的元素

打开浏览器开发者工具,点击元素选择器,尝试用鼠标在要删除的元素周围移动,确定要删除的元素对应的 HTML 代码位置,此时右侧的 HTML 代码区域也会有高亮标记随之移动。

确定大概位置后点击一下,定位当前元素所在的 HTML 代码区域。将鼠标在定位的 HTML 区域上下移动一下,根据左边的元素高亮情况尽可能选择可删除的最大范围的 HTML 代码。

Alt text
2-1 定位要删除的元素

确定好之后,在 HTML 代码上右键——Copy——Copy JS Path,复制当前 HTML 代码的 JS Path,应该是如下所示: document.querySelector("#__nuxt > div > div.n-config-provider > div > div.page_full_width > div > div > div.right_container > div:nth-child(6)")

背景知识——什么是 JS Path?

Copy JS Path,实际上获取的是一个使用 document.querySelector的表达式,该表达式可以定位到在元素检查器中选中的特定元素。

在控制台中粘贴并执行这段代码,将返回对应的元素。

这个功能在调试和开发过程中非常有用,它为开发者提供了一种快速获取元素引用的方法,而不需要手动构建选择器。

Alt text
2-2 在控制台使用 JS Path 选择元素

从截图中可以看到,关联文章部分被高亮了,这证明我们已经通过 JavaScript 代码选中了要删除的部分。

背景知识——什么是 document?

document 是一个全局对象,代表加载到浏览器中的当前网页,它是操作当前网页的入口点。通过 document 对象,可以访问和修改网页的内容。

例如 document.querySelector('selector') 可以选择一个元素。

使用 JavaScript 修改 document 时,页面的显示也会相应地更新。

接下来如法炮制,获取底部页脚部分的元素的表达式

Alt text
2-3 获取底部要删除的元素

应该类似这样 document.querySelector("#__nuxt > div > div.n-config-provider > div > div.footer")

在选择的 HTML 代码上右键——Delete element,删除选中的 HTML 代码块,观察一下选择的 HTML 代码是否正确。

Alt text
2-4 删除选中的 HTML 代码

成功删除了底部页脚部分,说明选择到了正确的 HTML 代码。

删除选中的元素

有了要删除的元素,接下来就是怎么删的问题。

这非常简单,以删除底部页脚部分为例,只需要 2 行 JavaScript 代码:

let element = document.querySelector("#__nuxt > div > div.n-config-provider > div > div.footer")
element.remove()
  • 第一行代码:使用 let 声明一个变量 element,将页面元素的查询结果赋值给 element 变量
  • 第二行代码:从 HTML 代码中删除该元素

再写一段代码来删除关联文章部分。 将关联文章的查询结果赋值给 element,再次使用 element.remove() 删除关联文章部分

let element = document.querySelector("#__nuxt > div > div.n-config-provider > div > div.footer")
element.remove()

element = document.querySelector("#__nuxt > div > div.n-config-provider > div > div.page_full_width > div > div > div.right_container > div:nth-child(6)")
element.remove()

把写好的代码复制到开发者工具中的控制台(Console)中执行

Alt text
2-5 在控制台中执行删除代码

成功删除了页面中不需要的元素。

在实际使用中其他网站可能需要删除 2 个以上的元素,为了更方便的使用,可以优化一下代码并添加上注释帮助理解。

let elements = [
    // 选择关联文章部分
    document.querySelector("#__nuxt > div > div.n-config-provider > div > div.page_full_width > div > div > div.right_container > div:nth-child(6)"),

    // 选择页脚部分
    document.querySelector("#__nuxt > div > div.n-config-provider > div > div.footer")
]

for(let element of elements) {
        element.remove()
}

let elements = [ ... ] 定义了一个名为 elements 的数组变量。在这个数组中,有两个元素,每个元素都是一个要删除的区域。使用 // 为代码添加上注释。 注意,数组中的两个元素之间需要使用 , 连接。

for ... 遍历 elements 数组中的每个元素并删除它们。

在控制台中执行优化后的代码:

Alt text
2-6 优化后的代码
背景知识——为什么通过控制台可以修改当前页面

当浏览器打开一个网页时,浏览器会解析HTML、CSS和JavaScript,然后渲染页面。此时会创建一个环境来执行该页面上的 JavaScript 代码。

通过浏览器开发者工具的控制台,开发者可以在当前页面的 JavaScript 环境中执行代码,因此可以直接访问和修改当前页面中的元素。

执行 JavaScript 代码的两种方式

自动化工具 Keyboard Maestro

Alt text
3-1 Keyboard Maestro 截图

我在执行 JavaScript 代码的下方加上了 SingleFile 插件保存网页的快捷键,保存 UNTAG 网页就是一个按键的事儿~

进阶——书签小工具

《剪藏网页到本地的轻量化思路》这篇文章中介绍的网页剪藏小工具为例,与日常普通的书签对比,发现地址栏不是以熟悉的 URL 地址开头,而是以 javascript: 开头。

Alt text
3-2 书签地址对比

javascript:是一个 URI(统一资源标识符)方案。当在浏览器的地址栏中输入以 javascript: 开头的代码或点击一个包含此方案的书签时,浏览器会执行后面的 JavaScript 代码,而不是加载一个新页面。

不过出于安全原因直接在浏览器的地址栏中输入或粘贴以 javascript: 开头的代码时,浏览器默认不会执行这段代码,这是为了防止恶意网站诱导用户输入或粘贴恶意代码。 尽管直接在地址栏中执行 JavaScript 被限制,但书签工具仍然被允许,因为它们需要用户明确的交互(即点击书签)。这为那些知道他们正在做什么的用户提供了便利,同时减少了不熟悉的用户不小心执行恶意代码的风险。 所以,要创建我们自己的书签小工具,就要先创建一个空白书签,在 URL 部分粘贴上 JavaScript 代码。

在粘贴代码之前,要对代码做一些处理,首先删除注释并将代码压缩到一行。注意代码之间需要用;连接。

let elements = [document.querySelector("#__nuxt > div > div.n-config-provider > div > div.page_full_width > div > div > div.right_container > div:nth-child(6)"), document.querySelector("#__nuxt > div > div.n-config-provider > div > div.footer")]; for(let element of elements) { element.remove(); }

找一个在线工具将压缩后的代码进行 URL 编码,避免出现一些解析问题。

let%20elements%20%3D%20%5Bdocument.querySelector(%22%23__nuxt%20%3E%20div%20%3E%20div.n-config-provider%20%3E%20div%20%3E%20div.page_full_width%20%3E%20div%20%3E%20div%20%3E%20div.right_container%20%3E%20div%3Anth-child(6)%22)%2C%20document.querySelector(%22%23__nuxt%20%3E%20div%20%3E%20div.n-config-provider%20%3E%20div%20%3E%20div.footer%22)%5D%3B%20for(let%20element%20of%20elements)%20%7B%20element.remove()%3B%20%7D

现在就可以在书签 URL 处填上 javascript: 和编码后的代码。

Alt text
3-3 自制书签小工具

测试一下

Alt text
1-3 使用书签小工具

过往文章收藏文章索引《一种将线上内容精简格式后保存到本地的方法》 《剪藏网页到本地的自动化思路(以 Keyboard Maestro 为例)》 《剪藏网页到本地的轻量化思路》


author_avatar

https://twitter.com/fastLonggogo