2012-01-01 31 views
6

Firma Digikey zmieniła stronę internetową, a teraz ma javascript, który nazywa się onload pocztą. To zabiło mojego byłego prostego programu do pobierania kodu HTML w języku Java. Próbuję użyć PhantomJS, aby umożliwić wykonanie javascript przed zapisaniem HTML/tekst.Wydanie skryptu strony z 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(); 

}); 

} 

Ten kod działa z większością stron internetowych, ale nie działa na:

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

który jest moim sprawdzianem. Nie można otworzyć adresu URL, a następnie PhantomJS ulega awarii. Korzystanie z kompilacji statycznej Win32 1.3.

Jakieś wskazówki?

Zasadniczo to, czym się zajmuję, to wget, który konkuruje z renderowaniem strony i skryptami, które modyfikują dokument przed zapisaniem pliku.

Odpowiedz

1

szybkie i brudne rozwiązanie ... a mimo to jest publikowane na stronie phantomjs ... jest użycie limitu czasu. Zmodyfikowałem twój kod tak, aby zawierał 2 sekundy oczekiwania. to pozwala stronie ładować się przez 2 sekundy przed zrzutem zawartości do pliku. Jeśli potrzebujesz dokładnej sekundy lub ilości czasu będzie się znacznie różnić to rozwiązanie prawdopodobnie nie będzie działać dla ciebie.

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

} 
Powiązane problemy