Amazon Prime Video - Auto Skip Advertisement Trailer

Amazon Prime Video - Auto Skip Advertisement Trailer.

// ==UserScript==
// @name         Amazon Prime Video - Auto Skip Advertisement Trailer
// @description  Amazon Prime Video - Auto Skip Advertisement Trailer.
// @version      0.1
// @author       to
// @namespace    https://github.com/to
// @license      MIT
// 
// @noframes
// @include      https://www.amazon.*/gp/video/*
// @include      https://www.amazon.*/Amazon-Video/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=amazon.co.jp
// ==/UserScript==

let currentTitle;
new MutationObserver(debounce(() => {
	// スキップボタンを取得する
	const skip = $x('//div[contains(@class, "atvwebplayersdk-infobar-container")]//div[contains(text(), "スキップ")]');
	if (!skip)
		return;

	const title =
		document.querySelector('.atvwebplayersdk-title-text').textContent +
		document.querySelector('.atvwebplayersdk-subtitle-text').textContent;

	// 現在のタイトルでスキップ処理を まだ行っていないか?
	// (短時間に連続してスキップ部分をクリックし 次のエピソードへ遷移してしまうの防ぐ)
	if (currentTitle != title) {
		skip.click();
		currentTitle = title;

		// エピソード連続視聴時を想定し 現在のタイトルを初期化する
		setTimeout(() => {
			currentTitle = null;
		}, 3000);
	}
})).observe(document.body, {
	childList: true,
	subtree: true,
});

function debounce(fn, interval = 500) {
	var timer;
	return function () {
		clearTimeout(timer);
		timer = setTimeout(() => {
			fn();
		}, interval);
	}
}

function $x(path, target) {
	return document.evaluate(
		path, target || document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}