如何获取其他网站可见文本?iframe+CORS绕过方案遇阻求助
方案可行性分析与实现方案
结论:前端iframe+fetch的方案不可行
你当前的思路走不通,核心原因是浏览器同源策略的严格限制:
- 你用
fetch获取到的PageOne.html内容,只是包含<iframe>标签的静态HTML代码,并非iframe加载完成后的目标网站内容——iframe里的内容是浏览器单独向otherurl.example发起请求加载的,属于跨域资源。 - 哪怕iframe嵌在你的域名页面里,只要目标站
otherurl.example和你的myurl.example不同源,浏览器就会完全阻止前端JS访问iframe内部的DOM结构或文本内容,这是浏览器的安全机制,无法通过前端手段绕过。
正确实现方案:后端代理(适配你的Python/Java基础)
后端请求不受浏览器同源策略限制,所以可以让你的后端服务器作为中间层,先请求目标站otherurl.example获取内容,再把内容返回给你的前端页面。
Python 实现示例(基于Flask)
- 安装依赖:
pip install flask requests - 编写后端代理接口:
from flask import Flask, Response import requests app = Flask(__name__) @app.route('/proxy-target') def proxy_target(): # 替换为实际目标网站地址 target_url = "https://otherurl.example" try: # 后端发起请求获取目标站内容 resp = requests.get(target_url) # 原样返回目标站的内容和响应头 return Response(resp.text, content_type=resp.headers['Content-Type']) except Exception as e: return f"请求失败: {str(e)}", 500 if __name__ == '__main__': app.run(host='0.0.0.0', port=8000)
- 前端
PageTwo.html修改fetch请求:
fetch('/proxy-target').then(function(response) { response.text().then(function(text) { // 这里拿到的就是目标网站的完整内容,可直接解析可见文本 console.log(text); }); }).catch(function(error) { console.warn(error); });
Java 实现示例(基于Spring Boot)
- 创建Spring Boot项目,添加
spring-boot-starter-web依赖 - 编写代理Controller:
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController public class TargetProxyController { private final RestTemplate restTemplate = new RestTemplate(); @GetMapping("/proxy-target") public String getTargetContent() { // 替换为实际目标网站地址 String targetUrl = "https://otherurl.example"; try { return restTemplate.getForObject(targetUrl, String.class); } catch (Exception e) { return "请求失败: " + e.getMessage(); } } }
- 前端同样修改fetch请求到
/proxy-target接口即可。
方案可行性说明
后端服务器与目标网站的交互属于服务器间的HTTP请求,不受浏览器同源策略约束,能自由获取目标站的内容并转发给前端,完全符合浏览器的安全规则,也是解决跨域内容获取问题的标准方案。
内容的提问来源于stack exchange,提问作者A. N.
相关产品推荐
相关产品推荐

