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

如何用Python的Selenium提取Naver博客名与作者ID?解析#document问题

解决Naver博客爬取中#document嵌套的问题

我之前爬Naver博客的时候也踩过这个坑!刚好能给你梳理清楚问题和解决办法:

先搞懂什么是#document

你在开发者工具里看到的#document,其实是iframe/frame标签内部的独立文档对象。Naver博客的文章页面做了嵌套设计:外层页面只负责承载框架,真正的博客内容(包括博主信息、博客主页的名称)都放在一个iframe里。这两个文档是独立的上下文,所以你直接操作外层页面时,根本碰不到iframe里的元素,连title拿到的也是外层的文章标题,而非博客名。

解决步骤:切换到iframe上下文再操作

Naver博客的文章页面里,承载内容的iframe id是mainFrame,我们需要先让Selenium切换到这个iframe的上下文,才能访问内部的元素。

完整代码示例

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()
target_url = "https://blog.naver.com/ssamssam48/221271075217"
driver.get(target_url)

# 等待iframe加载完成并切换上下文
wait = WebDriverWait(driver, 10)
main_iframe = wait.until(EC.presence_of_element_located((By.ID, "mainFrame")))
driver.switch_to.frame(main_iframe)

# 1. 获取博客名称(两种方式任选)
# 方式一:从iframe内部的title提取(格式为「博客名 :: 文章标题」)
blog_title = driver.title.split("::")[0].strip()
print("博客名称:", blog_title)

# 方式二:直接定位博客名称的元素
# blog_title = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="blog-profile"]/div/div[2]/h2/a'))).text
# print("博客名称:", blog_title)

# 2. 获取作者ID(从script变量提取)
blog_id_script = wait.until(EC.presence_of_element_located((By.XPATH, '//script[contains(text(), "var blogId")]')))
script_content = blog_id_script.get_attribute('innerHTML')
blog_id = script_content.split("var blogId = '")[1].split("';")[0].strip()
print("作者ID:", blog_id)

# 如果后续还要操作外层页面,记得切回默认上下文
# driver.switch_to.default_content()

# 关闭浏览器
driver.quit()

关键注意点

  • 必须用WebDriverWait等待元素加载:Naver博客加载有延迟,直接定位元素很容易触发「元素不存在」的错误。
  • 操作完iframe后,如果还要处理外层页面的内容,记得调用driver.switch_to.default_content()切回默认上下文。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:26:06