我正在尝试使用PhantomJS从网页中提取一些JS生成的数据。 我能够获得page.content,我可以看到我感兴趣的数据包含在脚本和CDATA标记中:
<!DOCTYPE html>
<html style="" class="someclass">
<head>
<meta class="meta-class-1">
<meta class="meta-class-1">
<link rel="shortcut" type="image/x-icon" href="/assets/...">
<meta content="width=device-width, initial-scale=1, maximum-scale=1.0" name="viewport">
<title>Page Title</title>
<link rel="stylesheet" media="all" href="/assets/page.css">
<script type="text/javascript" async="" src="https://www.google-analytics.com/analytics.js"></script>
<script>
//<![CDATA[
window.gon={};gon.data={ "Interesting data":"the data" };
//]]>
</script>
<script src="//anoterscript.js"></script>
</head>
<body>
</body>
</html>
这是我尝试获取其中一个脚本失败的尝试之一。内容:
"use strict";
var page = require('webpage').create();
page.open('https://prioridata.com/apps/monzo-1052238659/country-split', function () {
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
var scriptCtnt = page.evaluate(function() {
return [].map.call(document.getElementsByTagName('script')[0].innerHTML, function(data) {
return data;
});
});
console.log('Data is ' + JSON.stringify(data));
phantom.exit()
});
});
我试图用几种不同的方式解析结果(libxml和node-phantom,使用JQuery解析page.content),但到目前为止还无法获取任何脚本数据。 是否可以使用PhantomJs实现这一目标?我在这里做错了什么?
答案 0 :(得分:0)
document.getElementsByTagName('script')[0].innerHTML
首先看一下您选择的标签:
<script type="text/javascript" async="" src="https://www.google-analytics.com/analytics.js"></script>
它没有任何内容。如果要获取脚本,则需要向https://www.google-analytics.com/analytics.js
发送新的HTTP请求。
看起来你真的想要这个脚本:
<script> //<![CDATA[ window.gon={};gon.data={ "Interesting data":"the data" }; //]]> </script>
不是页面上的第一个脚本。您需要选择正确的标签。
可能只是使用1
代替0
。