【发布时间】:2014-07-08 14:13:56
【问题描述】:
有经济日历的页面。
场景:
- 我正在浏览器中加载页面。例如:http://www.dukascopy.com/swiss/english/marketwatch/calendars/eccalendar/
- 看穿它。如果有我感兴趣的数据,我点击按钮并保存所有加载了 iframe 数据的 html 以进行解析。
问题是这个页面上的必要数据是用 iframe 加载的。我在这里读到 chrome 拒绝使用 js-injects 访问 iframe。但是我可以通过右键菜单中的“检查元素”轻松访问必要的表格。是否可以在没有 js-injects 的情况下访问它?就像自动“检查 DOM 元素”或内部 HTML 一样?
我在 pyside(python qt webkit 接口)中这样解决了这个问题:
def print_content():
res = web.page().mainFrame().childFrames()
for i in res:
s = i.documentElement().toOuterXml()
print(s)
但现在我想通过 chrome(chromium) 扩展来实现。现代铬(铬)有类似的功能吗? 例如:
chrome.web.page().mainFrame().childFrames() etc...
更新:
尝试推荐。更正清单并添加到内容脚本:
chrome.runtime.sendMessage({greeting: "hello"}, function(response) {
var res = document.querySelectorAll("iframe");
var len = res.length;
for (var i = 0; i < len; i++) {
//alert(myStringArray[i]);
console.log(res[i].contentDocument);
//Do something
}
//console.log(res);
收到此错误: 事件处理程序中的错误(未知):错误:阻止了来源为“dukascopy.com”的帧;从访问跨域框架。在 chrome-extension://bgoddjjeokncninlaacmjamgkohmcecb/content.js:19:23 在 Extensions::messaging:323:11 在 Function.target.(匿名函数) (extensions::SafeBuiltins:19:14) 在 Event.dispatchToListener (extensions ::event_bindings:386:22) 在 Event.dispatch_ (extensions::event_bindings:371:27) 在 Event.dispatch (extensions::event_bindings:392:17) 在 dispatchOnDisconnect
【问题讨论】:
-
您需要与 iframe 内的 DOM 元素交互还是只解析数据?如果您只需要读取 iframe 中的数据,则无需注入帧。你的python代码可以很容易地用JS替换,例如:
var res = document.querySelectorAll("iframe"); -
尝试在 content_script 中使用并将结果刷新到 js 控制台。它向我显示了一些文件,并且这个“contentDocument: [Exception: DOMException]”OutterHTML 也不包括 iframe 的构建表。所以内容不可访问?还是我在某个地方弄错了?
-
还记录了这个:事件处理程序中的错误(未知):错误:阻止了具有源“dukascopy.com”的帧访问跨源帧。在 chrome-extension://bgoddjjeokncninlaacmjamgkohmcecb/content.js:19:23 在 Extensions::messaging:323:11 在 Function.target.(匿名函数) (extensions::SafeBuiltins:19:14) 在 Event.dispatchToListener (extensions ::event_bindings:386:22) 在 Event.dispatch_ (extensions::event_bindings:371:27) 在 Event.dispatch (extensions::event_bindings:392:17) 在 dispatchOnDisconnect (extensions::messaging:283:27)跨度>
-
好的,所以这里这种做法的问题是iframe和父页面的域不同,所以我的做法在这种情况下是行不通的。这种方法适用于与父页面具有相同域和协议的 iframe(即,可以读取 iframe 内容而无需注入)
标签: javascript html google-chrome iframe google-chrome-extension