在某网站观看视频时,每隔一段时间会弹出一个问题,回答后才能继续观看,希望可以使用GreaseMonkey自动回答弹出的问题。
弹窗使用jQuery1.4.4的dialog弹出,弹出后可以使用下面的代码选择正确的答案。
document.querySelector('[qs=True]').click()
document.querySelector('#but_Question').click()
尝试使用
// ==UserScript==
// @name test_auto_close_dialog
// @namespace
// @include http://zjxy.ghlearning.com/Study/Learning/MediaLi?sscId=8f658a796db74a3ea9dde99e5a571534&medId=e4975f7a1a4e42768902bf35af23868c
// @version 1
// @grant none
// ==/UserScript==
$('.ui_main').bind('dialogopen',function(event){
document.querySelector('[qs=True]').click();
document.querySelector('#but_Question').click();
})
绑定弹出事件,但是没有取得预期的效果。请问是否有办法写一个脚本,以自动回答问题?
其中关于播放器的代码如下:
var LiPlayerPlayState = {};
LiPlayerPlayState.Stopped = 1;
LiPlayerPlayState.Paused = 2;
LiPlayerPlayState.Playing = 3;
LiPlayerPlayState.Ended = 8;
LiPlayerPlayState.Ready = 10;
LiPlayerPlayState.Reconnecting = 11;
var playerVideo = null;
var LiPlayer = function (containerId, _config) {
//针对800里流媒体播放学习
this.containerId = containerId;
this.config = {
onLoad: function () { },
onStoped: function () { },
onPaused: function () { },
onPlay: function () { },
onBuffering: function () { },
onBuffered: function () { },
onPositionChange: function (o, n) { },
onEnded: function () { },
onLoadError: function (message) { },
onLoadOverPlay: function () { },
width: "100%",
height: "100%",
resPath: "",
playerURL: "",
playSite: "",
playQuery: ""
};
$.extend(this.config, _config);
if (this.config.width != "100%") {
this.config.width += "px";
}
if (this.config.height != "100%") {
this.config.height += "px";
}
p2psr_embed("auto", "vod", this.config.playSite, this.config.playQuery, "p2ps_video", this.config.width, this.config.height, "10.1.0",
this.config.resPath + '/Files/expressInstall.swf', { auto_play: 1, no_light: 1, no_side_bar: 1, no_hide_skin: 1 }, { allowFullScreen: true, allowScriptAccess: "always", wmode: "transparent" }, {}, swfPlayerInit);
}
LiPlayer.prototype = {
load: function (url) {
},
play: function () {
playerVideo.resume();
},
pause: function () {
playerVideo.pause();
},
isPlaying: function () {
//getState(): 获取当前播放器的状态,"not_ready", "not_open", "playing", "pause", "end"
var state = playerVideo.getState();
if (state == "playing") {
return true;
}
else {
return false;
}
},
currentPosition: function () {
//获取当前播放时间, 单位秒
var vTime = playerVideo.getTime();
return Math.floor(vTime);
},
setSeek: function (position) {
//定位视频, t 为小数,单位为秒。
playerVideo.seek(position);
},
duration: function () {
//获取当前视频的长度,单位秒
playerVideo.getDuration();
},
getCurrentTime: function () {
return playerVideo.getTime();
},
getState: function () {
//getState(): 获取当前播放器的状态,"not_ready", "not_open", "playing", "pause", "end"
try {
var state = playerVideo.getState();
switch (state) {
case "not_ready":
return LiPlayerPlayState.Reconnecting;
break;
case "not_open":
return LiPlayerPlayState.Reconnecting;
break;
case "playing":
return LiPlayerPlayState.Playing;
break;
case "pause":
return LiPlayerPlayState.Paused;
break;
case "end":
return LiPlayerPlayState.Ended;
break;
}
} catch (e) {
return -1;
}
},
close: function () {
playerVideo.close();
}
};
var timeState = null;
var timeStateIsPaused = false;
var timeStateIsRePlaying = false;
//启动定时器,监控播放状态
function startTimerState() {
if (timeState == null) {
timeState = setInterval(timerStateCallback, 500);
}
}
//转换播放状态码
function getStateCode() {
try {
var state = this.playerVideo.getState();
switch (state) {
case "not_ready":
return LiPlayerPlayState.Reconnecting;
break;
case "not_open":
return LiPlayerPlayState.Reconnecting;
break;
case "playing":
return LiPlayerPlayState.Playing;
break;
case "pause":
return LiPlayerPlayState.Paused;
break;
case "end":
return LiPlayerPlayState.Ended;
break;
}
} catch (e) {
return -1;
}
}
function timerStateCallback() {
var state = getStateCode();
switch (state) {
case 2:
//播放状态暂停时,停止计时
if (!timeStateIsPaused) {
this.player.config.onPaused();
timeStateIsPaused = true;
//设置允许开始继续播放
timeStateIsRePlaying = true;
}
break;
case 3:
//在暂停后重新允许重新开始播放时,回调计时提交
if (timeStateIsRePlaying) {
timeStateIsRePlaying = false;
this.player.config.onRePlay();
}
//播放状态时,启动计时
this.player.config.onPlay();
timeStateIsPaused = false;
break;
}
}
/**
* 播放器初始化回调函数,只调用一次
* @param obj{object} 回调对象{Object {success: boolean, id: string, ref: object#p2ps_video}
* @param swfPlayer{object} swfPlayer对象
*/
function swfPlayerInit(playerObj) {
//this.playerVideo = playerObj.ref;
this.playerVideo = document.getElementById(playerObj.id);
//设置监听事件
this.playerVideo.setEventListener("playerEventListener");
this.player.config.onLoadOverPlay();
startTimerState();
}
/**
* 监听播放状态
* @param event {object} 事件对象
*/
function playerEventListener(event) {
//判断触发事件的状态,1、play(播放) 2、pause(暂停) 3、seek(跳转) 4、end(结束) 5、close(关闭流)
var playState;
if (event.type === "eventPlayResume" || event.type === "eventPlayStart") {
playState = "play";
}
else if (event.type === "eventPlaySeek") {
//如果是跳跃播放
playState = "seek";
}
else if (event.type === "eventPlayPause") {
//如果是暂停状态
playState = "pause";
}
else if (event.type === "eventStreamEnd") {
//如果是播放完成状态
playState = "end";
}
else if (event.type === "eventPlayClose") {
//如果是关闭流
playState = "close";
}
if (window.console)
window.console.log("event.type:" + event.type);
//执行播放绑定事件
toggleEvent(playState, window.player.config);
}
function toggleEvent(state, config) {
switch (state) {
case "seek":
config.onPositionChange();
break;
case "end":
config.onEnded();
break;
}
}
自己解决了
只需要定时完成一系列操作就行