使用phantomjs仅评估页面中的javascript元素

时间:2013-12-12 19:22:10

标签: javascript html phantomjs

我想评估此网站上的javascript链接:

http://www.egypt.gov.eg

例如,我有这个元素:

<li class="language">
                        <a id="ctl00_btnLang" href="javascript:__doPostBack('ctl00$btnLang','')">English </a>
                        <img src="/CSS/images/langArwEn.gif" alt="Language Arrow" /></li>

所以,我尝试使用phantomjs来评估它,使用this code

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

page.open('http://www.egypt.gov.eg', function (status) {
    if (status !== 'success') {
        console.log('Unable to access network');
    } else {
        var p = page.evaluate(function () {
            return document.getElementsByID('html')[0].innerHTML
        });
        fs.write('out.htm', p, 'w');
        console.log(p);
    }

    phantom.exit();
});

但它没有评估html,它只是按原样返回。那么有没有办法用phantomjs来评估整个页面的html,有没有办法挑出那些有javascript逐个评估的元素?

1 个答案:

答案 0 :(得分:0)

第一个问题是你通过'评估'页面上的javascript链接是什么意思...你想让PhantomJS点击它们吗?

页面自动化的文档在这里:
http://phantomjs.org/page-automation.html

要点击此特定链接,您可以执行以下操作:

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

page.open('http://www.egypt.gov.eg', function (status) {
    if (status !== 'success') {
        console.log('Unable to access network');
    } else {
        var p = page.evaluate(function () {
            document.getElementById('ctl00_btnLang').click()
        });
    }
    phantom.exit();
});

...但是这会将浏览器发送到新的网址,我不确定在这种情况下你的PhantomJS页面对象会发生什么。

是否要点击该页面上的所有javascript链接并获取已加载的每个新HTML页面的内容?

CasperJS似乎更容易“CasperJS是PhantomJS的导航脚本和测试工具”
http://docs.casperjs.org/

请查看此处的示例代码,该示例代码从一系列起始网址中删除并跟踪链接:
https://github.com/n1k0/casperjs/blob/master/samples/dynamic.js