You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium爬取表格数据触发'str对象不可调用'错误该如何解决

问题解决方法

报错原因

TypeError: 'str' object is not callable报错源于语法错误:By.XPATH是Selenium预定义的字符串常量,并非可调用的方法,你代码中错误地将其作为函数加括号传参,才触发了该报错。

修正方案

browser.find_elements方法需要传入两个独立参数,第一个参数是定位方式By.XPATH,第二个参数是对应的XPATH表达式,两个参数用逗号分隔即可。
另外建议补充显式等待逻辑,确保表格加载完成后再统计行数,避免拿到空的元素列表。

修正后完整代码

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

s = Service("C:\Program Files (x86)\chromedriver.exe")
browser = webdriver.Chrome(service=s)

# 访问目标页面并处理弹窗
url = "https://www.dbs.com.sg/treasures/aics/stock-coverage/index.html"
browser.get(url)
WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, "//button[text()='Accept']"))).click()

# 等待表格加载完成后统计行数
table_rows_xpath = "//*[@id='buyholdsell']/div/div/div/div/div[1]/div/div/div/div/table/tbody/tr"
WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.XPATH, table_rows_xpath)))
rows = len(browser.find_elements(By.XPATH, table_rows_xpath))

print(rows)

后续提取公司名称参考逻辑

如果要提取所有公司名称,拿到行元素列表后循环遍历即可,示例:

company_names = []
for row in browser.find_elements(By.XPATH, table_rows_xpath):
    # 提取每行第一列的公司名,可根据实际页面结构调整索引
    name = row.find_element(By.XPATH, "./td[1]").text.strip()
    if name:
        company_names.append(name)
print(company_names)

内容的提问来源于stack exchange,提问作者Kong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 03:54:11