Javascript 在执行下一行代码之前,请等待几秒钟?

Javascript 在执行下一行代码之前,请等待几秒钟?,javascript,Javascript,此代码的目的是检索搜索结果的URL。我正在使用的网站不会加载所有结果,除非您滚动整个页面。但是,在滚动之后需要几秒钟才能加载所有结果,因此,下一行将立即执行,它只检索前几个链接,而不是整个页面 我想我所需要的只是暂停几秒钟 本例中的xpath是针对google的,它不延迟加载,我使用的站点位于登录之后,它执行延迟加载 window.scrollTo({ top:document.body.scrollHeight, behavior: 'smooth', }) ///pause here t

此代码的目的是检索搜索结果的URL。我正在使用的网站不会加载所有结果,除非您滚动整个页面。但是,在滚动之后需要几秒钟才能加载所有结果,因此,下一行将立即执行,它只检索前几个链接,而不是整个页面

我想我所需要的只是暂停几秒钟

本例中的xpath是针对google的,它不延迟加载,我使用的站点位于登录之后,它执行延迟加载

window.scrollTo({ top:document.body.scrollHeight, behavior: 'smooth', })

///pause here

try {

  var maxLinks = 25;  
  var returnData = "URL";  
  var xPath = '//*[@class="r"]/a';

  var xpathResults = document.evaluate(xPath, document, null, 0, null);

  var oNode = xpathResults.iterateNext();

  var nodeList = [];
  var linkCount = 0;
  var hrefStr;
  var returnStr;
  var linkText;

  while (oNode && (linkCount < maxLinks)) {

    if (oNode.href !== hrefStr) {
      linkCount += 1;
      hrefStr = oNode.href;
      linkText = oNode.textContent;

      if (returnData === "MD") {
        returnStr = "[" + linkText + "](" + hrefStr + ")";
      }
      else {
        returnStr = hrefStr;
      }

      nodeList.push(returnStr);
    }

    oNode = xpathResults.iterateNext();

  } 

  returnResults = nodeList.join('\n');


} catch (pError) {

    if (!oError.message) {
      oError.message = pError.toString();
    }

    oError.message = "[ERROR]"
      + "\n\nError Number: " + oError.errorNumber + "\n"
      + oError.message

    returnResults = oError.message;  
} 

function copyToClipboard(text) {
    var dummy = document.createElement("textarea");
    document.body.appendChild(dummy);
    dummy.value = text;
    dummy.select();
    document.execCommand("copy");
    document.body.removeChild(dummy);
}
copyToClipboard(returnResults)
copyToClipboard(returnResults)
window.scrollTo({top:document.body.scrollHeight,行为:'smooth',})
///停在这里
试一试{
var-maxLinks=25;
var returnData=“URL”;
var xPath='/*[@class=“r”]/a';
var xpathResults=document.evaluate(xPath,document,null,0,null);
var oNode=xpathResults.iterateNext();
var节点列表=[];
var-linkCount=0;
var-hrefStr;
var-returnStr;
var链接文本;
while(oNode&(linkCount
有一种方法解决方案,允许您在操作之间等待一段时间,正如我在前面的评论中提到的

以下是我的解决方案:

    function sleep (time) { //Sleep function
      return new Promise((resolve) => setTimeout(resolve, time));
    }
    sleep(500).then(() => { //Wait the stated time then do something..
         var maxLinks = 25;  
  var returnData = "URL";  
  var xPath = '//*[@class="r"]/a';

  var xpathResults = document.evaluate(xPath, document, null, 0, null);

  var oNode = xpathResults.iterateNext();

  var nodeList = [];
  var linkCount = 0;
  var hrefStr;
  var returnStr;
  var linkText;

  while (oNode && (linkCount < maxLinks)) {

if (oNode.href !== hrefStr) {
  linkCount += 1;
  hrefStr = oNode.href;
  linkText = oNode.textContent;

  if (returnData === "MD") {
    returnStr = "[" + linkText + "](" + hrefStr + ")";
  }
  else {
    returnStr = hrefStr;
  }

  nodeList.push(returnStr);
}

oNode = xpathResults.iterateNext();

  } 

  returnResults = nodeList.join('\n');


} catch (pError) {

    if (!oError.message) {
      oError.message = pError.toString();
    }

    oError.message = "[ERROR]"
      + "\n\nError Number: " + oError.errorNumber + "\n"
      + oError.message

    returnResults = oError.message;  
} 

function copyToClipboard(text) {
    var dummy = document.createElement("textarea");
    document.body.appendChild(dummy);
    dummy.value = text;
    dummy.select();
    document.execCommand("copy");
    document.body.removeChild(dummy);
}
copyToClipboard(returnResults)
copyToClipboard(returnResults)
});
   }
函数睡眠(时间){//睡眠函数
返回新承诺((resolve)=>setTimeout(resolve,time));
}
睡眠(500)。然后(()=>{//等待指定的时间,然后做某事。。
var-maxLinks=25;
var returnData=“URL”;
var xPath='/*[@class=“r”]/a';
var xpathResults=document.evaluate(xPath,document,null,0,null);
var oNode=xpathResults.iterateNext();
var节点列表=[];
var-linkCount=0;
var-hrefStr;
var-returnStr;
var链接文本;
while(oNode&(linkCount
没有与Java中相同的sleep()。如果您不明白为什么,您需要阅读JavaScript中的线程(或缺少线程)。但是,您可以创建一个异步函数,然后用wait调用它(但您的代码需要在异步函数中:

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


async function doIt() {
    const max = 4;
    let count = 0;
    while (count < max) {
        await sleep(1000);
        console.log('loop: %s', count);
        count++;
    }
}

doIt();
功能睡眠(毫秒){
返回新承诺(resolve=>setTimeout(resolve,millis));
}
异步函数doIt(){
常数max=4;
让计数=0;
同时(计数<最大值){
等待睡眠(1000);
console.log('循环:%s',计数);
计数++;
}
}
doIt();

有一种sleep方法解决方案,允许您在代码中的操作之间等待一段时间。您不应该在任意时间内睡觉,然后希望内容出现,而应该连接到懒惰加载内容的代码。@YotamDahan抱歉,我是Javascript的完全新手。您能帮助我了解一下控制台日志括号中的oes?这是否回答了您的问题?嗯,当我尝试将其输入控制台时,它说缺少括号是参数列表,这是then()吗?