首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当您必须等待第二个按钮出现时,如何重复单击两个按钮?

当您必须等待第二个按钮出现时,如何重复单击两个按钮?
EN

Stack Overflow用户
提问于 2021-03-20 05:06:57
回答 2查看 145关注 0票数 1

我正在编写一个简单的脚本,它循环遍历页面上的所有元素,并在普通的JavaScript中共享它们。这是我到目前为止所拥有的

代码语言:javascript
复制
var buttons = document.getElementsByClassName('share-gray-large');
for(var i=0; i<buttons.length; i++){
    buttons[i].click();
    document.getElementsByClassName('internal-share__link')[0].click();
}

share-gray-large按钮是“共享”按钮的类。一旦单击了第一个共享按钮,就会出现一个模式,询问用户想要在哪里共享项目。我需要用类名internal-share__link单击模态中的第一项。我遇到的问题是,代码的最后一行会导致以下错误

代码语言:javascript
复制
Uncaught TypeError: Cannot read property 'click' of undefined

这是有意义的,因为在调用第二个click()函数时,这个模式还没有出现。我需要等待元素出现,然后单击它,然后等待模式消失以共享下一个项目。我研究了异步/等待函数、setTimeout()以及类似StackOverflow问题的解决方案。我调整了这个次级解决方案

代码语言:javascript
复制
var waitForEl = function(className, callback) {
    if (document.getElementsByClassName(className).length) {
        callback();
    } else {
        setTimeout(function() {
            waitForEl(className, callback);
        }, 100);
    }
};

var buttons = document.getElementsByClassName('share-gray-large');
for(var i=0; i< buttons.length; i++){
    waitForEl('share-gray-large', function() {
        document.getElementsByClassName('share-gray-large')[i].click();
    });
    waitForEl('internal-share__link', function() {
        document.getElementsByClassName('internal-share__link')[0].click();
    });
}

哪种作品,但我相信它最终会多次分享最后一项,而不是按顺序分享。我遇到了一个问题,需要等待一个按钮出现,以及一个不同的项目,所以任何帮助都会非常感谢!

TL;我博士正在按以下步骤处理项目。使用包含需要共享的3个项的页面:

在第二个button

  • Repeat步骤2-4

H 120单击第三个button

  • Repeat步骤2-4H 223H 223G 224,在第二个button

  • Repeat步骤2-4<代码>H 223<代码>G 224上,
  1. 在第一个按钮
  2. 上单击
  3. 等待确认按钮出现。

如何在VanillaJS中做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-22 03:40:01

这就是对我有用的答案。大多数解决方案都归功于@uingtea。由于我没有张贴到网站的链接,我能够测试它和修改他们的解决方案,以适应我的需要。

代码语言:javascript
复制
function waitForElement(selector) {
    var element = document.querySelector(selector);
    if (element) {
        shareLinkCount--;
        element.click();

        if (shareLinkCount) { // not 0
            setTimeout(clickShareButton, 500);
        }
        else{
            element.click();
            alert('Click Finished');
        }
    } else {
        setTimeout(waitForElement, 500, selector);
    }
}

function clickShareButton() {
    document.querySelectorAll('.share-gray-large')[shareLinkCount].click();
    waitForElement('.internal-share__link');
}

var shareLinkCount = document.querySelectorAll('.share-gray-large').length - 1;


clickShareButton();
票数 0
EN

Stack Overflow用户

发布于 2021-03-20 10:50:38

这将单击从最后到第一个共享按钮,电子邮件共享,并确保浏览器被允许点击/打开多个弹出窗口。

代码语言:javascript
复制
function waitForElement(selector) {
    var element = document.querySelectorAll(selector);
    if (element.length) {
        if (shareLinkCount == 999) { // set to real number of elements
            shareLinkCount = element.length;
        }
        shareLinkCount--;
        var shareElement = element[shareLinkCount];
        if(shareElement.textContent != "Email") // Do not click email share 
            element[shareLinkCount].click();

        if (shareLinkCount) { // not 0
            setTimeout(clickShareButton, 500);
        }
        else{
            alert('Click Finished');
            document.body.click();
        }
    } else {
        setTimeout(waitForElement, 500, selector);
    }
}

function clickShareButton() {
    var button = document.querySelector('.share-gray-large');
    button.click();
    waitForElement('internal-share__link');
}

var shareLinkCount = 999; // dummy number

clickShareButton();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66718421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档