PhantomJS无法在javascript页面上工作

时间:2017-01-15 09:37:46

标签: javascript jquery bash phantomjs

我正在使用PhantomJS + wget在javascript页面上查看页面内容(这是我的目标)。

这是我使用的命令:

$ phantomjs save_page.js http://wzdig.pbc.gov.cn:8080/dig/ui/advsearch.action > page.html

beeing save_page.js

var system = require('system');
var page = require('webpage').create();

page.open(system.args[1], function()
{
    console.log(page.content);
    phantom.exit();
});

但是html显示“请开启JavaScript并刷新该页”,这意味着“激活javascript”。

我做错了什么?

感谢。

2 个答案:

答案 0 :(得分:2)

您需要设置userAgent,此脚本有效:

var page = require('webpage').create({viewportSize:{width: 1600,height: 900},
settings:{userAgent:'Mozilla/5.0 (X11; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0',
javascriptEnabled:'true',
loadImages:'false'
}});
var system = require('system');

page.open(system.args[1], function(){
setTimeout(function(){
    console.log(page.content);
    phantom.exit();
},3000);
});

答案 1 :(得分:2)

请参阅该行下方的更新。

您的示例不起作用的原因是棘手的目标页面,它测试页面是否在可以执行javscript的真实浏览器中打开。第一次加载页面时,您的浏览器将获得一个javascript来执行。然后第二次加载页面时会显示真实页面。

但是在您的示例中,脚本在第一页加载后立即退出。

一个更好的解决方案,不依赖于3秒的超时(连接到中国站点通常很慢,我们不能100%确定3秒就足够了。)

var system = require('system');
var page = require('webpage').create();

var system = require('system');
var page = require('webpage').create();

// Imitate a real browser
page.viewportSize = { width: 1440, height: 900 };
page.settings.userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36";

// Called every time a page is loaded
page.onLoadFinished = function(){

    // If the real page with search controls is loaded
    // then get page.content and exit
    var inputCount = page.evaluate(function(){
        return document.querySelectorAll(".jfk-textinput").length;
    });

    if(inputCount > 0) {
        console.log(page.content);
        phantom.exit();
    }

};

page.open(system.args[1]);

<强>更新

好的,所以你可能会在搜索结果之后。在这种情况下,您可以更改决定页面已加载到此解决方案的逻辑:

var inputCount = page.evaluate(function(){
    return document.querySelectorAll("h3").length;
});

...因为找到的文章的标题是用&lt; h3&gt;输出的。标签