копирование данных с одной страницы на другую с помощью phantomJS - PullRequest
2 голосов
/ 06 января 2012

Я пытаюсь скопировать некоторые данные с одной обработанной веб-страницы на новую, которую я хочу экспортировать.Предпосылкой является то, что мне нужно очистить части страницы и создать новую страницу с частями исходной страницы.Кажется, проблема в том, что phantomJs включают методы JJ () иvalu () в песочнице, и я не могу найти правильный способ импорта DOM с одной страницы на другую.это выглядит следующим образом: страница является оригинальной, а новая страница:

    ....
    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);
    });
    ...

1 Ответ

3 голосов
/ 09 января 2012

Функция в вашем последнем includeJs вызове здесь не будет работать - как вы заметили, она помещена в «песочницу», и это означает, что замыкания не будут работать, поэтому title не будет определено. Метод передачи переменных в page.evaluate отмечен как запрос функции , но недоступен в 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 в песочнице, и ваши данные будут доступны в клиентской области.

...