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

Python简易网页抓取无法获取目标表格行内容问题求助

解决网页内容提取为空的问题

看起来你在尝试用Selenium提取网页里的海报会话标题,但遇到了提取结果为空的情况,我帮你梳理下代码里的问题和修复方案:

代码里的核心问题

  • 冗余且冲突的请求方式:你先用Selenium的driver.get(url)加载了页面,又用requests.get(url)单独发了一次请求——这个请求拿到的是静态HTML,和Selenium渲染后的页面完全没关系,而且你也没用到这个page_source变量,完全可以删掉这两行。
  • 过时的元素定位方法:find_elements_by_xpath在Selenium 4+版本里已经被弃用了,现在需要导入By模块来调用新的定位方法。
  • 不充分的等待策略:固定的time.sleep(3)有时候不够,尤其是页面滚动后元素可能还在加载,最好用显式等待来确保元素加载完成。
  • 可能不准确的XPath定位:你用的".//tr[@class='normaltext']"可能没匹配到实际元素,建议检查页面的真实DOM结构,确认目标元素的class或其他属性。

修正后的代码

import 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

driver = webdriver.Chrome()
bracket = []
url = 'https://www.sabcs.org/Program/Poster-Sessions/Poster-Session-1'

try:
    driver.get(url)
    # 滚动到页面底部,触发内容加载
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # 显式等待目标元素加载完成,最多等10秒
    WebDriverWait(driver, 10).until(
        EC.presence_of_all_elements_located((By.XPATH, ".//tr[@class='normaltext']"))
    )
    # 用新的方式定位元素
    each_field = driver.find_elements(By.XPATH, ".//tr[@class='normaltext']")
    for item in each_field:
        title_text = item.text.strip()
        if title_text:  # 过滤空内容
            print(title_text)
            bracket.append(title_text)
finally:
    driver.quit()  # 确保浏览器关闭

额外的排查建议

  • 如果还是提取不到内容,打开浏览器的开发者工具(F12),用元素选择器定位目标标题,确认XPath是否正确。比如可能目标文本在tr下的某个td标签里,这时候XPath需要调整为".//tr[@class='normaltext']/td"。
  • 有些网站会用动态加载(比如懒加载),可能需要多次滚动或者等待更长时间,你可以在滚动后再加一次等待,或者循环滚动直到页面不再加载新内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:57:43