【求助】如何通过JavaScript代码实现循环点击7个网页元素?

新手上路,请多包涵

各位大神好,我正在尝试使用JavaScript代码,实现以下功能:

  1. 循环点击7个网页元素,
  2. 点击后5秒再进行点击下一个。

操作方法:在edge浏览器中开发模式中的工作台源代码里面。
目前使用JavaScript代码感觉效果不理想(大多数情况运行,偶尔成功运行也不知为何)。
希望各位不吝赐教。

以下是AI(文心一言)帮忙写的代码

// 定义一个函数来模拟点击
function simulateClick(element) {

var event = new MouseEvent('click', {  
    'view': window,  
    'bubbles': true,  
    'cancelable': true  
});  
element.dispatchEvent(event);  

}

// 定义一个函数来执行循环点击
function cycleClickElements() {

// 使用querySelectorAll获取所有目标元素  
var elements = document.querySelectorAll('.slicer-text-wrapper');  

// 定义一个递归函数来处理循环点击  
function clickNextElement(index) {  
    if (index < elements.length) {  
        // 模拟点击当前元素  
        simulateClick(elements[index]);  
        console.log(`Clicked element: ${elements[index].textContent.trim()}`);  

        // 设置下一个点击的延迟  
        setTimeout(() => {  
            clickNextElement(index + 1); // 递归调用,增加索引  
        }, 5000); // 延迟5秒  
    }  
}  

// 从第一个元素开始点击  
clickNextElement(0);  

}

// 调用函数开始循环点击
cycleClickElements();

以下是我通过浏览器选择元素后右击检查再复制的元素

<span class="slicerText" style="font-size: 18.6667px; opacity: 1; color: rgb(255, 255, 255);">制检4班</span>
<span class="slicerText" style="font-size: 18.6667px; opacity: 1; color: rgb(255, 255, 255);">制检5班</span>
<span class="slicerText" style="font-size: 18.6667px; opacity: 1; color: rgb(255, 255, 255);">制检6班</span>
<span class="slicerText" style="font-size: 18.6667px; opacity: 1; color: rgb(255, 255, 255);">制检7班</span>
<span class="slicerText" style="font-size: 18.6667px; opacity: 1; color: rgb(255, 255, 255);">部检4班</span>
<span class="slicerText" style="font-size: 18.6667px; opacity: 1; color: rgb(255, 255, 255);">部检5班</span>
<span class="slicerText" style="font-size: 18.6667px; opacity: 1; color: rgb(255, 255, 255);">制检4班</span>

因为对于JavaScript是初学者,所以经验很少。
代码都是由AI帮忙写代码,当然过程会尝试修正代码。
希望大家指点迷津,看是我的操作方法不对还是代码有问题。
以上,感谢!!!
复制元素的操作:

开发模式运行代码的操作

浏览器元素页面元素(就是希望通过JS自动循环点击这些按钮)

阅读 672
1 个回答

下标越界之后,没有复位,而是终止递归,需要复位:

function clickNextElement(index) {  
    if (index < elements.length) {  
        // 模拟点击当前元素  
        simulateClick(elements[index]);  
        console.log(`Clicked element: ${elements[index].textContent.trim()}`);  

        // 设置下一个点击的延迟  
        setTimeout(() => {  
            clickNextElement(index + 1); // 递归调用,增加索引  
        }, 5000); // 延迟5秒  
    } else {
        simulateClick(elements[index]);  
        setTimeout(() => {  
            clickNextElement(1); // 递归调用,增加索引  
        }, 5000);
    }
}  
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏