javascript - PhantomJS 页面转储脚本问题

标签 javascript wget phantomjs

Digikey 已经更改了他们的网站,现在有一个名为 onload via post 的 javascript。这杀死了我以前的简单 java HTML 代码检索器。我正在尝试使用 PhantomJS 在保存 HTML/文本之前允许执行 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 静态构建 1.3。

有什么建议吗?

基本上我所追求的是在保存文件之前完成页面呈现和修改文档的脚本的 wget。

最佳答案

一个快速但肮脏的解决方案...但已发布在 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);
});

}

关于javascript - PhantomJS 页面转储脚本问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8692038/

相关文章:

javascript - 包含函数无法识别文本变量中的子字符串

javascript - 如何在 nightwatch.js 中使用退格键从文本区域中删除文本

php - 发送 POST 请求 wget

javascript - 如何从文档中获取所有图片并存储到本地

javascript - 使用 PhantomJS 在 travis 上测试失败或随机挂起

javascript - 我怎样才能找到两次之间的差异

javascript - 自定义文件扩展名的 VSCode 导入路径智能感知

Perl wget 引用语法问题

linux - wget:如果它指向位置 X,则不遵循重定向,否则执行

javascript - 为什么 PhantomJS 渲染页面使用 window.setTimeout