所以我有一个setInterval选择一个输入,然后用click()提交表单。现在我的问题是我的功能点击按钮太多次了。我尝试添加一个布尔值来检查它是否已被点击。没有骰子,页面不会加载。由于某些奇怪的原因,提交按钮有时无法正常工作。我需要间隔为100 - 1000只是因为页面超时或滞后。如何在页面尝试加载时检查以确保它不会再次单击?如果间隔大于1000,代码可以正常工作,但我需要速度。
var pickSize = setInterval(function(){
if(window.location.href.indexOf("/website/") == -1 && window.location.href.indexOf("/page.php") == -1) {
if($('input[value="236"]').attr("checked", true)) {
$('.Add').click();
}
}
}, 1000);
答案 0 :(得分:0)
试试这个:
var body = document.getElementsByTagName('BODY')[0];
// CONDITION DOES NOT WORK
if ((body && body.readyState == 'loading')) {
DoStuffFunction();
} else {
// CODE BELOW WORKS
if (window.addEventListener) {
window.addEventListener('load', DoStuffFunction, false);
} else {
window.attachEvent('onload',DoStuffFunction);
}
}
答案 1 :(得分:0)
已经有好几年了,代码已经不复存在了,但是在重新讨论了这个问题之后,我觉得我可以为那些遇到了元素不存在的问题的人提供一些见识。
此问题的解决方案是等待元素通过当时的ajax调用动态完成加载。加载元素后,您现在可以单击该元素。
实际上,这是我个人在创建自动化测试时面临的问题,您会在很多硒代码中看到。虽然,我上面的代码不是硒,在当时只是一个普通的脚本。考虑将来使用硒或puppeteer之类的库进行任何将来的自动化测试。
答案 2 :(得分:-1)
您可以使用onbeforeunload
事件检查页面是否已开始导航到其他页面:
var interval = setInterval(function(){
if(window.location.href.indexOf("/website/") == -1 && window.location.href.indexOf("/page.php") == -1) {
if($('input[value="236"]').attr("checked", true)) {
$('.Add').click();
}
}
}, 1000);
window.addEventListener('beforeunload', function() {
clearInterval(interval);
console.log('Started to navigate away...');
});
然而,看起来你需要解决原因,但不是后果。将您的HTML和JS发布到另一个问题中,例如"为什么我的表单有时只提交?"让我们试着理解其中的原因。它肯定会出于某种原因发生:)