使用Python Selenium抓取商品价格报错'str'对象不可调用如何解决
问题原因与修复方案
核心报错原因
你抛出'str' object is not callable的直接原因是误用了By.XPATH的语法:By.XPATH本身是Selenium定义的字符串常量,不是可调用的函数,你把它写成By.XPATH("xxx")的形式,相当于尝试把字符串当成函数执行,就会触发该报错。
正确的find_element传参格式是传入两个独立参数:第一个是定位方式常量(比如By.XPATH),第二个是对应的定位表达式。
次要语法问题
你的XPath表达式里@data-product-id的属性值结尾多写了一个多余的单引号,会导致定位表达式解析失败。
修复后的代码片段
把原来的get_elements赋值行替换为以下内容即可解决报错:
get_elements = driver.find_element(By.XPATH, "//span[@data-product-id='2151359512645']")
可选优化建议
- 你前面定义了Chrome启动参数(无头、无痕、忽略证书错误等),但初始化
webdriver.Chrome的时候没有传入options参数,这些参数不会生效,建议修改初始化代码:
driver = webdriver.Chrome(service=s, options=options)
- 页面加载可能存在延迟,建议增加显式等待逻辑,避免元素还没渲染就执行定位导致找不到元素的报错:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 最多等待10秒直到目标元素加载完成 get_elements = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.XPATH, "//span[@data-product-id='2151359512645']")) )
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

