How to get text with Selenium WebDriver?

Question:

I am new in selenium and web scrapping.

So, I am trying to get text from site specially made for web scrapping, and for some reason i can’t do it.I am just get an error "’list’ object has no attribute ‘text".
My code:

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
pages = 10

for page in range(1, pages):
    url = "http://quotes.toscrape.com/js/page/" + str(page) + "/"
    driver.get(url)

    items = len(driver.find_elements(By.CLASS_NAME, 'quote'))
    total = []
    for item in range(items):
        quotes = driver.find_elements(By.CLASS_NAME, 'quote').text
        print(quotes)

Maybe my imports will help u to understand the reason:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
Asked By: jmur

||

Answers:

As find_elements returns a list of WebElement, you need to specify the Element index for which you want to access the text property (as there may be more elements with class=quote), that’s why you are getting the ‘list’ object has no attribute ‘text` error

You may want to use find_element_by_class_name() method in order to retrieve a single element, or if you want to get the n-th element with class=quote you may want to use an index on the List of Elements elements returned:

 elements = driver.find_elements(By.CLASS_NAME, 'quote')
 print(elements[2]) #get 3rd element with class=quote

If you want further information regarding Locating Elements using Selenium, see their documentation.

Answered By: Vlad Nitu
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.