私はNetflixアカウントを持っており、GoogleChrome内で実行されているビデオプレーヤーを内部から覗き見ました。 Netflixはそのビデオプレーヤーを「カドミウム」と呼び、JavaScriptは、再生、停止、一時停止、ミュートなど、期待されるすべての関数とイベントハンドラーを公開します。私は少しChromeこれらのカドミウムプレーヤー関数を呼び出すことを可能にする拡張機能ですが、私にとって難しいのは、呼び出しを開始できるようにプレーヤーのインスタンスを作成する方法を理解することです。JavaScriptは大きく、複雑で、ややあいまいです。作成できるようになるとそのプレイヤーのインスタンスでは、関数を呼び出すのは簡単だと思います。
これがjsの関連するチャンクです:
muteOn: function() {
this.savedVolume = this.getVolume(),
this.updateVolumeDisplay(0),
this.scrubber.updatePercent(0),
this.muted = !0,
this.videoPlayer.setMuted(this.muted)
}
Chrome開発ツールでは、そのブロック内にブレークポイントを設定できます。netflixビデオプレーヤーの[ミュート]ボタンをクリックすると、実行がブレークポイントに到達します。Netflixjsは、(当然のことながら)メソッドによって非常に難読化されています。名前の変更:デバッガーでコードをステップ実行しようとしましたが、100個の難読化された穴が見つかりましたが、スタックの一番上に到達する方法が見つからなかったため、同じ呼び出しを(スタックの一番上で)行ってユーザーをシミュレートできましたミュートボタンをクリックします。UIプレーヤーのミュートボタンをプログラムでクリックするアプローチも試しました。これは私のニーズも同様に満たしますが、そこには深刻な防御メカニズムがあり、トップのように回転します。
10万行を超えるJavaScriptがあり、どのチャンクがこの投稿に正確に関連するかわからないため、ChromeにNetflixをロードし、開発ツールを開いて、映画を再生し、一時停止またはミュートを調べることをお勧めします。ボタン。これらのビデオプレーヤーコントロールを操作すると、JavaScriptの迷路にたどり着きます。これを利用して、プログラムでプレーヤーの側面を制御する方法を確認しようとしています(今のところ開発ツールからでも問題ありません)。私が理解する必要があるもう1つの重要なことは、ビデオプレーヤーにクエリを実行して、再生中のビデオの現在の経過時間を決定する方法です。
このナッツを割る方法はありますか? (前もって感謝します!)
Chromeを使用して、HTML5ビデオを使用して再生します。
_<video>
_タグ要素を取得したら、 HTML 5ビデオAPI を使用できます。
<video>
_要素を取得します_var video = document.evaluate('//*[@id="70143639"]/video',document).iterateNext()
_
_70143639
_は、 https://www.netflix.com/watch/70143639 のように、動画のIDです。
_document.evaluate('//*[@id="netflix-player"]/div[4]/section[1]/label', document).iterateNext().innerHTML
_
_video.currentTime
_
_video.addEventListener("timeupdate",
function(e) {
console.debug("Seconds elapsed: ", e.timeStamp/1000/60);
}
);
_
_video.currentTime
_の場合と同じ結果が得られないことに注意してください。違いに基づいて、オフセットを使用する必要がある場合があります。また、仕様で説明されているものかもしれません: https://www.w3.org/TR/html5/embedded-content-0.html
_video.play();
_
_video.pause();
_
礼儀 rebelliard :netflix.cadmium.UiEvents.events.resize[1].scope.events.dragend[1].handler(null, {value: 600, pointerEventData: {playing: false}});
ここで、_600
_はシークする秒数です。
これを使用して、「おっと、何かがうまくいかなかった...」に遭遇したことに注意してください。
_video.currentTime += 60;
_
一時停止して通話を再生しても。これは このデモページ が行うことです。 シークに関する完全な仕様 を読む必要はありません。
_video.muted = true
_
_video.currentTime
_と同様に、これは書き込み可能なプロパティです。