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

问题描述 投票:0回答:2

我想打印所有类似的元素,但一直出错(我正在使用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()
python list selenium selenium-webdriver webdriver
2个回答
0
投票

错误说明了一切:

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")

1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.