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

Selenium是否受HTML注释阻碍?网页爬取异常问题咨询

问题解答

核心结论

HTML中的<!---->空注释不会导致Selenium受阻。这类注释多是React、Vue等前端框架渲染时留下的占位符,本身不会干扰元素查找或内容提取。你无法获取目标内容的原因主要是:

  • 目标内容属于动态加载资源(依赖AJAX请求、延迟渲染),当前等待条件未覆盖内容加载完成的时机;
  • 选择器不够精准,未定位到真正包含目标内容的元素。

你的场景分析

从你提供的HTML示例、代码及执行输出来看:

  • Selenium成功定位到了两个div.submission-viewer-card-content div元素,但其中仅第一个包含有效内容;
  • 你期望提取的<div class="block">元素并未出现在当前返回的内容中,说明该元素在执行fetch方法时还未完成渲染,或是你的选择器未命中它。

解决建议

1. 调整等待条件,确保目标元素加载完成

不要等待泛用的div,直接等待你需要的目标元素(比如div.block或h3.subtitle.is-4):

WebDriverWait(driver, 15).until(
    EC.visibility_of_element_located(
        (By.CSS_SELECTOR, "div.block")
    )
)

使用visibility_of_element_located比presence_of_element_located更可靠,因为它会等待元素完全可见,而非仅存在于DOM中。

2. 优化选择器,精准定位目标内容

修改CSS选择器,直接指向包含目标内容的区块:

css_exp = "div.submission-viewer-card-content div.block"
rows = driver.find_elements(By.CSS_SELECTOR, css_exp)

3. 检查动态加载逻辑

打开浏览器开发者工具的Network标签,刷新页面后查看是否有AJAX请求返回了目标数据。如果存在,直接调用该API接口获取数据会比页面渲染更高效、稳定。

4. 结合BeautifulSoup处理已渲染HTML

若想用BeautifulSoup解析,先通过Selenium获取页面完全渲染后的源码,再传入BeautifulSoup:

from bs4 import BeautifulSoup

# 页面加载完成后获取源码
page_source = driver.page_source
soup = BeautifulSoup(page_source, 'html.parser')

# 提取目标内容
target_blocks = soup.select("div.block")
for block in target_blocks:
    print(block.get_text(strip=True, separator='\n'))

内容的提问来源于stack exchange,提问作者Cristian Andrés Carabalí Loboa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:33:11