【问题标题】:How can I parse an embedded iFrame to show only a snippet from the iframed page?如何解析嵌入的 iFrame 以仅显示 iframe 页面中的片段?
【发布时间】:2013-11-26 19:25:48
【问题描述】:

对于我的类似 Greasemonkey 的脚本,我在 Amazon.co.uk 上加载了一个 https 页面,我希望在链接页面上显示商品的价格。

到目前为止我一直在做什么:

tried to use an iFrame显示窗口:

var prodLinks = $("td.product_description a:contains('View Amazon Product Page')");
if (prodLinks.length) {
var iframeSrc = prodLinks[0].href;
iframeSrc = iframeSrc.replace (/http:\/\//, "https://")
    $("body").append ('<iframe id="gmIframe" src="' + iframeSrc + '"></iframe>');


$("#gmIframe").css ( {
    "position":     "absolute",
    "bottom":       "1em",
    "left":         "2em",
    "height":       "25%",
    "width":        "84%",
    "z-index":      "17",
    "background":   "#00FF00"
} );
}

这种方法的问题是,虽然它有时有效,但 iFrame 的内容太杂乱,所以我无法一眼看出我需要什么。

我希望能够立即看到的内容:2.85 英镑

假设链接页面是https://www.amazon.co.uk/gp/product/B001AM72BM/

来自上述页面的相关 HTML sn-p:

<tr id="actualPriceRow">
<td id="actualPriceLabel" class="priceBlockLabelPrice">Price:</td>
<td id="actualPriceContent"><span id="actualPriceValue"><b class="priceLarge">£2.85</b></span>
<span id="actualPriceExtraMessaging">

究竟如何解析 iFrame 以便只显示价格? (或者,如果不是这样,the page 的一小部分)

在本例中,我要显示的关键信息是 2.85 英镑

背景:我正在使用类似于 Greasemonkey 的东西

这是Fluid.app 上的 Greasekit(它很旧,但我必须使用它)。您可能甚至不需要知道这一点,因为它与 Greasekit 非常相似。所以,就这个问题而言,你可以假装它是。

注意事项

源页面和 iFramed 页面都是 https://amazon.co.uk * 。我无法链接到它,因为它需要我特别是登录。

如果您愿意,可以访问a mirror of the page on dropbox。显然,由于同源策略,某些东西可能无法在这个镜像中工作。

【问题讨论】:

    标签: javascript iframe greasemonkey greasekit fluid-mac-app-engine


    【解决方案1】:

    假设 iframe 是同域(在您的情况下似乎是这样),然后您通过等待 iframe 加载然后使用 jQuery 搜索和操作其内容来解析 iframe ,

    在这里我们要找到&lt;b class="priceLarge"&gt;£2.85&lt;/b&gt; 节点并删除其他所有内容。

    完成这一切的代码是:

    $("#gmIframe").load ( function () {
        var ifrmJQ      = $("#gmIframe").contents ();
        var targNode    = ifrmJQ.find (".priceLarge");
        var ifrmBody    = ifrmJQ.find ("body");
        ifrmBody.empty ();
        ifrmBody.append (targNode);
    } );
    


    您可以将此代码块放在问题中代码中的 $("body").append ('&lt;iframe 行之后。

    【讨论】:

    • 谢谢,效果很好,感谢您的专业知识。如果我不是解析原始 iframe,而是想要第二个(重复的)iframe 并对其进行解析,该怎么办?我是否制作了一个新的 iframe 并为其分配了一个新的 ID? (显然我会调整 CSS 来调整它的位置)
    • 问题 2(与上面无关) - 我喜欢它输出的正是我想要的,这太棒了。我可以做一些调整来抬高价格吗? (我不认为我可以覆盖 iFrame 中的 CSS 以使文本变大?)
    • * 我尝试添加"font-size"; "500%”,但没有成功,唉。 (这是在黑暗中拍摄的!)
    • 是的,您将创建一个新的 iframe 并为其分配不同的 ID。为了使解析结果更大,这两行之一应该在ifrmBody.append (targNode); 行之后工作:ifrmBody.css ("font-size": "500%");ifrmBody.find ("b").css ("font-size": "500%");
    猜你喜欢
    • 1970-01-01
    • 2018-07-22
    • 2011-07-18
    • 2011-03-17
    • 2011-05-08
    • 2013-08-21
    • 2022-06-30
    • 1970-01-01
    • 2021-05-04
    相关资源
    最近更新 更多