素晴らしい記事がありました。
Amazonの商品ページから、「人気のインディーズマンガ」を消したい(chrome) - Qiita
https://qiita.com/iteyan/items/78bcad46ae43616eeb0f
コメント欄に書きましたが、いくつかのサイトで肌色成分多め画像は、Chrome の Adblock Plus という拡張つかって、とりあえず目立つものを個別に画像だけを消していました。Adblock Plus は全体的に広告が消えますし、個別の画像を指定することもできるからです。
別に広告業界に反対しているわけでもなんでもないのですが、肌色系の画像がちらつくのが嫌だから導入しています。
ですがこの Adblock Plus では個別には画像しか選択できなくて不便でした。
ScriptAutoRunner の仕組をつかえば記事タイトルもまるごと消せるのでありがたい。
ということで「Amazonのインディーズマンガ」は非表示にさせてもらうとともに、
以前から気になっていた、窓の杜とか、PCWatchとか、インプレス社サイトの肌色成分が多めの記事リンクを消してみました。画像は今までも消していたのですが、記事タイトル文字が残ってしまっていたので、そちらも ScriptAutoRunner によって文字指定して消すことができました。
const pcWatch = () => {
const excludeTextArray = [
'バウヒュッテ',
'シリコンで人肌の',
'ノーフューチャー',
'ウィザードリィスキーマ',
'ナイトピットウォーク',
'人間の肌のような',
'攻殻機動隊の実写版',
'グラビア',
'あの太ももが',
'恥じらい顔',
'恋人たち',
'この綾波、大人だ',
'写真のキモチ',
];
excludeTextArray.forEach((excludeText) => {
targetTitles = document.querySelectorAll('span,img');
targetTitles.forEach((targetTitle) => {
const title = targetTitle.getAttribute('title');
if (title) {
// console.log('ScriptAutoRunner', title)
if (title.includes(excludeText)) {
console.log('ScriptAutoRunner', 'Hit', title)
targetTitle.parentNode.remove();
}
}
});
});
};
setTimeout(pcWatch, 5000);
setTimeout(pcWatch, 10000);
setTimeout(pcWatch, 15000);
setTimeout(pcWatch, 20000);
setTimeout(pcWatch, 25000);
setTimeout(pcWatch, 30000);
setTimeout(pcWatch, 35000);
setTimeout(pcWatch, 40000);
setTimeout(pcWatch, 45000);
setTimeout(pcWatch, 50000);
setTimeout(pcWatch, 55000);
setTimeout(pcWatch, 60000);
指定文字列が実際にあわせているので、なんだか卑猥感丸出しの指定ですが、これ、ターゲット記事リンクで俺が以前みたことがあるから出ているとかではないですよね。全く恥ずかしい。
こんな恥ずかしい文字列をプログラムコードを書いたのは、初めてかもしれません。やれやれです。プログラマとして肌色成分多めなお仕事はしたくないものですよ。
さて、とりあえず動くの対応で、パフォーマンスは後回ししています。リンク記事画像読み込みがけっこう遅延して実行されるみたいなので、単にsetTimeoutでぐるぐる回してみました。新しいのが読み込まれたらそれをイベントで拾って随時消すとか、そういうのやりたければ誰か書いてください。
また、これだとブラウザで見る全てのページに負担がかかってしまうので、URLがインプレス系のページだけで動くようにしたいですが、今の所まだ実装してないです。
ところで動作確認してたら、PCWatchとかでは肌色成分多めなリンク記事がバンバンでるんだけど、家電Watchでは全くでないから、いろいろ文句言われないように調整しているんですね。インプレスさん。なかなかロジックを苦労されているみたいで、w苦笑です。
そういう知りたくもない分岐処理ロジックとかを見抜いたりとか、ため息ついてしまいます。一生懸命、どこかのだれかのエンジニアが調整して「よーし、おじさん、PCWatchやAKIBA PC HOTLINE では、ターゲットが雄ばかりだから、メスフェロモン増加しちゃうぞー」的記事リンクを作成するようなコードとか設定を書いていたんですよね。やれやれ。そうすると記事自体に、エロフラグとか付帯しているってことですよね。ユーザーには見えないけれども、AIに判定させるためにとか。そういう仕事したくないなあ。
終わりに
ところでこれ応用したら、Qiitaページだけで、特定ユーザーの記事やコメントを消すってのも簡単にできそうです。応用範囲が広くて楽しみ。
追記:改良
こんな感じかな。特定サイト向けだから負荷高くてもいいだろうというのにしておきました。
const targetUrls = [
'.impress.co.jp',
];
if (targetUrls.some(url => location.href.includes(url))) {
console.log('impress site !');
const notObsceneImpress = () => {
const excludeTextArray = [
'バウヒュッテ',
'シリコンで人肌の',
'ノーフューチャー',
'ウィザードリィスキーマ',
'ナイトピットウォーク',
'人間の肌のような',
'攻殻機動隊の実写版',
'グラビア',
'あの太ももが',
'恥じらい顔',
'恋人たち',
'この綾波、大人だ',
'写真のキモチ',
];
excludeTextArray.forEach((excludeText) => {
targetTitles = document.querySelectorAll('span,img');
targetTitles.forEach((targetTitle) => {
const title = targetTitle.getAttribute('title');
if (title) {
// console.log('ScriptAutoRunner', title)
if (title.includes(excludeText)) {
console.log('ScriptAutoRunner', 'Hit', title)
targetTitle.parentNode.remove();
// targetTitle.style.display = 'none';
}
}
});
});
};
for (let i = 1; i < 60; i += 1) {
setTimeout(notObsceneImpress, i * 1000)
}
}