当前位置: 首页 > article >正文

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

一、iframe下的#document是什么

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

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

1. 使用 contentDocument 属性
var iframe = document.getElementById('myIframe');
var iframeDocument = iframe.contentDocument;
// 现在可以访问 iframe 文档中的元素了
var heading = iframeDocument.getElementsByTagName('h1')[0];
console.log(heading.textContent);
2. 使用 contentWindow.document
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
[CheckSecurity=ReturnValue] readonly attribute Document? contentDocument;
2.替换为:
//[CheckSecurity=ReturnValue] readonly attribute Document? contentDocument;
readonly attribute Document? contentDocument;

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

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

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

四、风险

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

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


http://www.kler.cn/a/369254.html

相关文章:

  • 【十六进制数转十进制数 】
  • outlook创建新账户时报错2603、2604的解决办法
  • 《数据结构》学习系列——树(下)
  • c语言中整数在内存中的存储
  • 一分钟学会MATLAB-数值计算
  • Word中Normal.dotm样式模板文件
  • ReactOS系统中平衡二叉树按从左到右的顺序找到下一个结点
  • 股指期货连续合约是什么意思?可以交易吗?
  • Ovis: 多模态大语言模型的结构化嵌入对齐
  • appium+mumu模拟器 嚼碎菜鸟教程
  • 酷睿 Ultra 200S核显相当于GTX 1050Ti?4核心表现出人意料
  • 一文理解平流层温度变化规律
  • Java毕业设计 基于SSM jsp餐厅卫生安全系统
  • Java中线程安全问题解决方案
  • 【软件设计】常用设计模式--代理模式
  • Leetcode 二叉树的右视图
  • cargo编译时Rust时如何自定义输出目录
  • 今年2024的1024文章
  • 微服务的发布策略与设计约束
  • springboot073车辆管理系统设计与实现(论文+源码)_kaic.zip
  • 详析STL之容器map
  • R语言笔记(四):函数
  • Qt 窗口可见性 之 工程案例
  • Spark的Torrent Broadcast 详解
  • 基于YOLOv11的动物类别实时检测系统(python+pyside6界面+系统源码+可训练的数据集+也完成的训练模型)
  • Python 基础语法 - 赋值运算符