Как найти и записать текст в текстовую область с помощью python и javascript?

#javascript #python #selenium #textarea

#javascript #питон #селен #текстовое поле

Вопрос:

Hei,

Я пытаюсь написать что-то внутри элемента textarea с помощью python selenium и javascript: js — это: self.driver.execute_script("document.getElementsByClassName('textarea').value='tesssst';")

Но он не получает текст там, и я пробовал использовать другие элементы get с помощью (..).

Это работает, если я использую self.driver.find_element_by_css_selector("textarea").send_keys(code)

или с помощью xpath. Но проблема с этим методом заключается в том, что переменная ‘code’ довольно большая, а javascript работает быстрее. Кроме того, если я использую

send_keys(keys.control c/v)

это дает мне дополнительную точку в начале текста, и я понятия не имею, почему это вообще произошло. Какие-нибудь предложения?

Редактор Ace

значение

HTML — код

Больше Html

Ответ №1:

self.driver.execute_script( "$('pre#editor').text("jsdasdsjj");")

Или

self.driver.execute_script( "arguments[0].text('tesssst');",self.driver.find_element_by_css_selector("pre#editor"))

введите описание изображения здесь

используйте textContent для установки значения

Комментарии:

1. Это никоим образом не работает, и ‘text(‘tesssst’);» я думаю, что это вообще не тот формат. Возможно, text=’tesssst’;, но в любом случае, это не работает.

2. testarea — это не имя класса, а имя тега

3. Это все еще не работает. Я могу написать, если использую send_keys, используя xpath(‘/html/body / form /div[4] / div / pre/textarea’) или css_selector(«textarea») , но я все еще не могу найти его с помощью jscript. Wtf продолжается?!

4. Вы пробовали первый ответ $(‘textarea’).textContent =»что-то»

5. Я попробовал это в том формате, в котором вы это написали. Не уверен, должен ли я добавить что-то раньше $

Ответ №2:

getElementsByClassName возвращает массив, поэтому я думаю, вам нужно получить первый элемент этого массива. Попробуйте использовать следующий код:

 driver.execute_script('document.getElementsByClassName("className")[0].value="yourValue"')
 

Комментарии:

1. Это не сработает, даже если я изменю значение на text или textContent.

2. Какой класс элемента вы пытаетесь ввести? Вам нужно заменить className на это

3. Я обновил изображения в главном сообщении. Итак, редактор ace — это то, что отображает мою текстовую область. Значение содержит в атрибуте value текст, который я хочу отредактировать. Внутри Chrome, используя инструменты разработчика, мне не разрешено вручную изменять значение, потому что оно говорит, что оно слишком большое.

4. Я видел изображения, замените «className» на «ace_text-input», это должно сработать

5. Я попробовал, и это не сработало. Таким образом, я не могу получить его не через send_keys (а send_keys работает с xpath или css-селектором)

Ответ №3:

Я опробовал варианты, представленные в ответе PDHide, и, наконец, для меня сработало следующее:

 self.driver.execute_script( "arguments[0].value  = 'tesssst';",self.driver.find_element_by_css_selector("pre#editor"))
 

Для справки, я использую selenium версии 3.1.4, версию chrome: 91.0.4472.114 и ChromeDriver 91.0.4472.19