我正在尝试从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版本的截图
答案 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']
。