我对phantomjs很新。很长时间以来,我一直在搞乱这些问题。我知道我错过了很简单的事情。我有以下sitemap.xml:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc>/</loc>
<changefreq>always</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>/vehicles</loc>
<lastmod>2013-01-07</lastmod>
</url>
</urlset>
现在我要做的就是使用phantomjs从xml文档中获取url值。我有以下内容。
page.open("sitemap.xml", function(status) {
if(status !== "success") {
console.log("Unable to open sitemap.");
} else {
// Stuck here
console.log(page.content);
}
});
xml文件的内容会正确打印到屏幕上,但是如何使用该文档来播放xml?我只需要能够获得每个url节点的第一个子节点。我尝试将xml文档解析为DOMParser,但这似乎不对。非常感谢您的帮助。
另外,你如何调试phatomjs,以便我可以看到它的全部荣耀?例如,如果我在Dev Tools中控制一个对象,我可以展开它并查看键 - 值对。我猜终端不提供这种奢侈品?
答案 0 :(得分:5)
PhantomJS允许您从页面上下文中调用javascript。使用普通的旧javascript查看我的解决方案。
假设是站点地图如此
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc>http://example.com/</loc>
<lastmod>2014-07-07T14:09:27+00:00</lastmod>
<changefreq>always</changefreq>
</url>
我可以使用下面的代码获取上述站点地图中的网址。
var page = require('webpage').create();
page.open('http://xxxx/static/sitemap/sitemap.xml', function() {
var content = page.content;
parser = new DOMParser();
xmlDoc = parser.parseFromString(content,'text/xml');
var loc = xmlDoc.getElementsByTagName('loc');
console.log(loc.length);
for(var i=0; i < loc.length; i++)
{
var url=loc[i].textContent;
}
phantom.exit();
});
答案 1 :(得分:3)
使用libxmljs来解析你的xml-string并获得你想要的数据!
答案 2 :(得分:0)
另一个想法是,你可以将jQuery注入页面并只是解析xml:
page.open("sitemap.xml", function(status) {
if(status !== "success") {
console.log("Unable to open sitemap.");
} else {
// Stuck here
console.log(page.content);
page.injectJs('j-query.js');//path to jquery
var output = page.evaluate(function(){
return $('url *:first-child');
});
}
});
答案 3 :(得分:0)
有人创建了一个使用casperjs测试XML Sitemaps的测试工具,也许你可以根据自己的需要采用这些代码。
来自作者:
此脚本将尝试抓取指定的站点地图,以检查子页面是否存在损坏的网址,图片,CSS和Javascript。错误将记录到指定的日志文件中。
用法:
casperjs sitemap_xml_testing.js --sitemap=<URL TO SITEMAP> --logfile=<LOG FILE NAME>