Javascript PhantomJS抓取:在脚本标记中获取CDATA
我正在尝试使用PhantomJS从网页中提取一些JS生成的数据。 我能够获取page.content,并且我可以看到我感兴趣的数据包含在脚本和CDATA标记中:Javascript PhantomJS抓取:在脚本标记中获取CDATA,javascript,html,dom,phantomjs,Javascript,Html,Dom,Phantomjs,我正在尝试使用PhantomJS从网页中提取一些JS生成的数据。 我能够获取page.content,并且我可以看到我感兴趣的数据包含在脚本和CDATA标记中: <!DOCTYPE html> <html style="" class="someclass"> <head> <meta class="meta-class-1"> <meta class="meta-class-1">
<!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>
我尝试过用几种不同的方法解析结果(libxml和node phantom,page.content解析使用JQuery),但到目前为止还无法获得任何脚本数据。
是否可以使用PhantomJs实现这一点?我做错了什么
首先查看您正在选择的标记:
这不是页面上的第一个脚本。您需要选择正确的标记
可能只是使用
1
而不是0
尝试使用eval()…在我尝试过的浏览器中工作,但没有效果。我发布的代码过于简化,我的脚本排在第14位左右。Facepalm对我来说,你是对的,我在脚本排序上犯了一个愚蠢的错误。谢谢你的帮助。
"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()
});
});
document.getElementsByTagName('script')[0].innerHTML
<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>