油猴脚本实用技巧
大约 1 分钟
addEventListener 拦截
// ==UserScript==
// @run-at document-start
// ==/UserScript==
(function(){
let oldadd=EventTarget.prototype.addEventListener
EventTarget.prototype.addEventListener=function (...args){
console.log('addEventListener',...args)
// 劫持指定的监听类型
if(args.length !== 0 && args[0] === 'visibilitychange'){
console.log('劫持visibilitychange成功')
return;
}
oldadd.call(this,...args)
}
})()视频自动播放
see:慕课网自动播放下一节 1132149908 - 掘金 (juejin.cn)
// ==UserScript==
// @name 慕课网下一节自动跳转
// @namespace http://tampermonkey.net/
// @version 1.0
// @description 慕课网 下一节视频自动点击播放
// @author Zendu
// @match https://coding.imooc.com/*
// @icon https://coding.imooc.com/favicon.ico
// @grant none
// ==/UserScript==
(function () {
'use strict';
let timer ;
console.log(`MUKE Script is running !`);
let video = document.querySelector("video");
if (!video) {
console.log(`Video is not exist !`);
timer = setInterval(() => {
console.log(`Query Video !`);
video = document.querySelector("video");
if(video){
console.log("Video is exist !");
clearInterval(timer);
listenVideoPlaying();
}
}, 100);
return;
}
function listenVideoPlaying() {
video.addEventListener("pause", e => {
console.log(`Now Voide is Paused!`);
let duration = video.duration;
let currentTime = video.currentTime; // video 当前播放进度
if (currentTime === duration) {
let nextBtn = document.querySelector(".next-btn.js-next-media");
if (nextBtn) {
nextBtn.click();
console.log(`Click Next Button !`);
} else {
console.log(`Next Button is not exist !`);
}
}
})
}
})();DOM 检测
【油猴开发指南】脚本执行的时机?为什么只在控制台有效-油猴中文网 (tampermonkey.net.cn)
function checkObj(selector, fn, refresh) {
let t = setInterval(function () {
//设定循环定时器,1000毫秒=1秒,1秒钟检查一次目标对象是否出现
let obj = document.querySelector(selector); //声明要查询的对象
if (obj) {
//判断对象是否存在,存在则开始设置值
fn(obj);
clearInterval(t); //清除循环定时器
}
}, refresh);
}
//执行函数
checkObj("#residecity", function (obj) {
//传入选择器的参数,要目标对象出现时,要执行的操作函数,obj 为选择器的操作对象
obj.value = "朝阳区"; //对这个对象设置有效的值
obj.onchange(); //触发 change 事件
});