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

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.lryc.cn/news/467268.html

相关文章:

  • 2024前端html5,css3面试题总汇
  • css实现外层不换行,内层换行
  • word取消自动单词首字母大写
  • flex常用固定搭配
  • Kafka、Kafka Streams、Drools、Redis 和分布式数据库的风控系统程序
  • C++在实际项目中的应用第一课:游戏开发中的C++
  • 一键下载海外youtbe视频 解锁版 支持多分辨率
  • Scala内部类的运用
  • 【在Linux世界中追寻伟大的One Piece】Socket编程UDP
  • 机器学习在聚合物及其复合材料中的应用与实践
  • 用大模型或者预训练模型对图片进行OCR
  • 如何使用的是github提供的Azure OpenAI服务
  • elementUI进度条el-progress不显示白色
  • 学习笔记——路由——IP组播-PIM(协议无关组播)-概述/PIM模式
  • TCP 协议学习
  • python3的基本数据类型:String(字符串)
  • 面试总结(2024/10/16)
  • 从图像识别到聊天机器人:Facebook AI的多领域应用
  • linux中级(NFS服务器)
  • 微软主动出击,“钓”出网络钓鱼者
  • Xcode16 编译运行YYCache iOS18 sqlite3_finalize 闪退问题解决方案
  • Kafka-Windows搭建全流程(环境,安装包,编译,消费案例,远程连接,服务自启,可视化工具)
  • django模板相关配置
  • MongoDB等保限制下的连接认证问题
  • 2024 睿抗机器人开发者大赛(RAICOM)-【网络安全】CTF 部分WP
  • idea 无法输入中文 快速解决
  • 掌握ElasticSearch(五):查询和过滤器
  • 自学[vue+SpringCloud]-012-SpringCloud工程发送邮件
  • STM32通信协议-I2C
  • 廉颇老矣尚能饭否,实践甘肃数据挖掘挑战赛作物与杂草的智能识别,基于YOLOv3全系列【tiny/l/spp】参数模型开发构建田间低头作物杂草智能化检测识别模型