0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Amazonスポンサー商品を非表示にするChrome(またはEdge)の拡張機能を作った

Last updated at Posted at 2021-10-26

まず、拡張機能を使わずスポンサー商品を簡単に消す方法を見つけたので紹介しておく。

スポンサー商品の簡単な消し方
Amazon の設定メニューで言語を「日本語」から「English」に切り替えると、Kindleコミックの検索結果ではスポンサー商品が表示されない。

以下は拡張機能について

機能
Kindle本と紙の本の検索結果(条件判定を修正すれば他の商品分野にも適用可能)のスポンサー商品を非表示にする。

manifest.json
{
  "name": "Amazon Sponsored Products Remover",
  "description": "Remove sponsored products from search results.",
  "version": "1.0",
  "manifest_version": 3,
  "content_scripts": [
    {
      "matches": ["https://www.amazon.co.jp/s*"],
      "js": ["content_script.js"]
    }
  ]
}
content_script.js
// (注意) このコードは UTF-8 で保存すること。BOMの有無は問わない
// 履歴
// 2021.11.03 スポンサー商品の判定条件修正

(function () {

function hideElement(elem) {

	elem.style.display = 'none';

	//上の文をコメントアウトし、以下をアクティブにすれば、非表示対象を目視できる
	//elem.style['background-color'] = 'darkkhaki';

	//半透明にする手もある
	//elem.style.opacity = '0.4';
}

function main() {
	if(shouldHide()) {
		startHiding();
	}
}

//ページが非表示処理の対象かどうかをboolean値で返す
//   処理対象はKindle本と紙の本の検索結果のページとした
function shouldHide() {

	//画面上部にあるサブメニューを取得して、商品種別を判断する
	const elems = document.querySelectorAll('div[id="nav-subnav"][data-category]');
	for(const elem of elems) {
		switch(elem.dataset.category) {
			case 'digital-text':  //Kindle
			case 'books':         //紙の本
				return true;
		}
	}
	return false;

	// 参考
	// 商品種別をURLの解析で判定するのは難しい
	// 以下のようなURLが随時追加される
	//
	// 【最大50%OFF】Kindle本秋の読書キャンペーン
	// https://www.amazon.co.jp/s?rh=n%3A10387394051&s=featured-rank
	//
	// マンガ大賞2021(紙の本)
	// https://www.amazon.co.jp/s?rh=n%3A3418607051&s=featured-rank
}

//非表示処理の初回起動とページ更新時処理の登録
function startHiding() {

	//検索結果のDIVエレメントを取得
	const searchResult = document.querySelector('div.s-main-slot');
	if(searchResult == null) {
		return;
	}

	//ページロード時の非表示処理
	const elems = searchResult.querySelectorAll(':scope > div[data-asin]');
	for(const elem of elems) {
		tryHideElement(elem);
	}

	//検索結果の下部のページ移動ボタンを押した場合、このスクリプトは新たに起動してくれない
	//そこで MutationObserver を使ってページの変更時に処理するようにする

	//オブザーバインスタンスを作成
	const observer = new MutationObserver(
		//コールバック関数
		(mutations) => {
			for(const m of mutations){
				for(const node of m.addedNodes) {
					tryHideElement(node);
				}
			}
		});

	//変更監視スタート
	observer.observe(searchResult, {childList: true, subtree: false});
}

const rx_sponsored = />(?:スポンサー|Sponsored)<\/span>/;

function tryHideElement(elem) {
	if(elem != null 
	&& elem.tagName === 'DIV'
	&& elem.dataset.asin !== '') {

		if(rx_sponsored.test(elem.innerHTML)) {
			hideElement(elem);
		}
		// (参考) 以前は div[data-component-type="sp-sponsored-result"] の存在確認で
		// スポンサー商品を判別していたが、これを持たないスポンサー商品があったので修正した。
	}
}

main();

})();

インストール方法

1. ファイルの保存
上のふたつのコードをコピーして自分のローカル端末に保存する。
ファイル名は manifest.json, content_script.js にして、ファイルのエンコードはUTF-8で保存する(BOM付き、なし、どちらも可)。エンコードは、だいたいのどのエディタも「名前を付けて保存」で指定できる。
ふたつのファイルは同じフォルダに格納する。フォルダ名は任意でOK。

2. ブラウザにインストールする
Chromeなら
(1) 画面右上の隅のジグソーパズルのピースをクリックして「拡張機能の管理」を開く。
  (または、右上の隅の [ ⁝ ]を押し「その他のツール」→「拡張機能」を開く)
(2) 拡張機能の設定画面が開かれたら、右上の「デベロッパーモード」をオンにする。
(3)「パッケージ化されていない拡張機能を読み込む」をクリックする。
(4) スクリプトが格納されたフォルダーを選択する。

Microsoft Edgeなら
(1) 画面右上の隅の[・・・]を押し「拡張機能」を開く。
(2) 拡張機能の設定画面が開かれたら、左下の「開発者モード」をオンにする。
(3)「展開して読み込み」をクリックする。
(4) スクリプトが格納されたフォルダーを選択する。

Firefoxなら
以下の手順で一時的にインストールできる。
パッケージ化していないので永続的なインストールは不可。

(1) 画面右上の隅の[≡]を押し「アドオンとテーマ」を開く。
(2) アドオンマネージャ―が開かれたら、歯車ボタンを押し「アドオンをデバッグ」をクリックする。
(3)「一時的なアドオンを読み込む...」をクリックする。
(4) ファイルダイアログで manifest.json を選択する。
※「Unsupported manifest version: 3」のエラーが出るなら、上の manifest.json の "manifest_version" を 2 に書き換える。

この拡張機能はスポンサー商品を非表示にするだけだが、コミックの単話や分冊、BLなど興味のないものを非表示にしたかったので、いろいろとリッチな機能を持つものを作成した。後日紹介する。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?