Как получить текстовое содержимое textarea с помощью webdriver?

Я пытаюсь получить содержимое textarea в HTML-форме с помощью webdriver в Python.

Я получаю текст, но строки не хватает. The селен документы бесполезны; они говорят:

класс Селена.с WebDriver.дистанционный.webelement.WebElement (parent, id_)

[...]

text: возвращает текст элемента.

в настоящее время я делаю следующий:

from selenium import webdriver

# open the browser and web site
b = webdriver.Firefox()
b.get('http://www.example.com')

# get the textarea element
textbox = b.find_element_by_name('textbox')

# print the contents of the textarea
print(repr(textbox.text))

это печатает представление строки Юникода Python содержимого textarea, за исключением того, что все новые строки были заменены пробелами. Дох!

Не уверен, что я сталкиваюсь с проблемой кодирования текста, ошибкой selenium/webdriver (не удалось найти ее в трекере) или ошибкой пользователя.

есть ли другой способ сделать это?

редактировать: я просто дал Chrome попробовать... работать отлично. Я сообщил ошибка в трекер Селена. Обходной путь Сэма (принятый ответ ниже) работает в Firefox с одним предостережением: символы преобразуются в html-коды сущностей в возвращаемой строке. Это ерунда.

3 ответов


в качестве обходного пути вы можете попробовать использовать ExecuteScript для получения innerHtml. Я не парень python, но вот он в C#:

IWebElement element = ...
String returnText = ((IJavaScriptExecutor)webDriver).ExecuteScript("return arguments[0].innerHTML", element).ToString();

Я только что получил значение атрибута textarea тега. Ниже приведен пример кода Java.

WebElement textarea = driver.findElement(By.id("xf-1242"));         
String text = textarea.getAttribute("value");
log.debut(text);

Я использую драйвер Chrome, и выше кода поместите текст (XML в моем случае) с новыми строками в журнал. Я получил эту идею от http://www.w3schools.com/jsref/dom_obj_textarea.asp

января


в Python сначала получить элемент, а после получить значение атрибута, функция в python get_attribute('value').

from selenium import webdriver

driver = webdriver.Firefox()
URL = "http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_textarea"
driver.get(URL)
driver.switch_to.frame("iframeResult")
# get the textarea element by tag name
textarea = driver.find_element_by_tag_name('textarea')

# print the attribute of the textarea
print(textarea.get_attribute('value'))
print(textarea.get_attribute('rows'))
print(textarea.get_attribute('cols'))