В моей предыдущей статье я описал, как использовать JavaScript в консоли браузера, чтобы выполнять утомительные задачи в Интернете намного быстрее. Конечно, этот подход ограничен. Способ пойти намного дальше и дальше - использовать фреймворк автоматизации, такой как Selenium. В этой статье я покажу, насколько гибко и быстро вы можете запрограммировать сценарий, который поможет вам сэкономить много времени.
➡️ Github Repo доступен здесь ⬅️
📄 Содержание
- "Проблема"
- Как автоматизировать с помощью Selenium webdriver
- Использование его при установке флажков СПАМ на meetup.com
- "Настраивать"
- Заходим в настройки
- Определите элементы и перебирайте их
- Смотрите результат в Youtube
«Первое правило любой технологии, используемой в бизнесе, заключается в том, что автоматизация, применяемая к эффективной работе, увеличит эффективность. Во-вторых, автоматизация, применяемая к неэффективным операциям, увеличивает неэффективность ».
- Билл Гейтс
Проблема
На странице Meetup.com я должен отмечать каждый флажок, чтобы получать уведомления по электронной почте для каждой группы.
Я не трачу время на просмотр всех моих групп. Meetup.com предлагает возможность отключить все уведомления, но я хочу получать обновления от некоторых выбранных групп. Другое дело, что у них есть «Напоминания», которые требуют еще большего нажатия на выпадающее меню. Это раскрывающееся меню не может обрабатываться даже кодом консоли, который я показал в предыдущей статье.
Поэтому я решил написать автоматизированный сценарий, который сделает все это за меня.
Как автоматизировать с помощью Selenium webdriver
Selenium позволяет использовать веб-драйвер для работы в браузере и выполнять действия, которые может делать и человек (например, нажимать на элементы).
Процесс автоматизации прост:
- найти элемент с инспектором в вашем браузере
- получить элемент с
driver.findElement
- выполнять действия с этим элементом с помощью
.then
(обещания в JS) или функций из фреймворка, например.click()
- после выполнения задач обязательно
driver.quit();
завершить работу драйвера
Использование его при установке флажков СПАМ на meetup.com
Настраивать
В этом примере я использую Selenium webdriver.
Настроить в Node.js довольно просто:
var webdriver = require('selenium-webdriver'), By = webdriver.By, until = webdriver.until; var driver = new webdriver.Builder().forBrowser('chrome').build(); driver.manage().window().maximize();
Заходим в настройки
Чтобы попасть в раздел уведомлений, я просто перехожу на страницу входа в систему, отправляю свои учетные данные для входа в систему и щелкаю до настроек.
driver.get('https://secure.meetup.com/login/'); var mail = driver.findElement(webdriver.By.id('email')); var pass = driver.findElement(webdriver.By.id('password')); mail.sendKeys(cred.cred.user); pass.sendKeys(cred.cred.pass); driver.findElement(webdriver.By.name('submitButton')).click(); driver .findElement( webdriver.By.className( 'valign--middle display--none atMedium_display--inline' ) ) .click(); driver.findElement(webdriver.By.xpath('//a[text()="Settings"]')).click(); driver.findElement(webdriver.By.xpath('//a[text()="Email Updates"]')).click();
Определите элементы и перебирайте их
Я определяю все флажки и раскрывающиеся списки и вызываю функцию (clickingAll
) для каждого элемента.
const list = driver.findElements( webdriver.By.xpath('//li[@class="list-item"]/a') ); list.then(function(elements) { var links = elements.map(elem => { return elem.getAttribute('href'); }); promise.all(links).then(linkRefs => { linkRefs.forEach(element => { driver.navigate().to(element); clickingAll(); }); }); });
Функция clickingAll()
на самом деле щелкает элементы и проверяет, не установлены ли флажки (поскольку мы не хотим просто щелкать все элементы, а скорее снимать флажки со всех флажков).
var clickingAll = () => { driver .findElements( webdriver.By.xpath('//i[@class="icon-s icon-checkbox pseudocheckbox "]') ) .then(elements => { elements.map(elem => { elem.getAttribute('aria-checked').then(check => { if (check === 'true') { elem.click(); } }); }); }); driver .findElement(webdriver.By.xpath('//select[@class="j-selectbox"]')) .click(); driver .findElement(webdriver.By.xpath('//option[@value="NO_RECEIVE"]')) .click(); try { driver .findElement(webdriver.By.xpath('//option[@value="OFF]')) .then(null, err => { if (err) { return false; } }) .click(); } catch (e) { return false; } driver.navigate().back(); };
Смотрите результат на Youtube
Если вы что-то узнали из этой статьи, дайте мне знать в комментариях или сердцах. Не забудьте подписаться на больше :)