如何使用Selenium获取当前页面HTML,解决driver.page_source返回含JS内容问题
纯HTML内容获取方案
你使用driver.page_source拿到混合内容的原因是该方法返回的是浏览器初始请求得到的原始响应源码,此时页面JavaScript还未完成动态渲染,所以会包含大量未执行的JS逻辑。针对该场景可按以下步骤操作:
- 先等待页面动态内容完全渲染
调用driver.get()后不要立刻提取源码,添加显式等待逻辑,等待页面核心业务元素加载完成后再操作,避免拿取未完成渲染的内容。参考Python代码:from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 超时时间设为20秒,等待页面的公司信息容器元素加载完成,可替换为实际页面的目标元素选择器 WebDriverWait(driver, 20).until( EC.presence_of_element_located((By.CSS_SELECTOR, ".company-detail-container")) ) - 直接提取渲染完成的DOM内容
不要使用driver.page_source,改为通过JS脚本获取整个页面根节点渲染后的HTML内容,该内容是JS执行完成后的纯DOM结构:full_rendered_html = driver.execute_script("return document.documentElement.outerHTML;") - 过滤残留的冗余标签
如果需要移除HTML中残留的script、style等非内容标签,可借助BeautifulSoup做清洗:from bs4 import BeautifulSoup soup = BeautifulSoup(full_rendered_html, "html.parser") # 移除所有script和style标签及其内容 for tag in soup(["script", "style"]): tag.decompose() # 得到最终的纯内容HTML pure_html = str(soup)
补充说明:如果页面存在懒加载内容,可在等待逻辑前添加滚动页面到底部的操作,触发所有懒加载内容完成渲染后再提取源码。
内容的提问来源于stack exchange,提问作者Denis
相关产品推荐
相关产品推荐

