使用PhantomJS获取body onload javascript的值

使用PhantomJS获取body onload javascript的值,javascript,jquery,html,phantomjs,Javascript,Jquery,Html,Phantomjs,在这段代码中,有没有一种解决方案可以获得JS中的“foo-bar”(使用jQuery?)呢 <!DOCTYPE html> <html> <body role="application" onload="foo bar"> <div>...</div> </body> </html> 然后,我需要更改我的用户代理,因为该网站有一个白名单 page.settings.userAgent = 'Mo

在这段代码中,有没有一种解决方案可以获得JS中的“foo-bar”(使用jQuery?)呢

<!DOCTYPE html>
<html>
  <body role="application" onload="foo bar">
    <div>...</div>
  </body>
</html>
然后,我需要更改我的用户代理,因为该网站有一个白名单

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();
        });
    }
});

谢谢您的评论和回答。

函数名之间不应该有空格,它应该像
而不是

在HTML头标记之间

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

</script>

函数foobar(){
警报(“已加载”);
}
试试:


如果要获取
onload
的实际文本值,请使用
$('body').attr('onload')
。对于任何元素(假设使用jQuery),这将返回。如果不使用jQuery,
document.body.getAttribute(“onload”)
应该可以完成这项任务

请记住,由于PhantomJS在技术上是在目标页面的DOM之外运行的,因此需要在
页面中进行评估

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

这对我在
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>

...
console.log($(“body”).attr(“onload”);

看起来您没有将变量返回到evaluate之外。 要做到这一点,你必须

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是否在同一目录中?

不,没有,因为这毫无意义。
onload
通常应该包含在主体加载时执行的JavaScript。此代码将导致webbrowser控制台中显示的JavaScript错误。
onload
属性应包含浏览器将尝试执行的有效javascript代码。因此,在javascript发生后尝试获取一些信息就像在我的汽车失去车轮后询问如何驾驶我的汽车一样。你知道,有点不可能。@adeneo我需要这个,因为它包含一个我需要得到的值。@gustavi你说它包含一个你需要得到的值是什么意思?这并不是存储用户定义值的最佳位置。因为HTML5定义了
数据-
属性。谢谢,但这不起作用:/<代码>返回document.body.getAttribute(“onload”)
不返回任何内容。它在Chrome上执行此操作:您使用什么浏览器进行测试?哦,对不起。我应该更加注意你的问题。你确定jQuery被正确注入了吗?尝试使用
getAttribute
方法。@gustavi:再次解析代码,我发现:使用
return
似乎有问题。尝试直接设置变量的值。请看一个例子。谢谢你的回答,这有助于我找到问题!
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();
});