2012-01-06 11 views
2

処理している1つのWebページから、エクスポートする新しいデータに一部のデータをコピーしようとしています。背景は、ページの一部を掻き取る必要があり、元のページの一部で新しいページを構築する必要があるということです。 問題は、phantomJs includesJs()とevaluate()メソッドがサンドボックス化されていて、適切な方法が見つからないようです。 DOMをあるページから別のページにインポートします。phantomJSを使用してあるページから別のページにデータをコピーする

私はページがオリジナルと新しいページ外れていると、次のようになり、いくつかのテストコードを持っている:ここにあなたの最後のincludeJs呼び出しで

.... 
    var title = page.evaluate(function() { 
     return title = document.getElementById('fooo').innerHTML; 
    }); 
    console.log('page title:' + title); 
    //fs.write('c:/Temp/title.js', "var title = '" + title + "';", 'w'); 

    var out = new WebPage; 
    out.viewportSize = page.viewportSize; 
    out.content = '<html><head></head><body><div id="wrapper"></div><p>done</p></body></html>'; 
    out.includeJs('c:/Temp/title.js', function() { 
     var p = document.createElement('p'); 
     p.appendChild(document.createTextNode(title)); 
     document.getElementById('wrapper').appendChild(p); 
    }); 
    ... 

答えて

3

機能が動作しません - あなたが注意として、それはですサンドボックス化されています。つまり、クロージャーが機能しないため、titleは定義されません。変数をpage.evaluateに渡す方法はnoted as a feature requestですが、PhantomJS v.1.4.1では利用できません。

私はこの問題を回避一般的な方法は、文字列使用して関数を作成することができますFunctionコンストラクタ、使用することです:今

var myVar = {some:"values", I:"want to pass into my page"}, 
    test = new Function("window.myVar = " + JSON.stringify(myVar)); 
page.evaluate(test); 

をあなたevaluateできmyVarを参照し、あなたが持っている1、などの機能あなたのデータはクライアントスコープで利用可能になります。

関連する問題