使用Selenium的find_elements_by_xpath获取文本时出现avail未定义错误如何解决
问题修复方案
核心错误原因
- 缩进不符合Python语法规范:for循环的执行语句必须缩进,你当前代码里
avail = i.text()没有缩进,不属于for循环的执行范围。如果driver.find_elements_by_xpath没有匹配到任何元素,返回的是空列表,for循环不会执行,avail变量从未被定义,打印时就会触发NameError。 - Selenium API使用错误:WebElement对象的文本内容是
text属性,不是可调用的方法,不需要加括号。
修复后完整代码
from selenium import webdriver from selenium.webdriver.common.keys import Keys # 初始化驱动 driver = webdriver.Chrome('/Users/victorfichtner/Downloads/Chromedriver') driver.get('https://www.myntra.com/smart-watches/boat/boat-unisex-black-storm-m-smart-watch/13471916/buy') # 提前定义avail默认值,避免匹配不到元素时报错 avail = "未匹配到目标元素" a = driver.find_elements_by_xpath("//*[@class='pdp-add-to-bag pdp-button pdp-flex pdp-center']") # for循环内语句缩进4个空格,修正text调用方式 for i in a: avail = i.text driver.quit() print(avail)
额外优化建议
- 如果目标页面是动态渲染的,可以在
driver.get之后加隐式等待,避免元素还没加载完成就执行匹配逻辑:driver.implicitly_wait(10) - 检查目标元素的class属性是否正确,网站更新后class属性可能会发生变化,导致匹配结果为空。
内容的提问来源于stack exchange,提问作者JeCh0
相关产品推荐
相关产品推荐

