iconic.naturee.jpg

via naturee

苹果手机上也能「屏蔽内容农场」了 - iOS上 使用 Quantumult X/Surge 配合 JavaScript/CSS 屏蔽「内容农场/CSDN/KKnews」及谷歌搜索结果中的广告,让谷歌搜索更清爽实用。(Safari用户也可以配合油猴脚本使用:https://greasyfork.org/zh-CN/scripts/443290-adblock4limbo

I. 内容农场

利用QuantumultX/Surge/油猴脚本 屏蔽「内容农场」搜索结果 - CSDN - 复制粘贴乐园.PNG

利用QuantumultX/Surge/油猴脚本 屏蔽「内容农场」搜索结果 - kknews - 每日头条.png

原标题:iOS苹果手机屏蔽内容农场的方法:使用 Quantumult X/Surge/油猴脚本 & JavaScript/CSS 屏蔽内容农场在谷歌/必应搜索结果中的呈现(iPhone/Safari/Chrome),顺便在清除谷歌搜索结果中的Adsense广告,还你清爽的 Google 中文搜索体验!

内容农场(英文:content farm)是指为了牟取广告费等商业利益或出于控制舆论、带风向等特殊目的,快速生产大量网络文章来吸引流量的网站。此类网站通常找不到作者、管理者、网站负责人,也不会主动管理产出的内容,对侵权或错误内容投诉的处理也很消极。其产出内容多半都是缺乏原创性且真实性无法保证的内容,且有极高比例是盗用、盗译自他人的原创图文,或由非专业写手胡乱拼凑网络文章而来,因而多半缺乏可靠来源、质量低劣、不具参考价值、传播误导讯息,也经常掺杂大量广告或恶意程序。 via 维基百科

II. 一个好消息

一个好消息:配置文件:contentFarm.conf/contentFarm.sgmodule 中所指向的 contentFarm.js 文件,会与 Google-Chinese-Results-Blocklist.txt/content-farm-terminator 保持同步更新,即如果 Google-Chinese-Results-Blocklist/content-farm-terminator 涵盖了所有内容农场网站域名的话,那么你永远也不会在 Google 搜索结果中看到这些 内容农场的垃圾内容;(P.S. 目前已涵盖约4k+内容农场网站域名,点此查看);

III. 软件说明及公开仓库

系统:iOS/iPadOS/macOS:
浏览器:Chrome/Safari/Firefox/edge;
代理软件:QuantumultX/Surge;
涉及搜索引擎:谷歌搜索/必应搜索;
浏览器扩展Tampermonkey For Chrome/Safari 或 Adguard for Mac(付费授权版);
Githubhttps://github.com/limbopro/Adblock4limbo
contentFarm.jshttps://raw.githubusercontent.com/limbopro/Adblock4limbo/main/Adguard/contentFarm/contentFarm.js
内容农场域名黑名单来源Google-Chinese-Results-Blocklist 内容农场终结者:content-farm-terminator content-farm-list :https://github.com/wdmpa/content-farm-list

IV. QuantumultX 重写配置(屏蔽内容农场)

在 Quantumult X 重写中引用配置文件https://limbopro.com/contentFarm.conf (食用方法:打开 Quantumult X - 重写 - 引用 - 粘贴该链接;);
交流群组https://t.me/Adblock4limbo

V. Surge 模块配置(屏蔽内容农场)

食用方法

本模块内容已经添加至 毒奶去广告计划 模块内,如果你已安装 Adblock4limbo.sgmodule,请不要再安装本模块;

第一步:安装模块:Surge - 首页 - 模块 - 安装新模块 - 粘贴下面的链接 - 好的;(如何 更新模块?:左滑 模块的名称 - 点击 更新;);

https://limbopro.com/contentFarm.sgmodule

第二步: 更新 外部资源Surge - 首页 - 点击左上角 - 进入你的 配置列表 - 编辑 - 外部资源 - 点击 全部更新(这一步很重要,很多时候大家在第一次安装并更新模块完成附带更新外部资源,就再也不手动去更新 外部资源 了,而是等待它自动更新;);

第三步:配置分流Surge - 首页 - 出站模式 - 规则分流 - 代理规则 - 新增 - 增加新规则集 - 外部规则集 - 策略(选) - Reject - 粘贴 如下 URL

模块引用后记得更新外部资源,并开启 Rewrite、MitM,脚本的 开关,配置并信任证书;

额外的配置MitM - 配置根证书 - 选项 - 开启 “跳过服务端证书验证” 以及 “用于TCP连接”,正常情况下无需开启;

如何更新模块与外部资源(脚本/分流/重写等)?:模块安装好后,可点击 - 模块 - 找到 安装的模块 ,左滑 想要更新的模块 - 点击 更新 ;返回 Surge - 首页 - 点击左上角的 配置文件名称 - 找到 编辑 - 外部资源 - 全部更新

VI. 油猴 - Tampermonkey(屏蔽内容农场)

如果你更喜欢使用 Safari,可以选择安装 userscript 的 Safari 浏览器扩展,那样手机浏览器上也能使用油猴脚本了;

我们已经发布在了社区,如大家已安装油猴,可点击右方链接安装:https://greasyfork.org/zh-CN/scripts/443290-adblock4limbo-adsremoveproject 或 进入个人中心查看可选安装 https://greasyfork.org/zh-CN/users/893587-limbopro

如上述链接提示脚本因外部代码引用规范被 GreasyFork 暂时移除可通过 Github仓库备份 进行脚本安装:https://github.com/limbopro/Adblock4limbo/raw/main/Adguard/contentFarm.user.js

学习资料(脚本实例)

正则表达式的运用

以谷歌搜索(HK)举例,去广告实例分为三个部分
主机名*\.google\.*;(遵循正则表达式书写)
重写类型:response-body;
重写规则

hostname = *\.google\.*
# content Farm Adblock 屏蔽内容农场
https://\www\.google(\.\w{2,4}){1,2}\/search\?.* url response-body </body> response-body <link rel="stylesheet" href="https://limbopro.com/CSS/contentFarm.css"><script  src="https://limbopro.com/Adguard/contentFarm/contentFarm.js"></script></body>

这条重写规则的意思是,匹配域名含 google 在内,但排除网址内容中含CSS/JS/JPEG等资源的其他所有链接,因为我们的主机名填的是 *\.google\.*,所以自然也不会匹配到网址的如 https://limbopro.com/archives/google.html ,会miss,不会hit;在正确匹配网址后,将通过 QX response-body 重写类型继续深入匹配 网页内容(即所谓的响应体),在这个实例中,我们将匹配响应体中的 </body>标签,匹配后进行替换,替换成 <script src="https://limbopro.com/Adguard/contentFarm.js"></script></body>,到这里,我们可以看得出来,这一套下来基本上跟油猴脚本,Adguard、uBlock Origin 一个去广告路子了,都是动态在网页中插入 JS 文件以实现对网页中的元素进行精准控制,或移除或改变其样式或在其后添加新的元素等等。

JavaScript 动态移除网页广告元素的方法

注意,此时重写会有所变动,涉及到 JavaScript 在网页中加载执行的机制,需要把 JavaScript 文件放到DOM最后,即</body>前:

配置文件内容如下

hostname = *\.google\.*
# content Farm Adblock 屏蔽内容农场
https://\www\.google(\.\w{2,4}){1,2}\/search\?.* url response-body </body> response-body <link rel="stylesheet" href="https://limbopro.com/CSS/contentFarm.css"><script  src="https://limbopro.com/Adguard/contentFarm/contentFarm.js"></script></body>

contentFarm.js 文件内容实例如下:大多数时候我们只需要维护 js文件中的 webList 和 google_cssSelectors 这两个变量的内容;

var ads_host = [
    "csdn.net",
    "kknews.cc",
    "021shfx.com",
    "024ksm.com",
    "025pc.cn"
];

var search_results_css = [
    "li.b_algo",
    ".mnr-c.xpd.O9g5cc.uUPGi",
    "div[data-sokoban-grid]",
    "div.g", "div[class='g'][data-hveid]",
    "div[class='mnr-c g'][data-hveid]",
    "div[class][data-sokoban-container]"
]

for (i = 0; i < ads_host.length; i++) {
    var ads_host_css = "[href*='" + ads_host[i] + "']";
    var huge = document.querySelectorAll(search_results_css);
    for (x = 0; x < huge.length; x++) {
        if (huge[x].querySelectorAll(ads_host_css).length) {
            huge[x].style.display = "none";
        }
    }
}

为了方便大家自行尝试,使其可复用,优化代码如下:

var varr = {
    contentfarm: {
        ads_host: [
            "csdn.net",
            "kknews.cc",
            "021shfx.com",
            "024ksm.com",
            "025pc.cn"
        ],
        search_results_css: [
            "li.b_algo",
            ".mnr-c.xpd.O9g5cc.uUPGi",
            "div[data-sokoban-grid]",
            "div.g", "div[class='g'][data-hveid]",
            "div[class='mnr-c g'][data-hveid]",
            "div[class][data-sokoban-container]"
        ]
    }
}

function adsRemove_withhref(ads_host, search_results_css) {
    for (i = 0; i < ads_host.length; i++) {
        var ads_host_css_selector = "[href*='" + ads_host[i] + "']";
        var huge = document.querySelectorAll(search_results_css);
        for (x = 0; x < huge.length; x++) {
            if (huge[x].querySelectorAll(ads_host_css_selector).length) {
                huge[x].style.display = "none";
            }
        }
    }
}

adsRemove_withhref(varr.contentfarm.ads_host, varr.contentfarm.search_results_css);

为了便于查阅与理解,修改了部分变量名称:

var varr = {
    contentfarm: {
        ads_host: [ // 搜索结果页包含的内容农场域名数组
            "csdn.net",
            "kknews.cc",
            "021shfx.com",
            "024ksm.com",
            "025pc.cn"
        ],
        serp_css: [ // 搜索结果页css选择器数组
            "li.b_algo",
            ".mnr-c.xpd.O9g5cc.uUPGi",
            "div[data-sokoban-grid]",
            "div.g", "div[class='g'][data-hveid]",
            "div[class='mnr-c g'][data-hveid]",
            "div[class][data-sokoban-container]"
        ]
    }
}

function adsRemove_withhref(ads_host, serp_css) {
    for (i = 0; i < ads_host.length; i++) {
        var ads_host_cssSelector = "[href*='" + ads_host[i] + "']";
        var css_nodelist = document.querySelectorAll(serp_css);
        for (x = 0; x < css_nodelist.length; x++) {
            if (css_nodelist[x].querySelectorAll(ads_host_cssSelector).length) {
                css_nodelist[x].style.display = "none";
            }
        }
    }
}

adsRemove_withhref(varr.contentfarm.ads_host, varr.contentfarm.serp_css);

JavaScript/CSS 动静态移除谷歌搜索结果中的广告

Ads_Block_Google_Results_文字链接广告.png
Ads_Block_Google_Results_商品图片广告.png

在中文互联网日渐App化的今天,博主还是更喜欢在浏览器中搜索内容,查阅资料;

屏蔽谷歌搜索结果中的广告的 JavaScript 代码如下:(博主把这段代码放到了 contentFarm.js 里面了,正常情况下大家也看不到谷歌搜索结果中的广告了),点此在谷歌搜索 expressvpn 看看,如若已正确配置 contentFarm.conf 重写,应该是看不到广告了;

contentFarm.js 部分示例(注:仅用于移除谷歌搜索结果中的广告的部分JavaScript代码;)

/*
Written by limbopro
Google TxT Ads block
*/

var google_TXTads_cssSelectors = ["[data-text-ad],#tvcap,.adDDi,#tads[aria-label]"];
var adsKill = document.querySelectorAll(google_TXTads_cssSelectors);

var i;
for (i = 0; i < adsKill.length; i++) {
    adsKill[i].style.display = "none";
}

contentFarm.css 示例(注:目前该css文件仅用于静态移除谷歌搜索结果中的广告,而移除内容农场的搜索结果则需要JavaScript);

[data-text-ad] {display: none! important;}
#tads[aria-label] {display: none! important;}
.adDDi {display: none! important;}
#tvcap {display: none! important;}

上述两个示例是等效的,都是通过CSS属性选择器的相应方法对元素进行隐藏/不展示;

你可能需要学习的

1.正则表达式
2.JavaScriptJavaScript高级程序设计(第4版).PDF
3.CSS选择器
4.正则表达式在线测试

VII. 附注(ublacklist 浏览器扩展)

uBlacklist.gif

大家也可以使用 ublacklist 浏览器扩展来屏蔽不想看到的,来自某些域名的搜索结果https://github.com/iorate/ublacklist/blob/master/README.zh-CN.md

支持搜索引擎:Bing、Brave、DuckDuckGo、Ecosia、Qwant、SearX、Startpage.com、Yahoo! JAPAN、Yandex でも使用できます;
相应内容农场域名名单可参考:https://github.com/limbopro/Adblock4limbo/tree/main/Adguard/contentFarm/contentFarm.list 届时可以将这个名单里的域名导入 ublacklist(在 ublacklist 扩展设置里有导入选项);

Yes,That's All.

最后修改:2023 年 09 月 21 日 01 : 11 AM