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
相关产品推荐
相关产品推荐

