1

i am working on xpath script, i want to work it like that it will keep loking for xpath every 1 second and when element/xpath is found it will click the element and then wait for 5 second then again start 1 second to keep looking,


<script>
/**
 * Specify the element XPath
 */
var xpath = "/html/body/div[1]/a[5]";

/**
 * The following lines do not need to be changed
 */
function getElementByXpath(path) {
  return document.evaluate(
    path,
    document,
    null,
    XPathResult.FIRST_ORDERED_NODE_TYPE,
    null
  ).singleNodeValue;
}

/**
 * Find an element with the XPath
 */
var element = getElementByXpath(xpath);

/**
 * Exit if the element does not exist
 */
if (!element) {
  throw new Error("Error: cannot find an element with XPath(" + xpath + ")");
}

/**
 * Click the element
 */
element.click();

</script>

i have tried setinterval 1000; but it is keep clicking the element every one second it should wait for 5 second before next, when click is done.

1 Answer 1

1

It's best to do this with setTimeout rather than setInterval, otherwise you'll need to deal with stopping timers.


var RETRY_DELAY   = 1000;
var COOLOFF_DELAY = 5000;
var timerId;

function pollElement() {
  /**
   * Find an element with the XPath
   */
  var element = getElementByXpath(xpath);

  /**
   * If the element doesn't exist, wait RETRY_DELAY then retry 
   */
  if (!element) {
    console.log("Element not found with XPath: " + xpath);
    setTimeout(pollElement, RETRY_DELAY);
  }

  /**
   * Click the element
   */
  element.click();

  /**
   * Wait for COOLOFF_DELAY before checking again
   */
  timerId = setTimeout(pollElement, COOLOFF_DELAY);
}

function cancelPolling() {
  if (timerId)
    clearTimeout(timerId);
}

// Start polling
pollElement();

// Stop polling
cancelPolling();

EDITED to address additional request made in comment

Sign up to request clarification or add additional context in comments.

2 Comments

it works great, can you add a function to clearTimeout() with click like just onclick="myclearfunction"
Yes @HabibRehman, that is now amended to address your additional requirements

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.