脚本执行后通过php

时间:2015-11-10 14:17:06

标签: javascript php phantomjs

我做了很多搜索...尝试了一些方法.. 脚本执行后有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

enter image description here此外,我找到了加载数据内容的函数。

('#templateArticleDetail').tmpl(data).appendTo('#articleDetailContainer');

没有时间参数,但在移动设备中需要时间。但是在代码中我理解当页面加载时它应该复制到 #articleDetailContainer

所以我的问题 1 - ) 为什么文档就绪和高超时不返回加载脚本页面与phantomJS 2 - ) 有没有办法在脚本标记下解析windows.data?

如果我找不到任何简单的方法,将使用正则表达式来解析脚本

1 个答案:

答案 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}}