Проблема скрипта дампа страницы PhantomJS - PullRequest
6 голосов
/ 01 января 2012

Digikey изменил свой веб-сайт и теперь имеет JavaScript, который называется onload by post.Это убило мою бывшую простую программу поиска Java-кода.Я пытаюсь использовать PhantomJS, чтобы разрешить выполнение javascript перед сохранением HTML / текста.

var page = new WebPage(),
t, address;


var fs = require('fs');

if (phantom.args.length === 0) {

console.log('Usage: save.js <some URL>');
phantom.exit();
} else {

address = encodeURI(phantom.args[0]);
page.open(address, function (status) {
    if (status !== 'success') {
        console.log('FAIL to load the address');
    } else {
        f = null;
        var markup = page.content;
        console.log(markup);
        try {
        f = fs.open('htmlcode.txt', "w");
        f.write(markup);
        f.close();          
        } catch (e) {
            console.log(e);
        }
    }   
    phantom.exit();

});

}

Этот код работает с большинством веб-страниц, но не работает:

http://search.digikey.com/scripts/dksearch/dksus.dll?keywords=S7072-ND

Какой мой тестовый пример.Не удается открыть URL, а затем происходит сбой PhantomJS.Использование статической сборки win32 1.3.

Какие-либо советы?

В основном, что мне нужно, это wget, который конкурирует с визуализацией страницы и скриптами, которые изменяют документ перед сохранением файла.

1 Ответ

1 голос
/ 15 июля 2013

быстрое грязное решение ... и все же опубликовано на сайте фантомов ... это использовать тайм-аут. Я изменил ваш код, чтобы включить 2-секундное ожидание. это позволяет странице загружаться в течение 2 секунд, а затем выгрузить содержимое в файл. Если вам нужна точная секунда или время может сильно отличаться, это решение, вероятно, не будет работать для вас.

var page = new WebPage(),

t, address;


var fs = require('fs');

if (phantom.args.length === 0) {

console.log('Usage: save.js <some URL>');
phantom.exit();
} else {

address = encodeURI(phantom.args[0]);
page.open(address, function (status) {
    if (status !== 'success') {
        console.log('FAIL to load the address');
    } else {
         window.setTimeout(function(){
            f = null;
            var markup = page.content;
            console.log(markup);
            try {
            f = fs.open('htmlcode.txt', "w");
            f.write(markup);
            f.close();          
            } catch (e) {
                console.log(e);
            }
        }   
        phantom.exit();
    },2000);
});

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...