CSS Selector 过滤元素——一键去广告
过滤元素是什么
配置页面有一个"过滤元素"输入框,可以填写任意 CSS selector。PakePlus 打包出来的 APP 在运行时,会在网页加载后自动执行一段隐藏代码:
// 伪代码:PakePlus 运行时注入的隐藏逻辑
document.querySelectorAll('你填的 selector').forEach(el => {
el.style.display = 'none';
el.remove();
});
匹配到的 DOM 元素会被直接从页面上移除或隐藏。
最常用场景:去广告
如果打包的网页有烦人的弹窗广告、侧边广告栏、底部推荐条等:
1. 打开 PakePlus 预览
点配置页面底部的"预览"按钮,在预览窗口里看到完整网页。
2. F12 打开开发者工具
PakePlus 预览窗口支持右键 → 检查(或开启了"开发调试"开关后,Ctrl+Shift+I)。在 Elements 面板里用元素选择器点广告元素,看它的 class 或 id。
3. 写 selector
- 按 class 选:
.ad-banner、.sidebar-ads、.popup-ad - 按 id 选:
#ads-container、#sidebar-recommend - 按多层 class 组合:
.header > .promo-wrapper - 按属性选:
[data-ad]、div[class*="ad"](class 里包含 "ad" 的所有 div)
4. 填进过滤元素字段
多个 selector 之间用英文逗号分隔:
.ad-banner, #ads-container, [data-ad], div[class*="ad-popup"]
保存后重新预览,广告应该消失了。
常用 selector 速查
| selector | 匹配的元素 |
|---|---|
.ad | 所有 class 为 ad 的元素 |
.ad *, .ads * | class 为 ad 或 ads 的内部所有后代元素 |
[id^="ad-"] | id 以 "ad-" 开头的元素 |
div[class*="banner"] | class 里包含 "banner" 的 div |
iframe[src*="ads"] | src 里包含 "ads" 的 iframe(很多广告走 iframe) |
.popup, .modal | 弹窗、模态框 |
.sidebar-recommend | 侧边栏推荐 |
.footer-ad | 底部广告条 |
配合 JS 注入实现更强的去广告
过滤元素是页面加载后立即执行的,但有些广告是:
- 滚动到某位置才出现
- 点击后才加载
- 用 React/Vue 动态渲染的
这种情况下过滤元素可能不够,需要配合 JS 注入基础:
// JS 注入脚本示例:持续监听 DOM 变化,移除后来加载的广告
const observer = new MutationObserver(mutations => {
document.querySelectorAll('.ad, .banner, [class*="ads"]').forEach(el => {
el.style.display = 'none';
});
});
observer.observe(document.body, { childList: true, subtree: true });
过滤元素不是万能的
| 情况 | 过滤元素能处理吗 | 推荐方案 |
|---|---|---|
| 静态 DOM 广告 | ✅ 能 | 过滤元素就行 |
| 动态加载的 React/Vue 广告 | ❌ 不能 | JS 注入 + MutationObserver |
| 视频前置广告 | ⚠️ 部分能(如果是 DOM 层的 overlay) | JS 注入更稳 |
| localStorage 里存的广告开关 | ❌ 不能 | JS 注入来操作 localStorage |
| 需要网络拦截的广告 | ❌ 不能 | PakePlus 不支持请求拦截 |
实战:打包一个干净的 YouTube 客户端
假设你想把 YouTube 网页版变成无广告的桌面客户端:
第一步:填过滤元素
.ytd-popup-container, .ytd-comments, #chat-container, ytd-live-chat-frame
第二步:JS 注入 + MutationObserver
// 移除动态加载的推荐视频、直播聊天、评论区
const hide = () => {
document.querySelectorAll('.ytd-popup-container, ytd-live-chat-frame').forEach(el => {
el.style.display = 'none';
});
};
hide();
new MutationObserver(hide).observe(document.body, { childList: true, subtree: true });
第三步:打包预览 → 确认广告消失 → 发布
安全注意
过滤元素和 JS 注入本质上是对目标网站做"二次开发"。注意:
- 仅打包你自己有权限使用的网站,不要用于破解付费内容
- 如果目标网站是你自己运营的,用过滤元素去掉自己网站里不需要的组件没问题
- 如果是他人网站的第三方组件(比如嵌入广告),用过滤元素隐藏属于合理的客户端定制行为