如何通过Quicker获取iframe中的网页元素?

动作开发 · 4080 次浏览
EC10010 创建于 2024-08-30 19:22

🔘问题:如何获取下图中红框内的文本?

🔘测试网站:

http://ip111.cn

🔘已尝试过的无效控制台代码:

1、document.querySelector("iframe[src='https://us.ip111.cn/ip.php']").contentWindow.innerText;
2、document.querySelector("iframe[src='https://us.ip111.cn/ip.php']").contentDocument.innerText;

🔘网页元素概览

EC10010 最后更新于 2024/8/30

颜晓筱 2024-09-14 09:13 :

我认为是可以的,因为我自己也有在用,但是你最好不要用src来查找,如果iframe个数不变,你就直接document.querySelectorAll('iframe')[1],因为你这个src中有//  :等特殊符号,像这样,注意要是top层级,如图红框,我的是序号为1的,就是1,你的可以自己再来看

颜晓筱 回复 颜晓筱 2024-09-14 09:16 :

而且我这个iframe也是通过网址来显示的

颜晓筱 回复 颜晓筱 2024-09-14 09:18 :

层级很重要,一定是top,因为浏览器有时候会自动帮你改变层级,我这个就变层级,就查找不到了

EC10010 回复 颜晓筱 2024-09-14 09:33 :

谢谢。在浏览器控制台是获取到了,但用Quicker获取不到。你可以在话题里的测试网站测试。

颜晓筱 回复 EC10010 2024-09-14 10:27 :
确实获取不到,emmm...窗口控件都试了没用
回复内容
darcyc 2024-08-30 19:56
#1

一句话的答案:不行


长一点的答案:由于同源策略,如果域名不一致并且网页没有设置CORS头来专门允许,我们不能优雅的读取/控制到iframe里面的内容(在不使用任何优雅的工具的前提下,换句话说,没有用户端的方案)。

在这种情况下,只能根据实际情况来解决这个问题,例如OP提到的案例中,使用HTTP请求(配置好请求头例如Referer)来做到直接获取网页的内容。

但是如果是在其他情况下,例如其他内部管理页面的iframe(非同源),或者是谷歌的插件创建的iframe。简单的HTTP就不一定能解决问题。如果硬要控制,则只能使用其他“不这么优雅”的工具了。

“不这么优雅的工具”有:

1. 我个人使用CDP来控制浏览器,可以直接设置JS执行所在的上下文,但这要求用户去给浏览器加一个启动参数,这个参数是直接暴露整个浏览器的数据的。

2. 网络上有说可以用 --disable-web-security 来禁用安全,但是我测试了,发现并不能让本次的代码成功运行,不知道问题出在哪里。

EC10010 回复 darcyc 2024-08-30 20:05 :

感谢详细解答。

WindChant 2024-08-31 09:28
#2

只是获取结果的话可以直接请求 https://us.ip111.cn/ip.phphttps://sspanel.net/ip.php
header 带上 'Referer': 'http://ip111.cn/',就行

EC10010 回复 WindChant 2024-08-31 09:44 :

谢谢

回复主贴