gpt4 book ai didi

javascript - PhantomJs 从 RSS 提要中剥离所有 XML 标签

转载 作者:行者123 更新时间:2023-11-30 17:10:53 26 4
gpt4 key购买 nike

我正在尝试从 RSS 提要中解析信息以进行测试。我使用 CasperJS 进行测试,使用 PhantomJS 捕获屏幕截图。当我导航到 RSS 提要时,我拍了一张截图,看到所有的 XML 标签都被删除了,只有文本。我需要标签,因为我需要提要中的 pubDate 标签值来进行测试。我能以原始形式获取 Feed 吗?

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

最佳答案

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

事实上,有些浏览器在遇到 RSS 提要时会以特定方式显示它们,但 PhantomJS 并非如此。这意味着 casper.capture 是错误的工具。你需要 casper.getPageContent返回完整的页面内容(即 RSS 提要源)。

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

关于javascript - PhantomJs 从 RSS 提要中剥离所有 XML 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27047210/

26 4 0