PhantomJS页面转储脚本问题

时间:2012-01-01 05:59:11

标签: javascript wget phantomjs

Digikey已经更改了他们的网站,现在有一个通过帖子调用onload的javascript。这杀死了我以前简单的java HTML代码检索器。我想在保存HTML /文本之前使用PhantomJS来允许执行javascript。

var page = new WebPage(),
t, address;


var fs = require('fs');

if (phantom.args.length === 0) {

console.log('Usage: save.js <some URL>');
phantom.exit();
} else {

address = encodeURI(phantom.args[0]);
page.open(address, function (status) {
    if (status !== 'success') {
        console.log('FAIL to load the address');
    } else {
        f = null;
        var markup = page.content;
        console.log(markup);
        try {
        f = fs.open('htmlcode.txt', "w");
        f.write(markup);
        f.close();          
        } catch (e) {
            console.log(e);
        }
    }   
    phantom.exit();

});

}

此代码适用于大多数网页但未通过:

http://search.digikey.com/scripts/dksearch/dksus.dll?keywords=S7072-ND

这是我的测试用例。它无法打开URL,然后PhantomJS崩溃。使用win32 static build 1.3。

任何提示?

基本上我所追求的是wget,它会在保存文件之前竞争修改文档的页面呈现和脚本。

1 个答案:

答案 0 :(得分:1)

快速一个肮脏的解决方案...然后发布在phantomjs网站上...是用了一个时间。我已修改您的代码以包含2秒等待。这允许页面在将内容转储到文件之前加载2秒。如果你需要确切的秒或时间量会有很大差异,这个解决方案可能不适合你。

var page = new WebPage(),

t, address;


var fs = require('fs');

if (phantom.args.length === 0) {

console.log('Usage: save.js <some URL>');
phantom.exit();
} else {

address = encodeURI(phantom.args[0]);
page.open(address, function (status) {
    if (status !== 'success') {
        console.log('FAIL to load the address');
    } else {
         window.setTimeout(function(){
            f = null;
            var markup = page.content;
            console.log(markup);
            try {
            f = fs.open('htmlcode.txt', "w");
            f.write(markup);
            f.close();          
            } catch (e) {
                console.log(e);
            }
        }   
        phantom.exit();
    },2000);
});

}