我的公司有一个状态屏幕,我们可以通过 PLEX 访问该屏幕,以直观地了解整个工厂车间的机器状态。我们在整个楼层的多个显示器上显示此状态屏幕。目标是自动化重新启动机器、拉起 chrome、plex、登录加载状态屏幕的整个过程。到目前为止,我已完成了调出状态屏幕的所有操作,但我现在遇到了问题。由于状态屏幕被选择并在显示的同一页面上加载,因此我的脚本在加载屏幕后继续运行,并导致页面不断重新加载。是否有办法阻止脚本运行,或者在运行后延迟以防止其重新加载页面?
// ==UserScript==
// @name status trigger
// @namespace http://tampermonkey.net/
// @version 2023-12-06
// @description Trigger Status Load
// @author You
// @match */PlantFloorVisual.aspx
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// ==/UserScript==
function kioskGreen() {
var button = document.getElementById("fltShop_Screen_Key_Link");
button.click();
//click for dropdown.
}
function kioskBlue() {
var button = document.getElementById("tr_3");
button.click();
// Selection for status screen.
}
kioskGreen();
setTimeout(kioskBlue,1000);
//delay for screen selection.
我无法从代码中找出为什么你的脚本重新运行。据我所知,代码应该运行一次并停止。
也许页面会自动刷新?如果是这样,您可以存储上次运行脚本的时间,并且直到 x 小时过去后才重新运行脚本:
注意:所有代码均未经测试 - 将其视为伪代码
//Create alias for "document.querySelector" so you can just type $
const $ = document.querySelector.bind(document);
const dtLastRunLS = localStorage.getItem('lastrun') || '0';
const dtcode = new Date().getTime();
//Only run the code if > 8 hours since last run
if (dtcode - dtLastRunLS > (60*60*8) ){
$("#fltShop_Screen_Key_Link").click();
setTimeout( () => {
$("#tr_3").click();
},1000);
}
您可以选择测试某个元素是否存在,如果存在,则不执行任何操作:
if ( document.getElementById("tr_3") ){
//stops here
} else {
document.getElementById("fltShop_Screen_Key_Link").click();
setTimeout( () => {
document.getElementById("tr_3").click();
},1000);
}
通常,当您单击页面上的按钮时,页面会发生变化,新元素会变得可见或添加到页面中。您可以通过上面的方法测试它们是否存在。
您还可以检查某个元素是否存在但不可见: