2016-02-12 4 views
0

Я пытаюсь сменить сайт на Selenium и Python, я попал в поле под названием textarea. Это, как веб-сайт HTML называет место, где я пытаюсь извлечь текст:Selenium get textarea error

<textarea class="script" onclick="this.focus();this.select()" readonly="readonly" id="script"> 

После этого код приходит текст, который я хочу получить. Вот код, который я использую:

getCode = driver.find_elements_by_tag_name('textarea') 

Моя проблема заключается в том, что он не распознает текст с помощью следующих кодов:

getCode.submit() 
getCode.click() 
getCode.text() 

Это ошибка код, который я всегда получаю:

Traceback (most recent call last):
File "ScprL.py", line 55, in module
print (repr(getCode.text))
AttributeError: 'list' object has no attribute 'text'

Я бы по достоинству оценил вашу помощь!

+0

Вы должны извлечь webElement из списка сначала, как этот 'driver.find_elements_by_tag_name ('textarea') [0]', если первая текстовая область, которую вы хотите, - это тот, который вы хотите – Obsidian

+0

Вы хотите только выше данных HTML-кода для вас хочу все данные поля textarea –

ответ

1

Вы должны использовать driver.find_element_by_tag_name вместо

При использовании driver.find_elements вы получите список webElements. Вы должны извлечь элемент из списка

elem = driver.find_elements_by_tag_name('textarea')[0] 
print element.text 

Если у вас есть несколько текстовых областей на странице, то вы должны попытаться найти нужную вам как ниже

textareas = driver.find_elements_by_tag_name('textarea') 
for i, textarea in enumerate(textareas): 
    print '{} is at index {}'.format(textarea.text, i) 

И затем использовать соответствующую i значение для получения textareas[i]

+0

Вот и все! Удалил 's' из 'элементов', и он прекратил получать список, чтобы я мог получить простой текст, который я хотел. Благодаря! –

+1

, если вам нужен один текст, тогда вам не нужно использовать список ... список используется в том месте, где вам нужно повторить несколько элементов возврата. –

1

Как вы используете драйвер. find_elements _by_tag_name ('textarea'), он будет извлекать список веб-элементов. Нужно собирать эти веб-элементы, а затем перебирать один за другим, а затем получать текст каждого из веб-элементов. Ниже приведен пример в Java,

List<WebElement> ButtonNamelist = driver.findElements(By.cssSelector(".locatorHere")); 

System.out.println(ButtonNamelist.size()); 

    for(int i=0;i<ButtonNamelist.size();i++){ 

System.out.println(ButtonNamelist.get(i).getText()); 

} 

Спасибо, Мурали

0

Есть две функции для каждого локатора в селене: «find_element сек» и «find_element». Разница довольно проста: первая возвращает список элементов, которые удовлетворяют селектору, а второй возвращает первый найденный элемент. Вы можете узнать больше о размещении элементов here.

Таким образом, вам либо нужно изменить свою функцию на find_element_by_tag_name, либо для извлечения первого элемента из списка: find_element_by_tag_name()[0].