tampermonkey 脚本不断刷新页面有问题

问题描述 投票:0回答:1

我的公司有一个状态屏幕,我们可以通过 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.

html greasemonkey tampermonkey
1个回答
0
投票

我无法从代码中找出为什么你的脚本重新运行。据我所知,代码应该运行一次并停止。

也许页面会自动刷新?如果是这样,您可以存储上次运行脚本的时间,并且直到 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);
   }

通常,当您单击页面上的按钮时,页面会发生变化,新元素会变得可见或添加到页面中。您可以通过上面的方法测试它们是否存在。

您还可以检查某个元素是否存在但不可见:

检查元素在 DOM 中是否可见

© www.soinside.com 2019 - 2024. All rights reserved.