iframe里面的Javascript。用watir刮痧

时间:2012-02-29 20:47:16

标签: javascript watir scrape

我想弄清楚WATIR。 这是一种情况。我想在几个网站上监控广告,但抓取它们并不是一件容易的事,因为它们位于iframe中,然后还有另一个用javascript生成的iframe链接。只有这样才能找到我想要的页面。

以下是主页中的代码:

<iframe width="300" height="250" scrolling="no" frameborder="0"
id="adbottomleft" src="/ad/left1" name="adbottomleft"></iframe>

以下是iframe的说法:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<style type="text/css">

 body {
     background-color: black;
     margin:0;
     padding:0;
 }</style>
</head>
<body>
<!--  Rubicon Project Tag -->
<!--  Site: MangaReader   Zone: ROS_BTF_LEFT   Size: Medium Rectangle  -->
<div id="adfooter" style="width:300px;height:250px;"></div>
<script language="JavaScript" type="text/javascript">
function tl(){
    var loaded = 0;
    try {
        loaded = parent.document['adver'];
    } catch(e) { loaded = 0; }
    if (loaded != 1) {
        setTimeout(tl, 25);
    } else {
            var dest = document.getElementById('adfooter');
            var lframe = document.createElement('iframe');
            lframe.setAttribute('id','adbleft');
            lframe.setAttribute('width','300');
            lframe.setAttribute('height','250');
            lframe.setAttribute('scrolling','no');
            lframe.setAttribute('frameborder', '0');
            lframe.setAttribute('src', 'http://ad.mangareader.net/btleft1');
            dest.appendChild(lframe);
    }
}
(function (){
tl();
}());
</script>
</body>
</html>

它会生成另一个iframe,如下所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<style type="text/css">
                * {
            margin:0;
            padding:0;
        }
        body {
            margin-left: 0px;
            margin-top: 0px;
        }
        </style>
</head>
<body>
<!--  Rubicon Project Tag -->
<!--  Site: MangaReader   Zone: ROS_BTF_LEFT   Size: Medium Rectangle  -->
<script language="JavaScript" type="text/javascript">
var cb = Math.random();
var d = document;
var iframe = "&fr=" + (window != top);
var ref = "";
try {
    if (window != top) {
      ref = "&rf="+escape(d.referrer);
   }
} catch (ignore) { }
d.write("<iframe id='25504.15' name='25504.15' src='' framespacing='0' frameborder='no' scrolling='no' align='middle' width='300' height='250' marginheight='0' marginwidth='0'></iframe>");
d.getElementById('25504.15').src='http://optimized-by.rubiconproject.com/a/8240/13310/25504-15.html?cb='+cb+ref;
</script>
</body>
</html>

只有到了最后一页,我才有兴趣去抓。

<html>
  <head>
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="expires" content="0">
    <style type="text/css"> body {margin:0px; padding:0px;} </style>
    <script type="text/javascript">
      rubicon_cb = Math.random(); rubicon_rurl = document.referrer; if(top.location==document.location){rubicon_rurl = document.location;} rubicon_rurl = escape(rubicon_rurl);
      window.rubicon_ad = "3260765" + "." + "js";
      window.rubicon_creative = "3299047" + "." + "js";
    </script>
  </head>
  <body>

<a href="http://optimized-by.rubiconproject.com/t/8240/13310/25504-15.3260765.3299047?url=http%3A%2F%2Fwww.animepremium.net" target="_blank"><img src="http://assets.rubiconproject.com/campaigns/100/91/16/5/1325630095ap_300.jpg" border="0" alt="AnimePremium.net" /></a><script defer="defer" type="text/javascript">
{
    if (Math.floor(Math.random()*100) < 1)
    {
        var url;
        var iframe = (window != top);
        url = "http://tap.rubiconproject.com/stats/iframes?pc=8240/13310&ptc=25504&upn="+iframe;
        setTimeout(function(){ new Image().src = url }, 1000);
    }
}
</script>
<script>var _comscore = _comscore || []; _comscore.push({ c1: "8", c2: "6135404", c3: "28", c4: "13310", c10: "3299047" }); (function() { var s = document.createElement("script"), el = document.getElementsByTagName("script")[0]; s.async = true; s.src = (document.location.protocol == "https:" ? "https://sb" : "http://b") + ".scorecardresearch.com/beacon.js"; el.parentNode.insertBefore(s, el); })();</script><DIV STYLE="height:0px; width:0px; overflow:hidden"><IFRAME SRC="http://tap2-cdn.rubiconproject.com/partner/scripts/rubicon/emily.html?rtb_ext=1&pc=8240/13310&geo=eu" FRAMEBORDER="0" MARGINWIDTH="0" MARGINHEIGHT="0" SCROLLING="NO" WIDTH="0" HEIGHT="0" style="height:0px; width:0px"></IFRAME></DIV>
  </body>
</html>

不可能的任务?

这就是我正在做的事情。

irb
require "watir-webdriver"
browser = Watir::Browser.new :ff
browser.goto "mangareader.net"
browser.frame(:id, "adbottomleft").html - Works!

如果我想再打一层,我会收到错误

irb
require "watir-webdriver"
browser = Watir::Browser.new :ff
browser.goto "mangareader.net"
browser.frame(:id, "adbottomleft").frame(:id, "adleft").html -> Don't work.

元素属于与当前帧不同的帧 - 切换到包含框架以使用它。 我应该在第二个代码中更改什么才能让它读取下一个iframe?

我一直在寻找几天。开始使用selenium然后使用c#进行htmunit然后尝试使用python进行机械化,但是无法实现想要的结果。

我继续跳。我终于认为我将能够用WATIR达到我想要的效果。 我需要一些帮助来完成这项工作。有小费吗?

1 个答案:

答案 0 :(得分:1)

脚本创建的框架的ID是&#34; adbleft&#34;不是&#34; adleft&#34;这可能是你的问题

browser.frame(:id => "adbottomleft").frame(:id => "adbleft").html 

如果最终帧的id不是静态的,您可能必须通过索引

选择它
browser.frame(:id => "adbottomleft").frame(:id => "adbleft").frame(:index => 0)