代码之家  ›  专栏  ›  技术社区  ›  Reezal AQ

如何解决TypeError:“WebElement”类型的对象在Python Selenium中没有len()

  •  0
  • Reezal AQ  · 技术社区  · 7 年前

    我想打印所有类似的元素,但不断出现错误(我正在使用 皮查姆 )。

    错误:

    TypeError: object of type 'WebElement' has no len()
    

    这一行是引发错误的行: num_page_items = len(productname)

    全硒代码:

    from selenium import webdriver
    
    driver = webdriver.Chrome('/Users/reezalaq/PycharmProjects/untitled2/venv/driver/chromedriver')
    
    driver.get("https://www.blibli.com/jual/batik-pria?s=batik+pria")
    productname = driver.find_element_by_xpath("//div[@class='product-title']")
    oldprice = driver.find_element_by_css_selector("span.old-price-text").text
    discount = driver.find_element_by_css_selector("div.discount > span").text
    saleprice = driver.find_element_by_css_selector("span.new-price-text").text
    
    num_page_items = len(productname)
    for i in range(num_page_items):
       print(productname[i].text + " : " + oldprice[i].text + " : " + discount[i].text + " : " + saleprice[i].text)
    
    
    driver.close()
    2 回复  |  直到 7 年前
        1
  •  3
  •   Tarun Lalwani    7 年前

    您正在使用 find_element_by_xpath 查找并返回第一个 WebElement 匹配选择器。您需要使用 find_elements_by_xpath 返回所有匹配的元素

        2
  •  1
  •   undetected Selenium    7 年前

    错误说明了一切:

    num_page_items = len(productname) 
    TypeError: object of type 'WebElement' has no len()
    

    产品名称 从中指定了返回类型 driver.find_element_by_xpath("//div[@class='product-title']") ,这是 Web元素 Web元素 没有方法作为 len() len() 可以在 List

    解决方案

    当你试图访问 列表 项目如下:

    print(productname[i].text + " : " + oldprice[i].text + " : " + discount[i].text + " : " + saleprice[i].text)
    

    所以 产品名称 ,则, 旧价格 ,则, 折扣 销售价格 需要是的 列表 类型

    但您的代码如下所示:

    productname = driver.find_element_by_xpath("//div[@class='product-title']")
    oldprice = driver.find_element_by_css_selector("span.old-price-text").text
    discount = driver.find_element_by_css_selector("div.discount > span").text
    saleprice = driver.find_element_by_css_selector("span.new-price-text").text 
    

    哪里 产品名称 是一个 Web元素 旧价格 ,则, 折扣 销售价格 文本 。因此,您需要将其更改为 列表 属于 WebElements网站元素 具体如下:

    productname = driver.find_elements_by_xpath("//div[@class='product-title']")
    oldprice = driver.find_elements_by_css_selector("span.old-price-text")
    discount = driver.find_elements_by_css_selector("div.discount > span")
    saleprice = driver.find_elements_by_css_selector("span.new-price-text")