Selenium提取HTML表格缺失最后一个值问题排查求助
问题根源分析
- 无头模式默认窗口尺寸限制:Chrome无头模式默认视口尺寸极小,目标网页表格的最后一列(Measure列)在小窗口下会被判定为超出可视区域,被页面CSS规则隐藏或挤压,Selenium自带的
.text属性仅返回可见元素的文本内容,因此最后一列的0值会被过滤。 - 元素等待范围不全:仅等待了
<tr>行元素加载完成,但最后一列的数值是页面加载完基础结构后异步计算渲染的,行元素存在时最后一个<td>的内容还未完成渲染,此时读取就会缺失对应数值。 - 行文本读取逻辑局限性:目标网页的最后一列数值放在带特殊样式属性的内嵌标签中,部分样式会让Selenium的
.text属性判定内容不可见,自动跳过读取。
修复方案
按照以下步骤修改代码即可抓取到完整的表格行内容:
- 给Chrome启动参数添加窗口尺寸配置,保证所有表格列都在可视范围内
- 不要直接读取整行的
.text属性,改为遍历行下所有<td>元素,用textContent属性读取内容,该属性不受元素可见性限制,能拿到所有内嵌文本 - 可以额外增加对最后一个
<td>元素的等待,确保内容渲染完成后再读取
修改后的核心代码参考:
import pandas as pd import csv from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.chrome.options import Options t1 = [] options = Options() options.add_argument('--headless') options.add_argument('--disable-gpu') # 新增窗口尺寸配置 options.add_argument('--window-size=1920,1080') driver = webdriver.Chrome(executable_path = 'mypath/chromedriver.exe', options = options) driver.get("https://ai.fmcsa.dot.gov/SMS") wait = WebDriverWait(driver, 20) wait.until(EC.element_to_be_clickable((By.XPATH, "//a[@title='Close']"))).click() wait.until(EC.element_to_be_clickable((By.XPATH, "(//input[@name='MCSearch'])[2]"))).send_keys('1605061') wait.until(EC.element_to_be_clickable((By.XPATH, "(//input[@name='search'])[2]"))).click() wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='BASICs']/p[2]/a"))).click() # 等待目标行加载 tbl = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//tr[@class='valueRow sumData']"))) # 遍历所有td读取textContent,避免可见性过滤 td_elements = tbl.find_elements(By.TAG_NAME, 'td') row_values = [td.get_attribute('textContent').strip() for td in td_elements] print(row_values)
内容的提问来源于stack exchange,提问作者alexb
相关产品推荐
相关产品推荐

