【问题标题】:Hi I am experimenting with selenium in python嗨,我正在 python 中尝试硒
【发布时间】:2021-05-27 09:41:01
【问题描述】:

您好,我正在 python 中试验 selenium,我基本上想加载这个网站 https://www.jdsports.co.uk/c/footwear/?max=72 并获取每个产品的名称和价格。如果其中任何一个让您感到困惑,我也在使用 tkinter GUI,例如我运行它,它加载主菜单我单击我想要查看的部分,它打开浏览器,现在它加载然后我遇到每次都出现这个错误

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'

这里是代码

#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()


【问题讨论】:

    标签: python python-3.x selenium error-handling


    【解决方案1】:

    仅阅读错误消息,不知道有关 TkInter 或 Selenium 的任何特殊信息,告诉我 productslist,而在 Python 中,您不能在列表中调用 get_attribute

    我假设products 是一个类名为productListItem 的浏览器元素列表,因此您想要掌握该列表的元素,然后调用@987654326 @那些!

    也许

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

    可能会起作用。

    【讨论】:

    • 如果您想要一个列表而不是对单个项目使用 find_element,这是正确的。
    • 产生了结果,但不是我预期的结果,它在所有元素上将输出显示为 None
    • 没关系,我已经想出了如何获得所需的输出,但感谢您的帮助,因为这确实有帮助
    猜你喜欢
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 2021-03-14
    • 1970-01-01
    • 2012-08-02
    • 2022-01-25
    • 2020-12-01
    相关资源
    最近更新 更多