'list' object has no attribute 'get_attribute' while iterating through WebElements
Solution 1:
Let us see what's happening in your code :
Without any visibility to the concerned HTML
it seems the following line returns two WebElements
in to the List
find_href
which are inturn are appended to the all_trails
List
:
find_href = browser.find_elements_by_xpath('//div[@class="text truncate trail-name"]/a[1]')
Hence when we print the List
all_trails
both the WebElements
are printed. Hence No Error.
As per the error snap shot you have provided, you are trying to invoke get_attribute("href")
method over a List
which is Not Supported. Hence you see the error :
'List' Object has no attribute 'get_attribute'
Solution :
To get the href
attribute, we have to iterate over the List
as follows :
find_href = browser.find_elements_by_xpath('//your_xpath')
for my_href in find_href:
print(my_href.get_attribute("href"))
Solution 2:
If you have the following HTML:
<div class="text-truncate trail-name">
<a href="http://google.com">Link 1</a>
</div>
<div class="text-truncate trail-name">
<a href="http://google.com">Link 2</a>
</div>
<div class="text-truncate trail-name">
<a href="http://google.com">Link 3</a>
</div>
<div class="text-truncate trail-name">
<a href="http://google.com">Link 4</a>
</div>
Your code should look like:
all_trails = []
all_links = browser.find_elements_by_css_selector(".text-truncate.trail-name>a")
for link in all_links:
all_trails.append(link.get_attribute("href"))
Where all_trails -- is a list of links (Link 1, Link 2 and so on).
Hope it helps you!
Solution 3:
find_href = browser.find_elements_by_xpath('//div[@class="text truncate trail-name"]/a[1]')
for i in find_href:
all_trails.append(i.get_attribute('href'))
get_attribute
works on elements of that list, not list itself.
Solution 4:
Use it in Singular form as find_element_by_css_selector
instead of using find_elements_by_css_selector
as it returns many webElements in List. So you need to loop through each webElement to use Attribute.