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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解决TypeError:'WebElement'类型的对象在Python Selenium中没有len()相关的知识,希望对你有一定的参考价值。

我想打印所有类似的元素,但一直出错(我正在使用Pycharm)。

错误:

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()
答案

错误说明了一切:

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

productname被赋予driver.find_element_by_xpath("//div[@class='product-title']")的返回类型,这是一个WebElement而WebElement没有像len()那样的方法。 len()可以在List上使用。

当您尝试访问List项目时,如:

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

所以productname,oldprice,折扣和saleprice需要是List类型。

但是您的代码读作:

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 

其中productname是WebElement,oldprice,discount和saleprice是文本。因此,您需要将它们更改为WebElements的List,如下所示:

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")
另一答案

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

以上是关于如何解决TypeError:'WebElement'类型的对象在Python Selenium中没有len()的主要内容,如果未能解决你的问题,请参考以下文章

求 selenium By.xpath 包含变量 解决方案

如何解决 TypeError: path.split is not a function

解决 TypeError: ('Keyword argument not understood:', 'padding')

Python TypeError:'bool'对象不可调用[重复]

Python提示:TypeError: 'NoneType' object is not callable的解决办法

python框架Scrapy报错TypeError: 'float' object is not iterable解决