029.爬虫专用浏览器-抓取跨域#document下的内容

一、iframe下的#document是什么

  • #document 是一个特殊的 HTML 元素,表示 <iframe> 元素内部的文档对象。
  • 当你在 HTML 页面中嵌入一个 <iframe> 元素时,浏览器会创建一个新的文档对象来表示 <iframe> 内部的内容。这 个文档对象就是 #document

二、如何获取#document下的内容

1. 使用 contentDocument 属性
js 复制代码
var iframe = document.getElementById('myIframe');
var iframeDocument = iframe.contentDocument;
// 现在可以访问 iframe 文档中的元素了
var heading = iframeDocument.getElementsByTagName('h1')[0];
console.log(heading.textContent);
2. 使用 contentWindow.document
js 复制代码
var iframe = document.getElementById('myIframe');
var iframeDocument = iframe.contentWindow.document;
// 访问 iframe 文档中的元素
var heading = iframeDocument.getElementsByTagName('h1')[0];
console.log(heading.textContent);

注意:如果 iframe 加载的页面与父页面不同源(即协议、域名或端口任一不同),则出于安全考虑,浏览器的同源政策会阻止你访问 iframe 的内容。这种情况下,contentDocument会返回null。

三、如何获取跨域iframe的#document里的内容

  • 网络上有其他解决方案,这里我提供一个修改chromium源码的方案。
  • 这里假设你已经可以熟练编译chromium源码。
1.找到源码:
  • 打开:\third_party\blink\renderer\core\html\html_iframe_element.idl
c 复制代码
[CheckSecurity=ReturnValue] readonly attribute Document? contentDocument;
2.替换为:
c 复制代码
//[CheckSecurity=ReturnValue] readonly attribute Document? contentDocument;
readonly attribute Document? contentDocument;

注意,这里就是把[CheckSecurity=ReturnValue]这段注释掉了,意思是忽略掉安全隔离。

3.编译:
c 复制代码
ninja -C out/Default chrome
4.启动时加上参数(必须)
复制代码
--disable-site-isolation-trials

操作完后,就可以发现,跨域iframe的#document里的内容也可以获取到啦。

四、风险

  • 1.取消跨域隔离有一定安全风险。
  • 2.有些站会做安全隔离检测,可能会被识别到。

如果有更好方案,请留言哈。

相关推荐
兆子龙18 分钟前
从 float 到 Flex/Grid:CSS 左右布局简史与「刁钻」布局怎么搞
前端·架构
YukiMori2324 分钟前
一个有趣的原型继承实验:为什么“男人也会生孩子”?从对象赋值到构造函数继承的完整推演
前端·javascript
_哆啦A梦26 分钟前
Vibe Coding 全栈专业名词清单|设计模式·基础篇(创建型+结构型核心名词)
前端·设计模式·vibecoding
百里静修26 分钟前
一个 Hook 拦截所有 AJAX 请求:ajax-hooker 使用指南与原理
前端
摸鱼的春哥1 小时前
惊!黑客靠AI把墨西哥政府打穿了,海量数据被黑
前端·javascript·后端
小兵张健1 小时前
Playwright MCP 截图标注方案调研(推荐方案1)
前端·javascript·github
小兵张健2 小时前
AI 页面与交互迁移流程参考
前端·ai编程·mcp
小兵张健2 小时前
掘金发布 SOP(Codex + Playwright MCP + Edge)
前端·mcp
小兵张健3 小时前
Mac 上 Antigravity 无法调用 browser_subagent?一次 400 报错排查记录
前端
张拭心4 小时前
编程最强的模型,竟然变成了国产的它
前端·ai编程