延迟设定间隔功能

时间:2019-06-03 04:23:30

标签: javascript dom

我试图延迟单击第一张图片的时间,因为它在进入屏幕之前就已经熄灭了,也许我需要将它放在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();

    }

2 个答案:

答案 0 :(得分:2)

好吧:也许您应该等待文档加载,似乎可以使用DOMContentLoaded evenListener来完成,然后在onready回调中可以执行click函数:参见下面的示例

在ES6中DO​​M没有改变,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函数中进行了展示)。

答案 1 :(得分:1)

您可以尝试休眠一会儿的while循环,然后检查所需的元素是否已出现在dom中。

添加此睡眠功能。

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

现在将这段代码放在找不到firstPicture的方法的开头。如果找不到该元素,它将使脚本等待十分之一秒,然后再次尝试。找到元素后,您的代码将按预期继续。

while( null == document.querySelector("div._9AhH0") ) {
  sleep( 100 );
}