如何解决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()的主要内容,如果未能解决你的问题,请参考以下文章
如何解决 TypeError: path.split is not a function
解决 TypeError: ('Keyword argument not understood:', 'padding')
Python TypeError:'bool'对象不可调用[重复]