Selenium+Python无法定位含空格类名及索引报错问题求助
问题解答
1. 索引失效的原因
你遍历_3tbKJL元素列表时,循环变量(比如你代码里的i)已经是单个WebElement对象,而非列表或可迭代集合。WebElement不支持下标访问([0]),因此会抛出TypeError: 'WebElement' object is not subscriptable错误。
举个错误代码示例:
parent_elements = driver.find_elements(By.CLASS_NAME, "_3tbKJL") for i in parent_elements: # 错误:i是单个WebElement,不能用i[0] price = i[0].find_element(...)
正确逻辑是:循环变量本身就是单个父元素,直接在它内部查找子元素即可,无需额外加索引。
2. 正确定位价格元素的方法
方法一:直接定位价格元素
注意类名包含空格时,By.CLASS_NAME无法识别多类名(空格代表多个CSS类),需用CSS选择器或XPath:
# CSS选择器(点号表示类,多个类直接拼接) price_elements = driver.find_elements(By.CSS_SELECTOR, "._30jeq3._1_WHN1") # 或XPath写法 price_elements = driver.find_elements(By.XPATH, "//*[@class='_30jeq3 _1_WHN1']")
方法二:从父元素内部定位
如果你已获取父元素列表,可遍历每个父元素,在其内部查找子价格元素:
parent_elements = driver.find_elements(By.CLASS_NAME, "_3tbKJL") for parent in parent_elements: # 在父元素范围内查找价格子元素 price = parent.find_element(By.CSS_SELECTOR, "._30jeq3._1_WHN1") print(price.text)
额外提示
若元素为动态加载,建议等待元素出现后再定位,避免NoSuchElementException:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待所有价格元素加载完成(最长等待10秒) price_elements = WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CSS_SELECTOR, "._30jeq3._1_WHN1")) )
内容的提问来源于stack exchange,提问作者MTPy
相关产品推荐
相关产品推荐

