javascript - 延迟 Setinterval 函数
问题描述
我试图延迟单击第一张图片的时间,因为它在进入屏幕之前就已启动,也许我需要将其放入 if else 语句中?
// Instagram hacks
// Search field
// let Searchtest= prompt("Please enter the hashtag you want to like","Trending");
// var search = document.querySelector('.x3qfX').value = "#" + Searchtest;
document.querySelector(".glyphsSpriteSafari__outline__24__grey_9").click();
let firstPicture = document.querySelector("div._9AhH0");
firstPicture.click();
let likesGiven = 0;
setInterval(() => {
let heart = document.getElementsByClassName(
"glyphsSpriteHeart__outline__24__grey_9"
),
arrow = document.querySelector(".coreSpriteRightPaginationArrow");
if (heart[1]) {
heart = heart[1].parentElement;
likesGiven++, heart.click();
}
arrow.click();
console.log(`You've liked ${likesGiven} post(s)!`);
}, 2000);
// Button Liker
My Last Attempt Run this in your console from instagrams homepage and you u will see what
我的意思是
document.querySelector(".glyphsSpriteSafari__outline__24__grey_9").click();
let firstPicture = document.querySelector("div._9AhH0");
if (firstPicture){
firstPicture.click();
}
解决方案
好的,就是这样:也许你应该等待文档被加载,似乎你可以用 DOMContentLoaded evenListener 来做,然后在 onready 回调中你可以执行你的点击函数:见下面的例子
DOM 在 ES6 中没有改变,ES6 为 JavaScript 提供了新的特性,仅此而已。在纯 js 中存在加载 dom 的事件,它是从 jquery 等效的文档准备好的
document.addEventListener("DOMContentLoaded",function(){ //do something here });
使用 DOM 树的模块可以在内部有监听器,或者应该在 dom 准备好之后使用。我创建了示例 DOM 函数来说明我的意思:
var DOM=function(selector){
document.addEventListener("DOMContentLoaded",()=>{
this.element=document.querySelector(selector);
if (typeof this.callback === 'function')
this.callback();
});
};
//HERE WE HAVE CALLBACK WHEN OUR MODULE CAN BE USED
DOM.prototype.onReady=function(callback){
this.callback=callback;
};
DOM.prototype.getElement=function(){
//example object method
return this.element;
};
DOM.prototype.click=function(){
return this.element.click
};
使用示例:
document.querySelector(".glyphsSpriteSafari__outline__24__grey_9").click();
var d=new DOM("div._9AhH0");
firstPicture.onReady(()=>{
firstPicture.click();
});
//your other code
模块应该是 DOM 独立的,创建直接导出 DOM 元素的模块是非常错误的做法。所以可以通过两种方式完成:
模块应该在属性中获取选择器 DOM 对象,并且应该在 DOM 准备好后调用。所以你的模块不知道在哪里被调用,但它需要准备好 DOM 结构。在这种情况下,DOM 就绪回调仅在使用模块并调用它们的主文件中。
模块可以有一些 DOM 就绪的侦听器,但是当模块可以使用时,我们需要一些信息(我在示例和 onReady 函数中展示了这种情况)。
推荐阅读
- neo4j - Neo4j 有问题
- python - 如何将我的函数的输入和输出从控制台传输到我的 GUI 应用程序?
- grep - 当我使用 egrep 时,使用 \w 在正则表达式匹配中无法正常工作
- swift - 符合类的协议抛出“不能符合”类错误
- python - 如何在模式中安装模式库?
- flutter - Flutter:小部件不会在 Tap 上动态更改
- javascript - TestCafe 中的选择器出错 - 方法 .find()
- android - 如何在 Unity 2018 中构建 Android API Level 29
- javascript - 为什么 .includes() 找不到子数组?(javascript)
- android - 如何从 ForegroundService 中将应用程序带到前台