jquery 只单击第一个按钮,上面有一些“文本”,而不是所有按钮

1zmg4dgp  于 2022-11-03  发布在  jQuery
关注(0)|答案(3)|浏览(204)

我尝试创建一个脚本,该脚本每31秒单击一个按钮。该网站包含许多类为reply-markup-button rp tgico的按钮。为了选择要查找的确切按钮,我使用document.getElementByTagName和for循环查找按钮上的确切文本:
第一个
问题是,也有许多按钮上有“查看广告”,我只希望脚本单击第一个,而不是所有按钮。

sxpgvts3

sxpgvts31#

点按第一个匹配按钮后,添加对break(或return)的调用:

var viewAdsButton = document.getElementsByTagName("button");
var viewAdsButtonText = "View ads";

setInterval(function(){ 
  for (var i = 0; i < viewAdsButton.length; i++) {
    if (viewAdsButton[i].textContent == viewAdsButtonText) {
      viewAdsButton[i].click()
      break // Stop looping
    }
  }
}, 31000);
ktca8awb

ktca8awb2#

我没有使用getElementsByTagName(),而是使用querySelector()获取了您列出的类的第一个按钮。然后,您可以在setInterval()函数中添加一个click事件,而无需循环任何内容。
我还使用了querySelectorAll(),并执行了一个forEach()循环,为每个包含这些类的按钮添加了一个onclick事件侦听器,以显示setInterval()函数只单击了第一个按钮。
第一个

cgvd09ve

cgvd09ve3#

如果有很多按钮,不要尝试使用document.getElementsByTagNamedocument.getElementsByClassName。它们返回一个元素集合,要找到你想要的确切元素要困难得多。还要考虑以下情况:如果两个按钮具有相同的文本,或者网站更新并且按钮文本更改,该怎么办?
以下是一些更好的方法:
首先,查看浏览器开发工具中的按钮,如果它有ID,则使用document.getElementsById,如下所示:

var viewAdsButton = document.getElementsById("some-button-id");

setInterval(function() { 
    viewAdsButton.click();
}, 31000);

如果按钮没有ID,那么你应该通过它的XPath来获取元素。XPath只是一个字符串,它唯一地代表DOM层次结构中的一个元素,但这并不重要。你可以在dev工具中复制元素XPath(Copy -〉Copy XPath)。使用下面的代码来获取XPath:

var viewAdsButton = document.evaluate("some-button-xpath", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

setInterval(function() { 
    viewAdsButton.click();
}, 31000);

(See this answer,了解有关通过XPath获取元素的详细信息)

相关问题