Arthur Silva
Arthur Silva

Reputation: 150

Selenium get textarea error

I'm trying to scrap in a website using Selenium and Python, I got stucked in a field called 'textarea' by the website. This is how the website HTML calls the area where I'm trying to extract text:

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

After this code comes the text that I want to get. Here is the code that I'm using:

getCode = driver.find_elements_by_tag_name('textarea')

My problem is that It does not recognize the text by the following codes:

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

This is the code error that I always get:

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

I would apreciate your help!

Upvotes: 0

Views: 2663

Answers (3)

Dmitry Yantsen
Dmitry Yantsen

Reputation: 1185

There are two functions for each locator in selenium: "find_elements" and "find_element". The difference is pretty simple: the first one return a list of elements that satisfy selector and the second one returns first found element. You can read more about locating elements here.

So you either need to change your function to find_element_by_tag_name or to retrieve first element from list: find_element_by_tag_name()[0].

Upvotes: 0

murali selenium
murali selenium

Reputation: 3927

As you are using driver.find_elements_by_tag_name('textarea') it will retrieve list of web elements. Need to collect these web elements then iterate one by one then get text of each of web element. below is the example in 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());

}

Thank You, Murali

Upvotes: 1

Obsidian
Obsidian

Reputation: 515

You should use driver.find_element_by_tag_name instead

When you use driver.find_elements you get a list of webElements. You should extract the element from the list

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

If you have multiple textareas on the page, then you should try to finding the one you need like below

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

And then use the appropriate i value to get textareas[i]

Upvotes: 1

Related Questions