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

使用Selenium抓取动态网页表格后无法获取页面显示的单元格内容

Selenium抓取页面缺失显示的名称内容

我编写了如下Selenium代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome('C:\\chromedriver_win32\\chromedriver.exe')
global_dynamicUrl = "https://draft.shgn.com/nfc/public/dp/788/grid"
driver.get(global_dynamicUrl)
wait = WebDriverWait(driver, 15)
table_entries = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "table tr")))
print(len(table_entries))
print(table_entries)
html = driver.page_source
open('site.txt', 'wt').write(html)

with open('site.txt', encoding='utf-8') as f:
    lines = f.read()
driver.close()

我将抓取结果保存到文本文件用于后续分析,但检查或解析文件时,发现其中完全没有网页上显示的名称内容(可查看附图)。请问我哪里操作出错了?


问题排查与修复方案

可能的出错点及对应解决步骤:

  • 等待条件不精准:当前仅等待表格行元素可见,但页面名称内容可能是异步加载的——表格行存在但内容还未填充。可以调整等待逻辑,比如等待某个具体的名称单元格元素出现,或者延长等待时长。
  • 编码异常:保存page_source时用wt模式未指定编码,可能导致部分内容乱码或丢失。修改保存代码为:
    open('site.txt', 'w', encoding='utf-8').write(html)
    
  • 未验证元素实际内容:可以先打印table_entries的文本内容,确认Selenium是否真的获取到了数据:
    for entry in table_entries:
        print(entry.text)
    
    如果这里也没有内容,说明等待策略失效,需要更换等待目标,比如等待页面document.readyState变为complete:
    wait.until(lambda d: d.execute_script('return document.readyState') == 'complete')
    

优化后的代码示例:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome('C:\\chromedriver_win32\\chromedriver.exe')
global_dynamicUrl = "https://draft.shgn.com/nfc/public/dp/788/grid"
driver.get(global_dynamicUrl)
wait = WebDriverWait(driver, 20)

# 等待页面完全加载完成
wait.until(lambda d: d.execute_script('return document.readyState') == 'complete')
# 等待具体的名称单元格出现,确保内容已加载
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "table tr td:first-child")))

table_entries = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "table tr")))
print(len(table_entries))
# 验证每行内容
for entry in table_entries:
    print(entry.text)

# 指定编码保存页面源码
html = driver.page_source
open('site.txt', 'w', encoding='utf-8').write(html)

driver.close()

内容的提问来源于stack exchange,提问作者Carlos Marcano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 13:33:12