Я пытаюсь добавить каждого участника в новый канал, который я создаю. (Поскольку есть член 7k +, это не то, что я хочу делать вручную каждый раз, когда это происходит.) Есть много старых примеров того, как это сделать, но все они устарели из-за слабости, больше не включающей jQuery вих база данных, а также некоторые изменения классов и идентификаторов. Я очень близок к тому, чтобы заставить код работать, но пропустил один ключевой шаг, поэтому ищу помощь в разрешении.
Я начал с отработки последнего решения, представленного в этом очень старом посте: https://gist.github.com/YitzhakAndrade/1c7c2f7ac98520c9c84d536880f96770
Оригинальный (но очень старый код) код здесь (Примечание. Инструкции должны состоять в том, чтобы перейти к соответствующему слабому каналу в браузере, вставить скрипт в консоль разработчика Chrome / Firefox и нажать клавишу ввода.):
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
var letters = 'abcdefghijklmnopqrstuvwxyz';
async function inviteAllUsers() {
for(var i = 0; i < letters.length; i++){
await sleep(300);
$('#channel_actions_toggle').click();
await sleep(300);
$('#channel_invite_item').click();
await sleep(300);
for(var k = 0; k < letters.length; k++){
var word = letters[i] + letters[k];
await sleep(300);
$("#channel_invite_filter").val(word).trigger("input");
$(".channel_invite_member:not(hidden)").each(function(i, obj) {
foundAny=true;
this.click();
});
}
await sleep(300);
$('.invite_go').click()
}
}
inviteAllUsers();
setInterval(inviteAllUsers,600*1000);
Как уже упоминалось выше, jQuery больше не включается в базу данных slack, поэтому код больше не работает.
Это моя текущая версия переписывания с подробным описанием проблем:
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
var simulateClick = function(elem) {
// Create our event (with options)
var evt = new MouseEvent("click", {
bubbles: true,
cancelable: true,
view: window
});
// If cancelled, don't dispatch our event
var canceled = !elem.dispatchEvent(evt);
};
// var letters = "abcdefghijklmnopqrstuvwxyz";
var letters = "ab";
async function inviteAllUsers() {
for (var i = 0; i < letters.length; i++) {
await sleep(300);
// Opens up the settings menu
simulateClick(document.querySelector(".c-icon--cog-o"));
await sleep(300);
// Selects the "Add People to Channel" selection
simulateClick(
document.querySelectorAll(".c-menu__items .c-menu_item__li button")[1]
);
await sleep(300);
for (var k = 0; k < letters.length; k++) {
var word = letters[i] + letters[k];
console.log(word);
await sleep(300);
// Inputs current word into the search field
simulateClick(document.querySelector(".c-multi-select input"));
document.querySelector(".c-multi-select input").value = word;
// document.querySelector(".c-multi-select input").value = 'a';
document
.querySelector("#channel_invite_modal_select")
.setAttribute("value", word);
// document.querySelector("#channel_invite_modal_select").setAttribute('value', 'a');
// THIS IS WHERE MY ISSUE LIES
// By just adjusting the value in this way, I'm unable to actually have slack retrieve the matching filtered slack names.
// When interacting with slack normally, the filtered list is shown upon typing in a letter.
// With the script, although the letter will populate and the value will change to what's passed in,
// it's as though something just isn't being triggered.
// Once I get it so that the options will populate, I'll want to add the list provided.
// I'm thinking something like below should work:
document
.querySelectorAll(".c-select_options_list__option")
.forEach(function(option) {
simulateClick(option)
});
}
// Then, once all the names are selected, click the "Add" button.
simulateClick(
document.querySelectorAll(
".c-button[data-qa='invite_to_workspace_submit_button']"
)
);
await sleep(300);
}
}
inviteAllUsers();
setInterval(inviteAllUsers, 600 * 1000);
Как видно из кода, встроенного в код, хотя я могу перейти к соответствующему модальному режиму и мне удалось изменить значение ввода в поле поиска, в настоящее время я не могу получить слабое извлечениесоответствующие отфильтрованные слабые имена. Я предполагаю, что мне просто не хватает срабатывания чего-либо, но я не знаю, что.
Буду рад любой помощи в определении того, какой шаг мне не хватает, чтобы получить доступ к списку опций и получить эту работу. .