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

Python Selenium爬虫项目报错:TypeError: can't multiply sequence by non-int of type 'list'

解决Python Selenium爬虫中票价倍数计算的类型错误问题

核心问题分析

你的代码存在三个关键问题:

  1. 变量未定义:代码中price.get_attribute('innerHTML')里的price变量从未声明,你之前获取的是new_price(且直接取了.text),导致后续提取逻辑出错。
  2. 类型不匹配:通过isdigit()提取的emp_str是字符串类型,字符串无法直接与浮点数standard_price进行数学运算;你提到的new_price是.text获取的字符串,同样存在类型问题。
  3. 逻辑偏差:你需要计算「当前票价是标准底价的倍数」,应该用当前票价 / 标准底价,而非代码中的乘法逻辑。

修正后的代码

from selenium.webdriver.common.by import By

standard_price = 0.0411

# 先获取元素对象,而非直接提取文本
price_element = driver.find_element(By.XPATH, '/html/body/div[1]/div/div/div[1]/div/div[2]/div[2]/div/span/div/div[3]/div/div[1]/div[2]/div[1]/div[2]/div')
price_content = price_element.get_attribute('innerHTML')

# 提取数字(支持带小数点的情况)
emp_str = ""
for m in price_content:
    if m.isdigit() or m == '.':
        emp_str += m

# 转换为数值类型,避免类型错误
extracted_price = float(emp_str)
# 计算倍数并格式化输出
price_multiple = extracted_price / standard_price
print(f"当前票价为标准底价的{price_multiple:.2f}x")

关键修正点说明

  • 先获取元素对象price_element,再通过它获取HTML内容,解决变量未定义的问题。
  • 扩展提取逻辑,允许保留小数点,适配带小数的票价场景。
  • 将提取到的字符串转换为float类型,确保能与standard_price进行数学运算。
  • 调整计算逻辑为除法,符合你需求的「倍数」计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:27:26