1

私は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をどのようにデバッグして、オブジェクトを完全に表示できるようにしますか?たとえば、開発ツールでオブジェクトをconsole.logにすると、オブジェクトを展開して、キーと値のペアを確認できます。ターミナルはこの贅沢を提供していないと思いますか?

4

4 に答える 4

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>

以下のコードを使用して、上記のサイトマップの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();
});
于 2014-07-09T05:40:24.400 に答える
3

libxmljsを使用してxml文字列を解析し、必要なデータを取得してください。

于 2013-01-07T17:23:10.560 に答える
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');           
                       });
    }
});
于 2013-01-08T21:10:22.167 に答える
0

誰かがcasperjsを使用してXMLサイトマップをテストするためのテストスイートを作成しました。特定のニーズに合わせてコードを採用できるかもしれません。

著者から:

このスクリプトは、指定されたサイトマップをクロールして、破損したURL、画像、css、およびJavascriptの子ページをチェックしようとします。エラーは指定されたログファイルに記録されます。

使用法:

casperjs sitemap_xml_testing.js --sitemap=<URL TO SITEMAP> --logfile=<LOG FILE NAME>

Bitbucketでのgmazin自動サイトマップテスト

于 2014-10-10T10:43:30.583 に答える