2012-01-01 16 views
6

Digikey ha cambiato il proprio sito Web e ora ha un javascript che viene chiamato onload tramite post. Questo ha ucciso il mio ex semplice documentatore di codice HTML java. Sto cercando di usare PhantomJS per consentire l'esecuzione del javascript prima di salvare l'HTML/testo.Problema di script dump di pagina PhantomJS

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(); 

}); 

} 

Questo codice funziona con la maggior parte le pagine web, ma non riesce in:

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

che è il mio banco di prova. Non riesce ad aprire l'URL e quindi si blocca PhantomJS. Utilizzo di build statica Win32 1.3.

Qualche consiglio?

Fondamentalmente quello che sto cercando è wget che compete al rendering della pagina e agli script che modificano il documento prima di salvare il file.

risposta

1

una soluzione rapida e sporca ... eppure è pubblicata sul sito di phantomjs ... è di usare un timeout. Ho modificato il codice per includere un'attesa di 2 secondi. questo consente alla pagina di caricare per 2 secondi prima di scaricare il contenuto in un file. Se hai bisogno del secondo esatto o della quantità di tempo che può variare notevolmente, questa soluzione probabilmente non funzionerà per te.

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

}