1

Hi I am experimenting with selenium in python, I basically want to load this website https://www.jdsports.co.uk/c/footwear/?max=72 and get each product with a name and price. I am also using tkinter GUI if any of that confuses you, so for example I run it, It loads up the main menu I click the section I want to look at, it opens the browser, now it loads in and then I run into this error each time

Exception in Tkinter callback
Traceback (most recent call last):
  File "E:\Python\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)
  File "C:\Users\James\Desktop\WebScraper\webscraper.py", line 34, in <lambda>
    scrapeBtn = tkinter.Button(secndmenu, text='scrape', command=lambda url=url:scrape(url,secndmenu))
  File "C:\Users\James\Desktop\WebScraper\webscraper.py", line 49, in scrape
    print(products.get_attribute('text'))
AttributeError: 'list' object has no attribute 'get_attribute'

Here is the code

#imports
from selenium import webdriver
import tkinter

#Window Calls
home = tkinter.Tk()
home.title("Home")
home.geometry('500x500')

urlselec=''

def shopClothing():
    urlselec="https://www.jdsports.co.uk/c/clothing/?max=72"
    url = urlselec
    return url, scrapeOrAuto(url)

def shopFootWare():
    urlselec='https://www.jdsports.co.uk/c/footwear/?max=72'
    url = urlselec
    return url, scrapeOrAuto(url)

def shopAccessories():
    urlselec='https://www.jdsports.co.uk/c/accessories/'
    url = urlselec
    return  url, scrapeOrAuto(url)


def scrapeOrAuto(url):
    home.withdraw()
    secndmenu = tkinter.Tk()
    secndmenu.title('Choose')
    secndmenu.geometry('300x300')
    url = url
    scrapeBtn = tkinter.Button(secndmenu, text='scrape', command=lambda url=url:scrape(url,secndmenu))

    scrapeBtn.pack()
    secndmenu.mainloop()

def scrape(url,secndmenu):
    secndmenu.withdraw()
    scraperAlert = tkinter.Tk()
    scraperAlert.title('Alert!')
    scraperAlert.geometry('300x200')

    tkinter.Label(scraperAlert,text='Scraping!').pack()
    browser = webdriver.Chrome()
    browser.get(url)
    products = browser.find_elements_by_class_name("productListItem ")
    print(products.get_attribute('text'))
    # soruce = browser.page_source
    print(products)

    return print('scraped')

#Buttons
clothing = tkinter.Button(anchor='center',text="Clothing", command =shopClothing)
footware = tkinter.Button(anchor='center',text='Footware', command=shopFootWare)
accessories = tkinter.Button(text='Accessories', command=shopAccessories)



#WindowCompile
clothing.pack()
footware.pack()
accessories.pack()
home.mainloop()


1 Answer 1

1

Just reading the error message, not knowing anything particular about TkInter or Selenium, tells me that products is a list, and in Python you can't call get_attribute on a list.

I assume that products is a list of browser elements with class name productListItem and as such what you want is to get your hands on the elements of that list and then call get_attribute on those!

So maybe

for product in products:
  print(product.get_attribute('text'))

might work.

Sign up to request clarification or add additional context in comments.

3 Comments

This is correct if you want a list instead use find_element for a single item.
That produced an outcome but not the outcome I expected it present the output as None on all elements
never mind I have figured out how to get the desired output but thanks for the help cause this did help

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.