是否有解决方案在此代码中使用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();
});
}
});
感谢您的评论和回复。
答案 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>