Javascriptを使って、自作のブラウザで広告を非表示にしたいと思ったのですが上手く行きませんでした。
どうすればよいのでしょうか...
*解決しました! 書き換えたコードは下に付け加えてあります。
OS:windows
ブラウザ:cefsharp.winformを使用 (言語:c#)
試したこと:cefsharpの関数かメソッド(区別が分かりませんでした。ごめんなさい...)を使って、
javascriptを実行しました。詳細は下で説明させて下さい。
非表示にしたい広告のhtml
html
1<img src="https://tpc.googlesyndication.com/simgad/15857895360425161466" border="0" width="300" height="250" alt="" class="img_ad">
実際のコード
c#
1 void ILoadHandler.OnLoadingStateChange(IWebBrowser chromiumWebBrowser, LoadingStateChangedEventArgs loadingStateChangedArgs) 2 { 3 if (!loadingStateChangedArgs.IsLoading) 4 { 5 // Javascriptを実行する。 6 loadingStateChangedArgs.Browser.MainFrame.EvaluateScriptAsync(@"(()=>{return document.title;})();").ContinueWith((reponse) => { 7 frmBrowser.title = (String)reponse.Result.Result; 8 }); 9 10 // 広告を非表示にしようとしたコードです 11 loadingStateChangedArgs.Browser.MainFrame.EvaluateScriptAsync(@"let tags = document.getElementsByTagName('img');for (i = 0; i < tags.length; i++){tags[i].style.display = 'none';}"); 12 13 } 14 } 15
javascriptの部分のみ取り出すと下の様になります
javascript
1let tags = document.getElementsByTagName('img'); 2for (i = 0; i < tags.length; i++) { 3 tags[i].style.display = 'none'; 4}
このコードで、広告以外の画像は半分くらい非表示にできましたがgoogle広告などは非表示に出来ませんでした。
試しにqiitaを使ってどのように機能するのか確かめてみました。
上手く画像が非表示出来たもの(右側のスポンサー一覧の画像を非表示に出来ました)
画像広告が非表示できなかったもの(右上のgoogle広告を非表示に出来ませんでした)
個人的に、広告はもともとのhtmlに記述されていないから上手く非表示に出来ないと考えていますが、
そうだとしても、どのように解決すれば良いか分かりません。
稚拙な文章ですが、どうかお付き合いください...
<解決後に書き換えたコード>
ku__ra__geさんのアドバイス(広告はiframeで表示されているということ)を元にgoogleとyahooの広告を非表示にするコードを書きました。
仕組みは非常にシンプルで、
htmlの中からdiv, iframeタグを取得し
そのidの名前に特定の文字列を含んだ場合に
その要素を非表示にしています。
c#
1void ILoadHandler.OnLoadingStateChange(IWebBrowser chromiumWebBrowser, LoadingStateChangedEventArgs loadingStateChangedArgs) 2 { 3 //throw new NotImplementedException(); 4 if (!loadingStateChangedArgs.IsLoading) 5 { 6 // Javascriptを実行する。 7 loadingStateChangedArgs.Browser.MainFrame.EvaluateScriptAsync(@"(()=>{return document.title;})();").ContinueWith((reponse) => { 8 frmBrowser.title = (String)reponse.Result.Result; 9 }); 10 11 loadingStateChangedArgs.Browser.MainFrame.EvaluateScriptAsync(@"function deleteAd(){let e=document.querySelectorAll('iframe, div'),d=[];for(i=0;i<e.length;i++)d.push(e[i].id),(d[i].includes('google_ads_iframe_')||d[i].includes('yads'))&&(e[i].style.display='none')}setInterval(deleteAd,1);"); 12 13 14 } 15 }
javascriptのみを取り出したもの
javascript
1function deleteAd() { 2 let e = document.querySelectorAll('iframe, div'), 3 d = []; 4 for (i = 0; i < e.length; i++) d.push(e[i].id), (d[i].includes('google_ads_iframe_') || d[i].includes('yads')) && (e[i].style.display = 'none') 5} 6setInterval(deleteAd, 1); //<--位置ミリ秒ごとに広告を非表示にするプログラムを実行。PCに負荷がかかるかもしれない 7
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/23 12:57
2021/10/23 23:53
2021/10/24 01:08