Python 硒';列表';对象没有属性';文本';

Python 硒';列表';对象没有属性';文本';,python,selenium,selenium-webdriver,xpath,Python,Selenium,Selenium Webdriver,Xpath,所以我使用python和selenium在丝芙兰上刮取产品标题 问题是,当我运行它时,我得到了第48行:AttributeError:'list'对象没有属性“text”。标题位于一个嵌套在div中的span中。我在一个普通div中尝试了这个方法,其中包含文本,它可以将其删除。出现错误的原因是这一行: .find_elements_by_xpath('/html/body/div[1]/div[2]/div/div/div/div[2]/div[1]/main/div[3]/div/div[1]

所以我使用python和selenium在丝芙兰上刮取产品标题


问题是,当我运行它时,我得到了
第48行:AttributeError:'list'对象没有属性“text”
。标题位于一个嵌套在div中的span中。我在一个普通div中尝试了这个方法,其中包含文本,它可以将其删除。出现错误的原因是这一行:

.find_elements_by_xpath('/html/body/div[1]/div[2]/div/div/div/div[2]/div[1]/main/div[3]/div/div[1]/div[1]/div[1]/a/div/div[4]/span[2]').text
上面返回一个列表

.text
方法用于
查找元素
(不带s

但简单来说,您可以通过css选择器使用以下值刮取标题:
div[data comp=“ProductDisplayName”]span[data at=“sku\u item\u name”]

请尝试以下代码:

url = 'https://www.sephora.com/ca/en/shop/face-makeup'

driver.get(url)  
time.sleep(2)
   
browser = scrollDown(driver, 20)

titles = driver.find_elements_by_css_selector('div[data-comp="ProductDisplayName "] span[data-at="sku_item_name"]')
for title in titles:
    print(title.text)

要删除品牌,只需将选择器更改为:
div[data comp=“ProductDisplayName”]span[data at=“sku\u item\u brand”]

注意,您使用的函数通过xpath查找元素(注意
通过xpath查找元素中的“s”)。函数返回的是一个列表,而不是一个对象。@ShaneBishop消除了我刚才提到的错误,但现在它只返回页面上的第一个产品价格x产品数量。谢谢!我甚至不知道你可以用数据属性来处理。
url = 'https://www.sephora.com/ca/en/shop/face-makeup'

driver.get(url)  
time.sleep(2)
   
browser = scrollDown(driver, 20)

titles = driver.find_elements_by_css_selector('div[data-comp="ProductDisplayName "] span[data-at="sku_item_name"]')
for title in titles:
    print(title.text)