我正在编写一个简单的脚本,它循环遍历页面上的所有元素,并在普通的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单击模态中的第一项。我遇到的问题是,代码的最后一行会导致以下错误
Uncaught TypeError: Cannot read property 'click' of undefined这是有意义的,因为在调用第二个click()函数时,这个模式还没有出现。我需要等待元素出现,然后单击它,然后等待模式消失以共享下一个项目。我研究了异步/等待函数、setTimeout()以及类似StackOverflow问题的解决方案。我调整了这个次级解决方案
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
H 120单击第三个button
如何在VanillaJS中做到这一点?
发布于 2021-03-22 03:40:01
这就是对我有用的答案。大多数解决方案都归功于@uingtea。由于我没有张贴到网站的链接,我能够测试它和修改他们的解决方案,以适应我的需要。
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();发布于 2021-03-20 10:50:38
这将单击从最后到第一个共享按钮,电子邮件共享,并确保浏览器被允许点击/打开多个弹出窗口。
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();https://stackoverflow.com/questions/66718421
复制相似问题