使用PhantomJS获取body onload javascript的值

时间:2013-11-23 16:17:04

标签: javascript jquery html phantomjs

是否有解决方案在此代码中使用JS(使用jQuery?)获取“ foo bar ”?

<!DOCTYPE html>
<html>
  <body role="application" onload="foo bar">
    <div>...</div>
  </body>
</html>

我在我的剧本中使用PhantomJS

编辑:“ foo bar ”是示例。这是我得到的价值。

编辑2:我的代码(不起作用)是http://paste.awesom.eu/nca&ln

编辑3:问题(S)和解决方案

经过几个小时,我发现了许多问题和解决方案。

首先,该网站只能在 https 中访问,我不能包含非https网址的jQuery文件。这就是我从网站上包含jQuery文件的原因。

我用这段代码调试了这个:

page.onConsoleMessage = function(msg) {
    console.log(msg);
};

然后,我需要更改我的用户代理,因为该网站有白名单。

page.settings.userAgent = 'Mozilla/5.0 (X11; Linux x86_64; rv:25.0) Gecko/20100101 Firefox/25.0';

最终代码是:

page.open(url, function(status) {
    if ( status === "success" ) {
        page.includeJs(url_js_file, function() {
            page.evaluate(function() {
                console.log("> " + $("body").attr("onload"));
            });
            phantom.exit();
        });
    }
});

感谢您的评论和回复。

5 个答案:

答案 0 :(得分:1)

看起来你没有将你的变量退出评估。 要做到这一点,你必须

var bodyonload = page.evaluate(function (s) {
    return document.body.getAttribute('onload');
}, 'bodyonload');

你非常接近它。

这是你的代码,它返回一个对象而不仅仅是一个变量。我认为它可能有用。

page.open(url, function (status) {
  if (status !== 'success') {
    console.log('FAILED: ' + status);
  } else {
    var result = page.evaluate(function (s) {
      var result = {
        bodyOnLoad: document.body.getAttribute('onload'),
        documentTitle: document.title
      };
      return result;
    }, 'result');
    console.log(result.bodyOnLoad);
  }
  phantom.exit();
});

希望有所帮助

<小时/> 编辑: 再看一下,在page.injectJs()中引用jquery可能存在问题,jquery是否在同一目录中?

答案 1 :(得分:0)

函数名之间应该没有空格,它应该是<body role="application" onload="foobar()">而不是<body role="application" onload="foo bar">

在HTML头标记

之间
 <script>
   function foobar(){
            alert('Am loaded');
   }

</script>

答案 2 :(得分:0)

尝试:

document.body.getAttribute("onload")

答案 3 :(得分:0)

如果您想获得onload的实际,请使用$('body').attr('onload')。对于任何元素,这将返回value of any attribute(假设正在使用jQuery)。如果不使用jQuery,document.body.getAttribute("onload")应该可以解决问题。

请注意,由于PhantomJS在技术上运行目标网页DOM的,因此您需要page.evaluate中的wrap any DOM scripts

page.evaluate(function () {
    // put your $('body').attr('onload') bit here.
});

答案 4 :(得分:0)

这对我来说是有用的,可以返回onload中的值。

<!DOCTYPE html>
<html>
  <body role="application" onload="foo bar">
    <div>...</div>

    <script src="http://code.jquery.com/jquery.js"></script>
    <script>
        console.log($("body").attr("onload"));
    </script>

  </body>
</html>