PhantomJs从RSS提要中删除所有XML标记

时间:2014-11-20 18:46:14

标签: javascript xml rss phantomjs casperjs

我正在尝试从RSS源中解析信息以进行测试。我使用CasperJS进行测试,使用PhantomJS进行截屏。当我导航到RSS提要时,我拍了一个屏幕截图,看到所有的XML标签都被剥离了,只是文本。我需要标签,因为我需要来自我的测试的feed的pubDate标记值。 无论如何我可以以原始形式获得饲料吗?

checkRSSFeed = function() {
    //first I navigate to a certain page in my website
    var href = '';

    casper.then(function() {
        this.test.assertExists(x('//a[contains(@href, "SUBSTRING OF URL")]'), 'the element exists');
        href = casper.getElementAttribute(x('//a[contains(@href, "SUBSTRING OF URL")]'), 'href');
     }).then(function() {
        this.open(href);
     }).then(function() {
        this.echo(this.getCurrentUrl());
        casper.capture(PATH_TO_SCREENSHOT);
     });
};  

下面是PhantomJS看到的RSS版本的截图

enter image description here

1 个答案:

答案 0 :(得分:2)

PhantomJS是一个将任意标记解释为HTML的浏览器。因此,即使您专门打开RSS提要作为页面,它也会尝试呈现HTML。但由于RSS元素(标签)不具有HTML的含义,因此它们被渲染为通用块元素。

有些浏览器实际上在遇到RSS Feed时会以特定的方式显示它们,但PhantomJS并不是这样。这意味着casper.capture是错误的工具。您需要casper.getPageContent才能返回完整的页面内容(这是RSS源代码)。

您仍然可以在RSS提要元素上执行操作(casper.getElementAttribute而其他人仍可以使用),但请注意,当您必须根据命名空间选择元素时,必须slight workaround完成。如果您不想使用特定于命名空间的选择器,请使用CSS选择器或带local-name()的XPath表达式,例如//*[local-name()='link']