Python抓取bloks.io实时刷新表格数据遇问题求助
解决bloks.io实时表格数据抓取与内容更新检测问题
问题原因拆解
初始
no such element错误:- 页面未完全加载就执行元素查找,目标表格行还未渲染到DOM中
- CSS选择器存在转义问题(代码里的
>是HTML实体,实际需用原生的>)
无法检测内容刷新:
- 你直接对比的是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
相关产品推荐
相关产品推荐

