Невозможно программно нажимать на элементы в сети WhatsApp - PullRequest
0 голосов
/ 03 ноября 2018

Почему невозможно щелкнуть по любому элементу в сети WhatsApp (https://web.whatsapp.com) с использованием метода JavaScript .click()? Шаги, которые я предпринимаю, перечислены ниже:

  1. Предполагая, что проверка QR-кода завершена, посетите https://web.whatsapp.com
  2. Найдите строку поиска с надписью Поиск или начните новый чат , который является элементом ввода, и включите на нем .click().

Я могу найти поле ввода поиска, потому что оно имеет уникальное название значение Поиск или запуск нового чата , но когда я пытаюсь щелкнуть его в консоли Chrome DevTools, ничего случается.

Сначала я подумал, что могу выстрелить, щелкнув не по тому элементу. Чтобы быть уверенным, я установил расширение автоматизации Katalon Recorder на Chrome. Затем я записал сделанные шаги (перейдите на сайт WhatsApp, нажмите на поле поиска). Играя в рутине в Каталоне, щелкает окно поиска, как и ожидалось. Я скопировал выражение Xpath, записанное Каталоном, и вставил все это в document.evaluate(). Оказывается, это был тот же элемент ввода, захваченный querySelectorAll.

В браузере-консоли я запускаю этот код:

let xPath = "(.//*[normalize-space(text()) and normalize-space(.)='Search or start new chat'])[1]/following::input[1]";
let result = document.evaluate(xPath, document);
let searchBox = result.iterateNext();
searchBox.click();

Итак, у вас есть идея, почему .click() не работает в WhatsApp Web? Я также хотел бы знать, что Katalon делает по-другому - позволяет ему нажимать на нужный элемент. Могу ли я сделать это в безголовом браузере?

1 Ответ

0 голосов
/ 03 ноября 2018

Таким образом, решение заключается в запуске события через js и new Event() Чтобы это работало, вам нужно вызвать событие фокуса, а затем событие щелчка.

let xPath = "(.//*[normalize-space(text()) and normalize-space(.)='Buscar o empezar un chat nuevo'])[1]/following::input[1]";
let result = document.evaluate(xPath, document);
let searchBox = result.iterateNext();

var eventFocus = new Event('focus');
var eventClick = new Event('click');
searchBox.dispatchEvent(eventFocus);
searchBox.dispatchEvent(eventClick);

Также мне пришлось поменять Search or start new chat на испанский, мой язык по умолчанию Buscar o empezar un chat nuevo. Так что вы можете подумать, чтобы улучшить свой код. Надеюсь, это поможет:)

...