Как смоделировать событие ввода 'enter' в редактируемом текстовом поле - PullRequest
1 голос
/ 30 апреля 2019

Я пытаюсь получить доступ к текстовому полю, используя селен в Python для выполнения JavaScript.Я успешно набираю сообщение, но мне нужно смоделировать событие ввода, чтобы отправить сообщение.Я абсолютный новичок в HTML и Javascript, но, насколько я понимаю, в текстовом поле нет входного идентификатора, есть только текстовое поле с редактируемым содержимым, которое может вызывать проблемы.

Ранее я пытался использовать селен для доступа к текстовому полю.элемент через его id, xpath и имя класса и используя send_keys.Это не сработало, так как я получил ошибку «элемент недоступен с клавиатуры».Сейчас я пытаюсь выполнить JavaScript прямо в браузере (Firefox).Отправка "Привет, мир!"работает, редактируя внутренний HTML-код раздела p-tag, но я не могу нажать Enter на нем.До сих пор я пытался использовать dispatchEvent со следующим кодом, который не показывает никаких ошибок в консоли браузера, но не вводит сообщение.

driver.execute_script("document.querySelector('#msg_input > div:nth-child(1) > p:nth-child(1)').innerHTML = '" + "hello world!" + "'") #this line works        

driver.execute_script("""
                      const keyEnterEvent = new KeyboardEvent('keyboard', {
                          bubbles: true, cancelable: true, keyCode: 13
                      });
                      document.querySelector('#msg_input > div:nth-child(1) > p:nth-child(1)').dispatchEvent(keyEnterEvent);
""") #this part does not work

Я надеюсь получить этот или аналогичный метод имитацииКлавиша ввода работает, любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 30 апреля 2019

Я только что протестировал элемент 'contenteditable' в документах Mozilla (https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/contenteditable),), и оказалось, что редактировать его можно, щелкнув элемент, введя его, а затем нажав на него (вместо нажатия клавиши Enter в пример).

Если вы не запускаете автоматизацию в безголовом браузере, я бы смоделировал это с помощью макросов в чем-то вроде AppRobotic, посмотрев координаты X, Y элемента:

import win32com.client
x = win32com.client.Dispatch("AppRobotic.API")
from selenium import webdriver

# navigate to Google
driver = webdriver.Firefox()
driver.get('https://www.google.com') 

# use UI Item Explorer tool to find the X,Y coordinates of Search box
x.MoveCursor(438, 435)
# click inside Search box
x.MouseLeftClick

x.Type("hello world!")
x.Type("{TAB}")
x.Type("{ENTER}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...