我的HTML编码技巧略高于新手级,虽然我的CSS每天都在提高,所以我甚至都不知道是否可以这样做。虽然我没有Python,Php,Ruby,Javascript,Perl,Fortran 蜂鸣器!(只是想确保你还是醒着大家伙)我愿意学习。下面的切片是365,937个字符中的前970个字符 - .003% - 仅包含一种风格。正是这些和其他广告代码墙块我渴望删除:
<style type="text/css">#Ad2, #AdText, #Ad_Top, #Adbanner, #Adfox_Banner, #Ads, #AdvertFieldBottom, #AdvertFieldCenter, #AdvertFieldTop, #Advertisement, #AdvertisingTopLine, #BanHolder28-1, #BannerGBottom, #BannerGCenter, #BannerGIMG, #BannerGTop, #BannerH2Left, #BannerHIMG, #BannerHLeft, #BannerUnderBroChat, #JaboxAdBarOuter, #METABAR_IFRAME, #MarketGidComposite1001, #PopUpWnd, #PopWin, #PopWin_popupsu_notds, #RichBanner_center, #__adIframe, #ad-200, #ad-slides, #ad2, #ad4, #ad7, #adHeadBanner, #adL, #adP, #adWrapper, #ad_help_link, #ad_hide_mask_ad_0, #ad_hide_mask_ad_1, #adbns, #adf_notifiers_wrap, #adsCSS, #advRightBox, #advbroker_place_1, #advbroker_place_10, #advbroker_place_2, #advbroker_place_3, #advbroker_place_4, #advbroker_place_5 { display: none!important; }
#advbroker_place_6, #advbroker_place_7, #advbroker_place_8, #advbroker_place_9, #advertbox, #advertising_floater, #advertisment, #advrich, #advunder-top, #adzerk3, #app-banners, . . .</style>
我经常保存HTML页面供我自己的私人参考,我想知道是否有任何可用于剥离
的脱机¹小部件/应用程序/宏/技术我想保留作者页面的视觉风格,但删除膨胀,我想如果stackoverflow上的高级人才无法找到解决方案,那么 nobody 就可以。我对正则表达式有基本的了解,除Notepad ++外,我是以下资产的常规用户:
可以吗?感谢大家。 :)
¹出于隐私原因,我想避免在线服务
答案 0 :(得分:1)
好的,这很粗糙,但是正如Wild Beard所提到的,要摆脱这种广告废话并不是一个简单的方法。 使用固定间距/等宽字体和带有行编号选项的健壮文本编辑器(我在Textpad中完成了此操作,但是我很确定Don Ho的免费Notepad ++可以做到这一点也是如此)。
您现在应该有一个大块的文本,左对齐,并且是单行
对不希望将第5行与第50001行分组的第一个字符进行排序
您正在做的是抓住最长的广告行并将其隔离以进行删除。准备多次执行此操作。并且不要费力使文档恢复其原始顺序。这就是为什么要对行进行编号。
答案 1 :(得分:0)
这是一个简单的概念证明。删除元素等或样式后,您仍需要确定读/写文件。 Fiddle
但是,正如我在评论中提到的那样,这也会匹配#additional-info
。我确实添加了一个检查,看看该元素是否为iframe
,这应该可以缩小错误。
var matched_classes = [],
regex = /(#ad)\w+/gmi,
style = document.querySelectorAll('style');
style.forEach(function(item) {
matched_classes = item.innerHTML.match(regex);
});
matched_classes.forEach(function(item) {
var el = document.getElementById(item.replace('#', ''));
if ( el != null && el.nodeName === 'IFRAME' ) {
el.parentElement.removeChild(el);
}
});
<style type="text/css">#Ad2, #AdText, #Ad_Top, #Adbanner</style>
<iframe id="Ad2" src="https://www.w3schools.com">
</iframe>
<div id="AdText">Something not removed hopefully.</div>
正如您在评论中提到的,您不知道如何实现这一点。没有简单易行的方法。您可以开始here关于如何使用javascript创建文件,但Javascript可能不是您最好的选择。从你的问题语言列表中,Python可能是你最好的选择,遗憾的是,我不知道Python。
您可以复制我创建的代码并将其粘贴到文件底部,在浏览器中打开文件,查看源代码,复制并保存新文件,因为它应删除任何iframe
元素来自id
标记的匹配<style>
。这有点单调乏味。但对于那些没有任何经验可能是您最佳起点的人来说,您知道没有为您写出整个解决方案。
<script>
var matched_classes = [],
regex = /(#ad)\w+/gmi,
style = document.querySelectorAll('style');
style.forEach(function(item) {
matched_classes = item.innerHTML.match(regex);
});
matched_classes.forEach(function(item) {
var el = document.getElementById(item.replace('#', ''));
if ( el != null && el.nodeName === 'IFRAME' ) {
el.parentElement.removeChild(el);
}
});
</script>
答案 2 :(得分:0)
如果您在浏览器的shadow-root中找到这些奇怪的样式定义: 此CSS通过动态添加到每个网站 Adguard Adblocker。该工具设置了各种&#34; #banner ...&#34;或&#34; #ad ...&#34;等等#34;显示:无!重要&#34;。
https://chrome.google.com/webstore/detail/adguard-adblocker/