搜索

搜索引擎去广告的代码

发表于 2026-10-17 06:14:54 来源:烟消火灭网

搜索引擎的搜索广告位越来越丧心病狂了。百度首页前五条全是引擎“推广”标签,谷歌也学会了在购物结果里塞赞助商链接。去广我写了个油猴脚本,代码专治这种视觉污染。搜索

核心思路就一句话:用CSS选择器把广告节点藏起来。引擎别想得太复杂,去广不需要机器学习,代码不需要图像识别,搜索广告商再怎么换皮,引擎DOM结构里总有规律可循。去广

拿百度举例。代码广告链接的搜索class名常常带`ec_`或`result-op`,而自然结果统一带`result c-container`。引擎我写的去广第一版脚本长这样:

// ==UserScript== // @name 百度去广告 // @match https://www.baidu.com/* // ==/UserScript== const adSelectors = [ '#content_left div[class*="ec_"]', '#content_left div[data-tools*="ad"]', 'div[class*="result-op"]' ]; adSelectors.forEach(sel => {  document.querySelectorAll(sel).forEach(el => el.remove()); }); 

跑起来效果立竿见影。但问题是百度会动态加载新广告——你滚动页面,AJAX又拉来一批。所以得配个`MutationObserver`监听DOM变化,一旦有广告节点插入就立刻拔掉。这就像打地鼠,但地鼠刚冒头就被锤。

谷歌更狡猾。广告链接的href里藏着`url?q=`跳转参数,自然结果直接指向目标网站。所以除了看class,还得检查链接特征。我写了个正则:

function isAdLink(a) {  const href = a.href || ''; return href.includes('/url?q=') || href.includes('googleadservices') || a.getAttribute('data-snf') === 'x'; } 

然后遍历所有`h3`标题下的`a`标签,命中就往上找父节点,把整个搜索条目删掉。实测准确率大概95%,偶尔误伤一个正常结果——但为了清净,误伤就误伤吧。

有个细节很多人忽略:广告位不只在结果列表里。百度右侧的“相关搜索”栏、谷歌顶部的购物广告框、甚至“百度知道”的推广卡片,全是重灾区。我的脚本里专门维护了一份`adContainerSelectors`,覆盖这些边角料区域。

写到第三版时遇到个头疼问题。有些广告用了`position: sticky`吸顶,像狗皮膏药一样粘在视口顶部。直接`remove()`倒是干净,但页面布局会抖动——因为广告占位被抽走了,下面内容往上跳。解决办法是给广告容器加上`visibility: hidden !important; height: 0 !important;`,保留占位但不显示。丑是丑了点,但浏览体验流畅。

还有个反直觉的坑:某些搜索引擎(比如必应)的广告节点不带任何特殊标识,纯粹靠`data-index`排序。前三个是广告,后面才是自然结果。这种只能写死逻辑:`document.querySelectorAll('#b_results > li').slice(0, 3).forEach(el => el.style.display = 'none')`。简单粗暴,但有效。

最后提醒一句:别把脚本写成针对某个网站的硬编码。搜索引擎改版是常事,今天能用的选择器明天就失效。我把选择器都抽成配置数组,每次页面加载时重新匹配,失效了就自己改配置,不用动主逻辑。

这套脚本我用了快两年,搜索体验干净得像回到了2005年。广告商和反广告的猫鼠游戏永远不会停,但只要DOM还存在结构化特征,这场仗就有的打。

随机为您推荐
友情链接
版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright © 2016 Powered by 搜索引擎去广告的代码,烟消火灭网   sitemap

回顶部