我做了很多搜索...尝试了一些方法.. 脚本执行后有webpage html内容。
我用不同的方法使用了phantomJS。
1-) 使用document.ready进行检查
var page = require('webpage').create();
console.log('The default user agent is ' + page.settings.userAgent);
page.settings.userAgent = 'SpecialAgent';
page.open('http://sosyal.hurriyet.com.tr/yazar/niobe_141/seni-unutmuyoruz-pasam_40011882', function(status) {
function checkReadyState() {
setTimeout(function () {
var readyState = page.evaluate(function () {
return document.readyState;
});
if ("complete" === readyState) {
onPageReady();
} else {
checkReadyState();
}
});
}
checkReadyState();
});
function onPageReady() {
var htmlContent = page.evaluate(function () {
return document.body.textContent;
});
console.log(htmlContent);
phantom.exit();
}
结果:脚本未加载,因此卸载的html返回..
2 - ) 设置超时太长
page.open(address, function (status) {
if (status !== 'success') {
console.log('Unable to load the address!');
phantom.exit();
} else {
window.setTimeout(function () {
var htmlContent = page.evaluate(function () {
return document.getElementsByClassName('hsaalicc-text').textContent;
});
console.log(htmlContent);
}, 1000); // Change timeout as required to allow sufficient time
}
});
结果:脚本未加载,因此卸载的html返回..
所以虽然我是android开发者并且没有太多jquery knowlodge用chrome developper控制台查看页面代码...而且我看到所有应该加载的数据都在脚本中window.articleDetailData
('#templateArticleDetail').tmpl(data).appendTo('#articleDetailContainer');
没有时间参数,但在移动设备中需要时间。但是在代码中我理解当页面加载时它应该复制到 #articleDetailContainer
所以我的问题 1 - ) 为什么文档就绪和高超时不返回加载脚本页面与phantomJS 2 - ) 有没有办法在脚本标记下解析windows.data?
如果我找不到任何简单的方法,将使用正则表达式来解析脚本
答案 0 :(得分:0)
您可以使用PhantomJsCloud.com执行此操作,但在下面的答案中,如果您想尝试使用自己的phantomjs.exe实例,我将尝试解释该过程。 (披露:我写过PhantomJsCloud)
PhantomJsCloud的文档:http://api.phantomjscloud.com/
1)等待AJAX?
使用PhantomJsCloud:只是一个正常的请求,所有内容都会自动正确加载。以下是您呈现为PNG的页面:http://api.phantomjscloud.com/api/browser/v2/a-demo-key-with-low-quota-per-ip-address/?request={url:%22http://sosyal.hurriyet.com.tr/yazar/niobe_141/seni-unutmuyoruz-pasam_40011882%22,renderType:%22png%22}
使用PhantomJs.exe:如果您自己执行此操作,则需要确保在呈现之前所有ajax资源请求都已完成。 (参见WebPage.OnResourceRecieved()api)
2)解析windows.data?
使用PhantomJsCloud:设置pageRequest.requestType =“script”,使用pageRequest.scripts执行脚本,并返回所需的数据。例如:http://api.phantomjscloud.com/api/browser/v2/a-demo-key-with-low-quota-per-ip-address/?request={url:%22http://example.com%22,renderType:%22script%22,scripts:{loadFinished:[%22return%20{hello:%27world%27,host:document.location.host};%22]}}
使用PhantomJs.exe:您需要使用http://phantomjs.org/api/webpage/method/include-js.html或injectJs并加载将进行解析的脚本,然后通过{{将其发送回phantomjs.exe代码3}}