Selenium爬取实时比分网站时无法提取时间值10:30的问题求助
解决Selenium提取时间文本的AttributeError问题
嘿,别慌!我来帮你搞定这个时间提取的小麻烦~
首先得纠正一下你的推测:这个报错和时间是否声明为字符串没关系。AttributeError: 'NoneType' object has no attribute 'time' 其实是说你尝试调用一个None对象的time方法/属性——说白了就是你用来定位时间元素的代码没找到目标元素,返回了None,然后你又对这个None做了xxx.time的操作,才触发了报错。
咱们一步步来解决:
1. 修正元素定位逻辑
看你提供的HTML片段:
<td class="table-time datet t1522665000-1-1-0-0">10:30</td>
这里的class里,t1522665000是动态变化的时间戳,所以不能用完整的class值来定位。咱们要用固定不变的class部分,比如table-time或者datet。
推荐这几种定位方式:
- CSS选择器(最稳定):
td.table-time - XPath:
//td[contains(@class, 'table-time')] - 类名定位:
table-time
2. 正确提取文本内容
找到元素后,用.text属性就能拿到<td>标签里的10:30,根本不需要什么.time属性(这是你之前代码里的错误点哦)。
给你个完整的修正代码示例:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC options = webdriver.ChromeOptions() options.add_argument("headless") driver = webdriver.Chrome(options=options) # 替换成你的目标网站URL driver.get("https://your-score-site.com") # 关键:等待元素加载完成(避免页面没加载完就定位导致返回None) try: # 最多等待10秒,直到时间元素出现 time_element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, "td.table-time")) ) # 提取时间文本 match_time = time_element.text print(f"提取到的比赛时间:{match_time}") # 输出 10:30 except Exception as e: print(f"定位元素出错:{e}") driver.quit()
3. 额外注意点
- 如果页面上有多个这样的时间
<td>,要用find_elements(复数)来获取所有元素,再遍历提取文本 - 有些网站可能会用JS动态渲染时间,这时候等待元素的步骤就很重要,一定要用
WebDriverWait而不是time.sleep()(后者不够稳定)
内容的提问来源于stack exchange,提问作者Cosmin
相关产品推荐
相关产品推荐

