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
相关产品推荐
相关产品推荐

