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

Python抓取bloks.io实时刷新表格数据遇问题求助

解决bloks.io实时表格数据抓取与内容更新检测问题

问题原因拆解

  1. 初始no such element错误:

    • 页面未完全加载就执行元素查找,目标表格行还未渲染到DOM中
    • CSS选择器存在转义问题(代码里的>是HTML实体,实际需用原生的>)
  2. 无法检测内容刷新:

    • 你直接对比的是Selenium元素对象,即使元素内容更新,同一DOM节点的对象引用不会改变,因此永远判定为相等,捕捉不到内容变化

解决方案

1. 修正元素定位与等待逻辑

延长页面等待时间,改用visibility_of_element_located确保元素可见(而非仅存在于DOM),同时使用正确的CSS选择器。

2. 核心:检测内容更新的正确方式

不再对比元素对象,而是提取元素的文本内容(比如第一列的文本)进行前后对比,内容变化时触发逻辑。

完整修正代码

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager
import time

def connection():
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
    return driver

def search_first_entry(driver, link):
    driver.get(link)
    wait = WebDriverWait(driver, 10)  # 延长等待时间确保页面加载完成
    target_row_locator = (By.CSS_SELECTOR, '#info > tbody > tr:nth-child(2)')
    # 等待目标行可见
    wait.until(EC.visibility_of_element_located(target_row_locator))
    
    # 初始化第一列内容(取第一个td的文本)
    prev_content = driver.find_element(*target_row_locator).find_element(By.TAG_NAME, 'td').text
    print(f"初始第一列内容: {prev_content}")

    while True:
        # 重新获取当前行的第一列文本
        current_element = wait.until(EC.visibility_of_element_located(target_row_locator))
        current_content = current_element.find_element(By.TAG_NAME, 'td').text
        
        if current_content != prev_content:
            print(f"内容更新: {prev_content} -> {current_content}")
            prev_content = current_content
        
        time.sleep(1)  # 控制检测频率

def main():
    link = 'https://bloks.io/live'
    driver = connection()
    try:
        search_first_entry(driver, link)
    finally:
        driver.quit()  # 程序退出时关闭浏览器

main()

额外优化建议

  • 增加异常捕获:处理页面加载超时、元素丢失等异常情况
  • 精准定位列:如果第一列有特定类名,可改用#info > tbody > tr:nth-child(2) > td:first-child这类更精准的选择器
  • 调整检测频率:根据需求延长time.sleep时长,减少资源消耗

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 02:58:32