質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2127閲覧

javascriptのhide()を使って広告を非表示にしたい

gatolife

総合スコア3

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2021/10/23 09:15

編集2021/10/24 01:19

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

一定時間ごとに繰り返し対象を非表示にすればよいのではないかと思います。

javascript

1setInterval(()=>{ 2 let tags = document.getElementsByTagName('img'); 3 for (i = 0; i < tags.length; i++) { 4 tags[i].style.display = 'none'; 5 } 6}, 1000);

投稿2021/10/23 11:14

ku__ra__ge

総合スコア4524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gatolife

2021/10/23 12:57

ku__ra__geさん、回答ありがとうございます! google検索で試してみたところ、間違いなく一定時間ごとに非表示にするプログラムが実行されていますが、広告は出来ないようです。 ですが、すべての画像が非表示にされないことに悩まされていたのでku__ra__geさんの回答に助けられました! また別の方法を模索してみます。
ku__ra__ge

2021/10/23 23:53

広告ではよくありますが、iframe内に広告が表示されていることはありませんか?その場合はiframe内の特定要素を参照することができないのでiframe自体を消す必要があります。
gatolife

2021/10/24 01:08

まさにそのとおりでした! iframe要素を指定したら綺麗サッパリ広告を非表示にする事が出来ました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問